Хламидомонада / Говнокод #17746 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
--Поиск минимальной выпуклой оболочки
import Data.List; import Data.Ord
--общие функции и типы
data Point = P{x::Float,y::Float}
	deriving (Show,Eq) 
	
getRotate a b c = baX * cbY - baY * cbX
	where baX = x b - x a; baY = y b - y a;
		  cbX = x c - x b; cbY = y c - y b;
		 
sortFunc a b c 
	|k < 0  = LT
	|k == 0 = compare (long a c) (long a b) 
	|k > 0  = GT
		where k = getRotate a b c

long a b = (x b - x a)*(x b - x a) + (y b - y a)*(y b - y a)
		
getLeftPoint = minimumBy (comparing x)
--Джарвис
getMBOJarvis l = mboJ fp l fp
	where fp = getLeftPoint l		
		
mboJ current list fp 
	|getRotate current next fp > 0   = []
	|True                            = current : mboJ next listWOC fp
		where listWOC = filter ((/=)current) list;
			  next    = minimumBy (sortFunc current) listWOC;
--Грехем			
getMBOGragam = tail.throwGraham.sortGraham 

sortGraham list = fp:sortBy (sortFunc fp) list
	where  fp = getLeftPoint list
		   
throwGraham (f:s:t) = mboG (s:f:[]) t
		   
mboG <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dfb9ac9f">[email protected]</a>(f:s:st) <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="80f3eec0">[email protected]</a>(h:t)
	|sortFunc s f h == GT = mboG (s:st) sn
	|True                 = mboG(h:fs) t
	
mboG <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0b6a390">[email protected]</a>(f:st) <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="76051836">[email protected]</a>(h:t)   = mboG(h:fs) t
	
mboG l [] = l
--тесты		     
testList1 = [P 0 (-1), P (-1) 0, P 0 1,P 1 0,P (-0.5) (-0.5),P 0.5 (-0.5),P (-0.5) 0.5,P 0.5 0.5,P 0 0]
		  
testList2 = [P 0 0, P 1 0, P 0 1,P 2 0,P 1 1,P 0 2,P 2 1,P 1 2,P 2 2]
	
	
testJ1  = mapM_ print $ getMBOJarvis testList1		
		
testG1  = mapM_ print $ getMBOGragam testList1

testJ2  = mapM_ print $ getMBOJarvis testList2		
		
testG2  = mapM_ print $ getMBOGragam testList2

Haskell
[сарказм]
Как я могу идти против моды - не заливать этих французских лаб и не выпивать чаю?

Выкладываю, что бы порадовать своего кота Барсика. Барсик, покойся с миром.

А спонсор этого говна - компания "Потролль препода". "Потролль препода" - пиши лабы на хаскелле
[/сарказм]

Запостил: kegdan kegdan, (Updated )

Комментарии (60) RSS

  • Унижайте меня, доминируйте надо мной (то есть хвалите, конечно хвалите!)
    Ответить
    • Траллить препода на хаскеле - самый правильный путь использования хаски что я видел. Уважуха! В такие моменты жалко что уже не в инсте. Может ради этого на полгодика поступить? Афтор пищи есчо
      Ответить
      • я какой-то хелловорлд сдавал на хаски. Но намерения потроллить не было, а преподу было все равно.
        Ответить
        • >>Но намерения потроллить не было, а преподу было все равно.

          Да и у меня основная цель - не атрофировать фунцианальщину.
          Ответить
        • Я хреначил лабы по вычам на окамле. Потому что это приятно.
          Ответить
          • пирфомансом с крестоносцами не мерялись?

            Вообще на окамле довольно просто лабы писать, там ведь от эффектов никто не ограждает, пиши себе в матрицы сколько влезет, и производительность предсказуемая.
            С хацкелем хардкорнее - там половину нормальных алгоритмов (классические линейные строковые вроде КМП, обходы графов, преобразования матриц, деревья фенвика, тыщи их) без монады ST не изобразишь, а ленивость добавляет веселья при оптимизации.
            Ответить
            • Не мерялся. Факультет не прогерский, кодить всё равно почти никто не умеет. А лабы такие, что максимальный перформанс достигается использованием MKL.
              Ответить
  • На меня все тут наезжали, что я сигнатуры функций не указывал. А по мне норм без них, олол ниасиляторы
    Ответить
  • О видно сразу чувак понимает что такое фиксированная точка.
    Ответить
  • 1) Graham
    2) Используй otherwise
    3) Почему s : f : [] вместо [s, f] ?
    4) Почему ((/=) current) вместо (current /=) ?
    Ответить
    • otherwise - просто синоним великой Истины, но писать его дольше
      3 и 4 - хз, на автомате писал
      Ответить
        • > > на автомате писал
          > кофейном?
          на детерминированном или недетерминированном кофейном автомате?
          Ответить
          • На детерминированном кофейном автомате калашникова.
            Ответить
            • На детерминированном кофейном игровом автомате калашникова.
              Ответить
                • А как же иерархический нелокальный детерминированый кофейный игровой автомат Калашникова?
                  Ответить
                  • Иерархический нелокальный детерминированый кофейный игровой автомат Калашникова в третьей нормальной форме Кегдана-Лейбница.
                    Ответить
                    • Лейбница - чисто из жалости - плакался, просился, жалко мне стало мужика
                      Ответить
  • Ты же с ФИнфа?

    Это была лаба по вычислительной геометрии?
    Удалось потроллить? 🙂
    Ответить
    • В прошлом семе не вышло (зато преподаватель проникся ко мне добром), а в этом - еще не сдавал, кто знает как оно выйдет
      Есть такое
      Ответить
    • Подозреваю что сейчас те кто писали лабы на брейнфаке уже давно сами стали преподами.

      С хацкелом тоже самое. Пришёл выебщик сдавать лабу на экзотическом языке, и сходу получил десяток колких вопросов.
      Ответить
    • Он потом и писал на J (х.з. лабы или нет, но сюда часто постил).
      Ответить
      • Чот я ни видел. Где-то в куче, наверное ?
        А вообще, мне нравится loopless code, но синтаксис J — ет писдес
        Ответить
    • В моих постах много Джея. Даже компилятор брейнфака на J
      Ответить
          • > транслятор
            1i #include <stdio.h> \
            int main() { unsigned char buf[65536] = {0}, *c = buf;
            $a return 0; }
            s/\+/(*c)++;/g
            s/\-/(*c)--;/g
            s/\[/while(*c){/g
            s/\]/}/g
            s/\./putchar(*c);/g
            s/,/c=getchar();/g
            s/>/c++;/g
            s/</c--;/g
            Сможешь портануть на J?
            Ответить
            • Кстати, копелятор будет проще, чем интырпритатр. За один проход можно откопелировать.
              Ответить
            • Лол, сконпелял hello world. gcc от него только putchar'ы с константами оставил.
              Ответить
            • Мне лень.
              Я плюшевый тюлень.
              И телом нежным впитываю тень.
              В шабата день.
              Отвень.
              Ответить
              • Какое всё-таки говно.
                Ваш этот J интерпретатор.
                На нём Кегдану не дано.
                Слепить брейнфака конпелятор.
                Ответить
            • Забубенил:
              prolog =: '#include <stdio.h>' , LF , 'int main(){char buf[30000]={0},*c=buf;'
              epilog =: '}' , LF
              
              translate =: verb define
                 if. y = '+' do. '(*c)++;'
                 elseif. y = '-' do. '(*c)--;'
                 elseif. y = ',' do. '*c = getchar();'
                 elseif. y = '.' do. 'putchar(*c);'
                 elseif. y = '<' do. 'c--'
                 elseif. y = '>' do. 'c++'
                 elseif. y = '[' do. 'while(*c){'
                 elseif. y = ']' do. '}'
                 end.
              )
              
              translate_all =: [: prolog&, [: ,&epilog translate"0
              
              echo translate_all '+-<>.,[]'
              Ответить
                • Я хз, это лучше у kegdan'а спросить. По любому выходной код будет выглядеть как говно, J лучше для обработки массивов подходит
                  Ответить
                  • А какой-нибудь краткой формы для if/elseif нету? Ну чтобы весь код из закорючек состоял. А то твой код слишком понятен по сравнению с другим говном на J.
                    Ответить
                    • Есть @. — чо-то типа case:
                      f =: (9:`8:`7:) @. ]
                         ( f 0 ) , ( f 2 ) , f 1
                      9 7 8

                      вызывает из коробки глагол по индексу.

                      ЗЫ. 9: и тп — это глагол, кот-й возвращает константу
                      Ответить
                        • В эксплицитной форме мона писать:
                          while. <условие> do.
                            <всякая поебень>
                          end.

                          А в тацитной эта хня не нужна, векторный же язык, можно с помощью рангов ибашить поэлементно или построчно.
                          ЗЫ. ещё есть ^: для возведения глагола в степень. Можно въебать бесконечную степень, и глагол будет ибашить пока результат не перестанет меняться.
                          Ответить
                            • Сыклы-то не проблема, а вот как инкрементировать только один эл массива не упоровшиссь:
                              ]a =: 10 $ 0
                              0 0 0 0 0 0 0 0 0 0
                                 i =: 3
                                 ]a =: a + i = i. @ # a
                              0 0 0 1 0 0 0 0 0 0
                              Ответить
              • Блядь, там где с++ и с-- заьыл почки с запятой, а вконце, в епилоге: ретурн 0;
                Ответить
  • Ага, только есть такие преподы, которые скажут иди переписывай напаскаль.
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8