1. Haskell / Говнокод #17746

    −99

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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 fs@(f:s:st) sn@(h:t)
    	|sortFunc s f h == GT = mboG (s:st) sn
    	|True                 = mboG(h:fs) t
    	
    mboG fs@(f:st) sn@(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, 07 Марта 2015

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

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

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

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

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

        С хацкелом тоже самое. Пришёл выебщик сдавать лабу на экзотическом языке, и сходу получил десяток колких вопросов.
        Ответить
    • Et tu, kegdan
      Ответить

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