1. Список говнокодов пользователя kegdan

    Всего: 58

  2. Куча / Говнокод #16566

    +143

    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
    Монады как коллбеки
    
    На джаваскриптовой конференции, о которой я писал в прошлом посте, в процессе обсуждения 
    ФП неизбежно встала тема монад.
    
    Мне было интересно, насколько легко можно объяснить монады «на пальцах». Возможно, не в 
    той степени, чтобы человек смог сразу с ними программировать, но в той степени, чтобы понимать,
     что они делают и зачем нужны.
    
    И у меня возникла идея объяснить монады без типов. Мне кажется, главную сложность при изучении 
    монад вызывают именно типы (а точнее, конструкторы типов и классы конструкторов типов), т.к. многие 
    приходят в Haskell из языков с менее выразительной системой типов.
    
    В то же время, монады могут существовать и в динамических языках. А если из монад убрать типы, 
    то останется лишь то, как они работают во время исполнения — и там все довольно прозрачно.
    
    Вычислительная сущность монад — это continuation passing style, или коллбеки. Любая программа 
    на node.js написана в этом стиле.
    
    Левый аргумент >>= — вычисление, а правый — коллбек. Коллбек принимает результат вычисления 
    и совершает какие-то дальнейшие вычисления
    
    Эта аналогия особенно точно выполняется для монад Identity, IO, Maybe/Either. Каждая отдельная 
    монада определяет, к чему конкретно будет применен коллбек.
    
    Но посмотрим, например, на монаду [] (список). Если руководствоваться только лишь представлением 
    о монаде как о вызове коллбеков, то самый простой способ определить списочную монаду — это a >>= k = map k a (что неверно).
    
    Аналогия с коллбеками слишком «императивна» и не улавливает тонкость — структуру самой монады. 
    Чтобы эту структуру наглядно показать, как раз и нужны типы.

    kegdan, 19 Августа 2014

    Комментарии (8)
  3. Куча / Говнокод #16551

    +124

    1. 1
    2. 2
    quicksort [] = []
    quicksort (h:t) = (quicksort(filter (=h) t))

    quicksort на хаскель. лаба. масло. 2014

    kegdan, 16 Августа 2014

    Комментарии (39)
  4. Куча / Говнокод #16549

    +128

    1. 1
    2. 2
    isParallel :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> Bool
    isParallel x1 y1 x2 y2 x3 y3 x4 y4 = if (((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)) == 0) then True else False

    лаба по хаски
    параллельны ли 2 прямые?

    kegdan, 16 Августа 2014

    Комментарии (143)
  5. C# / Говнокод #16482

    +139

    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
    Есть односвязный список. Каждый элемент списка содержит указатель на следующий элемент (next). 
    Нам известен указатель на первый элемент списка (root). Необходимо без использования каких-либо 
    дополнительных структур данных и без изменения структуры элементов списка определить зациклен ли данный список.
    
    Ответ
    
    public static boolean isCycleList(Item root){ 
            Item first = root;     
            while(first.getNext() != null){ 
                Item subFirst = root; 
                do { 
                    if (subFirst == first.getNext()) 
                        return true; 
                    subFirst = subFirst.getNext(); 
                } 
                while (subFirst != first.getNext());         
                first = first.getNext(); 
            } 
            return false; 
        }

    kegdan, 05 Августа 2014

    Комментарии (20)
  6. Haskell / Говнокод #16405

    −79

    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
    map_of_enemy :: [[Int]] -> [[Int]]
    map_of_enemy [] = []
    map_of_enemy list = (iniciar (0) (0) (list))
    
    iniciar :: Int -> Int -> [[Int]] -> [[Int]]
    iniciar a b list = if(a == (length list)-1) then [rango a 0 list]
                   else [rango a 0 list]++[(iniciar (a+1) 0 list)]
    
    rango :: Int -> Int -> [[Int]] -> [Int]
    rango a b list = if (b==(length list)-1 && (((list!!a!!0)==(list!!b!!0)) &&     ((list!!a!!1)==(list!!b!!1)) && ((list!!a!!2)==(list!!b!!2))))
                 then [0]
                 else if (b==(length list)-1 && (((list!!a!!0)/=(list!!b!!0)) || ((list!!a!!1)/=(list!!b!!1)) || ((list!!a!!2)/=(list!!b!!2))))
                 then (rango2 a (list!!b) list)
                 else if (((list!!a!!0)==(list!!b!!0)) && ((list!!a!!1)==(list!!b!!1)) && ((list!!a!!2)==(list!!b!!2)))
                 then [0]++(rango a (b+1) list)
                 else (rango2 a (list!!b) list)++(rango a (b+1) list)
    
    rango2 :: Int -> [Int] -> [[Int]] -> [Int]
    rango2 a b list = if ((verif [(list!!a!!0)+(list!!a!!2),(list!!a!!1)+(list!!a!!2)] [(list!!a!!0)-(list!!a!!2),(list!!a!!1)-(list!!a!!2)] (b))) then [1]
                  else [0]
    
    verif a b c = if (((c!!0) < (a!!0)) && ((c!!0) > (b!!0)) && ((c!!1) < (a!!1)) && ((c!!1) > (b!!1))) then True
              else if (((c!!0) < (a!!0)) && ((c!!0) == (b!!0)) && ((c!!1) < (a!!1)) && ((c!!1) == (b!!1))) then True
              else if (((c!!0) == (a!!0)) && ((c!!0) > (b!!0)) && ((c!!1) == (a!!1)) && ((c!!1) > (b!!1))) then True
              else False

    Haskell
    OMG mode on

    kegdan, 22 Июля 2014

    Комментарии (17)
  7. Куча / Говнокод #16305

    +138

    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
    Викиучебник по хаскелю такой викиучебник
    
    Задание - написать frequency — функция, возвращающая список пар (символ, частота). Каждая пара определяет атом из заданного списка и частоту его вхождения в этот список.
    
    Решение 
    
    frequency :: [a] -> [(a : Integer)]
    frequency l = f [] l
    
    f :: [a] -> [a] -> [(a : Integer)]
    f l []    = l
    f l (h:t) = f (corrector h l) t
    
    corrector :: a -> [a] -> [(a : Integer)]
    corrector a []      = [(a : 1)]
    corrector a (a:n):t = (a : (n + 1)) : t
    corrector a h:t     = h : (corrector a t)
    
    Логика-то верна, но код тупо не скомпилится. И как тут быть нубцу? 
    
    
    
    Задание - Описать следующие классы типов. При необходимости воспользоваться механизмом наследования классов.
    Show — класс, объекты экземпляров которого могут быть выведены на экран.
    
    Думаю что-то мегасложное, сделать самому руками show
    
    Решение 
     
    class Show a where
      show :: a -> String
    
    /-*)

    Викиучебник по хаскелю такой викиучебник

    kegdan, 11 Июля 2014

    Комментарии (143)
  8. C# / Говнокод #16247

    +143

    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
    using System;
    using System.Text;
    public class Test
    {
    	public static void Main()
    	{
    		object obj = "Suck my balls";
    		string str1 = "Suck my balls";
    		string str2 = new StringBuilder().Append("Suck my ").Append("balls").ToString();
    		Console.WriteLine(obj==str1);//True
    		Console.WriteLine(str2==str1);//True
    		Console.WriteLine(obj==str2);//False
    	}
    }

    Нетранзитивный дотнет или головоломка на ночь

    kegdan, 27 Июня 2014

    Комментарии (13)
  9. Куча / Говнокод #14547

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    Переустановил я, значит, Шиндоус 7 (лицуха), ставлю VS 2012
    
    Все встало без проблем, предупреждений и криков о помощи.
    
    При запуске ВНЕЗАПНО всплыло окошко
    
    "Внимание! Данная программа имеет известные проблемы совместимости с данной версией Windows"
    
    Visual Studio  2012 несовместим с семеркой? Ну охуеть теперь.

    kegdan, 12 Февраля 2014

    Комментарии (68)
  10. C# / Говнокод #14447

    +123

    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
    private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !(Char.IsControl(e.KeyChar)))
                {
                    if (!((e.KeyChar.ToString() == ",") && (textBox1.Text.IndexOf(",") == -1)))
                        e.Handled = true;
                }
    
            }
    
            private void textBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                if (!Char.IsDigit(e.KeyChar) && !(Char.IsControl(e.KeyChar)))
                {
                    if (!((e.KeyChar.ToString() == ",") && (textBox2.Text.IndexOf(",") == -1)))
                        e.Handled = true;
                }
            }

    Увидел у соседа по комнате книжку на полке '"C# в задачах и примерах"

    открываю, а там это

    первая надпись в книге - Процесс создания программы состоит из 2 шагов - создание формы и создания функций обработки.

    ООАиП, иди ты нахуй!

    kegdan, 30 Января 2014

    Комментарии (10)
  11. Pascal / Говнокод #14394

    +141

    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
    //у стены - нахождение клеток "у стены"
    procedure useny(var vsten:bulArr);
    var i,i2:integer;
      function sh(x,y,n:integer):boolean; // n-номер сдвига n=[2..5]
      begin
      if vsten[x+sdx[n],y+sdy[n]] then sh:=true
                                  else
        if sten[x+sdx[n],y+sdy[n]] then sh:=false
                                   else
          if sten[i2+sdx[n-1],i+sdy[n-1]]or sten[i2+sdx[n+1],i+sdy[n+1]]
            then sh:=sh(x+sdx[n],y+sdy[n],n)
            else sh:=false;
      if result then vsten[x,y]:=true;
      end;
    begin
      for i:=0 to ny do
        for i2:=0 to nx do
          if not(sten[i2,i]) then
            if (sten[i2+1,i] or sten[i2-1,i])and(sten[i2,i+1] or sten[i2,i-1]) then
              begin
              vsten[i2,i]:=true;
              sh(i2,i,2);sh(i2,i,3);sh(i2,i,4);sh(i2,i,5);
              end;
    end;

    Попытка написать решатель Сокобана (Какая-то неведомая функция)

    Примечания или то, что я узнал у владельца
    1 useny - судя по всему УСтЕНЫ
    2 vsten - массив клеток Возле СТЕН
    3 sten - сами стены
    4 sh - скорее всего Шаг, но автор не уверен.
    5 sdx и sdy - СДвиг по Х и СДвиг по Y

    kegdan, 22 Января 2014

    Комментарии (2)