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

    Всего: 168

  2. bash / Говнокод #10467

    −110

    1. 1
    sed -e 's/""/"/g;s/^"//g;s/"$//g;s/";/;/g;s/;"/;/g'

    Для любителей регулярок. Убирает экранирование строк в CSV.

    bormand, 30 Мая 2012

    Комментарии (9)
  3. Perl / Говнокод #10374

    −122

    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
    #!/usr/bin/perl
    use strict;
    
    # немного настроек
    my $url = "http://govnokod.ru/comments";
    my $min_delay = 2*60;
    my $max_delay = 30*60;
    my $delay_slowdown = 2;
    
    # получение идентификатора последнего коммента
    sub get_last_comment_info {
        print STDERR "Checking for the new comments...\n";
        my @content = `curl "$url" 2>/dev/null`;
        my $s = join(' ', @content);
        if ($s =~ /<a href=".*?\/(\d+)#comment(\d+)"/) {
            print STDERR "Last comment id was $2 in the thread $1\n";
            return ("thread" => $1, "comment" => $2);
        }
        print "Can't get new comments\n";
        return ();
    }
    
    # отправка сообщения
    sub notify {
        my ($id) = @_;
        print STDERR "Sending notify about $id\n";
        `notify-send "Кто-то наложил в $id"`;
    }
    
    my $last_id = undef;
    my $delay = $min_delay;
    while (1) {
        # смотрим есть ли новый коммент
        if (my %r = get_last_comment_info()) {
            if (defined($last_id) && $r{"comment"} > $last_id) {
                $delay = $min_delay;
                notify($r{"thread"});
            }
            $last_id = $r{"comment"};
        }
        # спим
        print STDERR "Sleeping for $delay seconds...\n";
        sleep($delay);
        # пересчитываем задержку
        $delay = $delay * $delay_slowdown;
        $delay = $max_delay if ($delay > $max_delay);
    }

    Говноскрипт для мониторинга сточных вод.

    bormand, 27 Мая 2012

    Комментарии (43)
  4. C++ / Говнокод #10306

    −17

    1. 1
    if(0){}else for (... тут всякий код...) и тут всякий код

    Из реализации foreach в Qt. Не ГК. Кто первый скажет почему не ГК получит пирожок с полочки.

    bormand, 17 Мая 2012

    Комментарии (21)
  5. Haskell / Говнокод #10205

    −84

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    data (,) a b = (,) a b
        deriving Generic
    data (,,) a b c = (,,) a b c
        deriving Generic
    data (,,,) a b c d = (,,,) a b c d
        deriving Generic
    .......
    data (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
     = (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) a b c d e f g h i j k l m n o p q r s t u v w x y z a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ a__ b__ c__ d__ e__ f__ g__ h__ i__ j__
        -- deriving Generic
    {- Manuel says: Including one more declaration gives a segmentation fault.

    Вот такая вот реализация туплов:
    http://www.haskell.org/ghc/docs/7.4.1/html/libraries/ghc-prim-0.2.0.0/src/GHC-Tuple.html

    bormand, 05 Мая 2012

    Комментарии (22)
  6. C++ / Говнокод #10120

    +25

    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
    /*
        Шаг по оси, представляет собой число из следующего ряда:
        ... 0.02 0.05 0.1 0.2 0.5 1 2 5 ...
        next и prev позволяют перемещаться в обе стороны по ряду
        после создания хранится число 1
    */
    class Step
    {
    public:
        Step()
        {
            scale = 1; pr = 1; type=0;
        }
        void next()
        {
            // шаг вперед
            type++;
            if (type==1)
                scale = pr * 2;
            else if (type==2)
                scale = pr * 5;
            else
            {
                type = 0;
                pr *= 10;
                scale = pr;
            }
        }
        void prev()
        {
            // шаг назад
            type--;
            if (type==0)
                scale = pr;
            else if (type==1)
                scale = pr*2;
            else
            {
                type = 2;
                pr /= 10;
                scale = pr*5;
            }
        }
        operator float()
        {
            return scale;
        }
    protected:
        float scale;    // текущее значение
        float pr;       // недомноженое значение 1 10 100 ...
        int type;       // 0 - x1 1 - x2 2 - x5
    };

    http://govnokod.ru/10117 напомнил о том, как я когда-то рисовал график, и для меток на осях потребовались те же самые красивые значения [... 0.1 0.2 0.5 1 2 5 ...]

    bormand, 30 Апреля 2012

    Комментарии (20)
  7. Си / Говнокод #10058

    +138

    1. 1
    memset(cb->chars, cb->width * cb->height, ' ');

    Мой однострочный эпик фейл.

    bormand, 27 Апреля 2012

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

    +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
    import Text.Parsec
    import Control.Monad
    
    romanToArabic :: String -> Either ParseError Integer
    romanToArabic = parse (genParser (Nothing : Nothing : map Just romans)) "" where
    
        romans = [('M', 1000), ('D', 500), ('C', 100),
                  ('L', 50), ('X', 10), ('V', 5), ('I', 1)]
    
        genParser [_] = eof >> return 0
        genParser (ten : five : one : rest) = state1 where
    
            state1 = choice [on one state2, on five state3, next]
            state2 = choice [on (sub2 five one) next, on (sub2 ten one) next,
                             on one state5, next]
            state3 = choice [on one state4, next]
            state4 = choice [on one state5, next]
            state5 = choice [on one next, next]
            next = genParser (one : rest)
    
            on Nothing _ = fail ""
            on (Just (ch, val)) nextNode = char ch >> nextNode >>= return . (+val)
    
            sub2 = liftM2 $ \(ch1, val1) (ch2, val2) -> (ch1, val1-2*val2)

    Кучка в ответ на http://govnokod.ru/9995#comment136058

    > с другой стороны раз хаскель, то хотелось бы, например:
    > *Main> romanToArabic "LC"
    > Left (line 1, column 2):
    > unexpected 'C'
    > expecting "X", "IX", "IV", "V", "I" or end of input

    bormand, 25 Апреля 2012

    Комментарии (19)
  9. Pascal / Говнокод #10011

    +129

    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
    function assemble(var w:word;s:string):boolean;
    .....
     else if length(cmd)=3 then
      begin
       {ТРЕХБУКВЕННЫЕ КОМАНДЫ}
       case cmd[1] of
        'a':case cmd[2] of
             'c':if cmd[3]='i' then
                  begin
                   code:=$ce;
                   typ:=7;
                  end;
             'd':case cmd[3] of
                  'd':begin
                       code:=$80;
                       typ:=4;
                      end;
                  'c':begin
                       code:=$88;
                       typ:=4;
                      end;
                  'i':begin
                       code:=$c6;
                       typ:=7;
                      end;
                 end;
    ..... еще 500 подобных строк ....
    end;

    Прочитал http://govnokod.ru/10002 и вспомнил, как когда-то писал асм\дизасм\эмуль для 8080 на паскале.

    bormand, 22 Апреля 2012

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