1. Куча / Говнокод #2181

    +124.3

    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
    [ $(echo $a|cut -c$((${#a}-1))-) = "gz" ] && echo "Hello, world!"
    
    [ $(echo $a|sed "s/.*\(..\)/\1/") = "gz" ] && echo "Hello, world!"
    echo $a|sed -e"s/.*gz$/Hello, world\!/" -et -eD
    
    expr $a : .*gz >/dev/null && echo "Hello, world!"
    [ $(expr $a : '.*\(..\)') = "gz" ] && echo "Hello, world!"
    
    echo "ifelse(substr($a,eval(len($a)-2)),gz,\`Hello, world! ')"|m4
    
    case $a in *gz) echo "Hello, world!";; esac
    
    echo $a|emacs -batch -eval '(defun f (arg) "M") (if (string= (substring arg -2) "gz") (princ "Hello, world!\n")) )' -f f

    2168-му посвящается...

    Задача: Если последние два символа переменной "gz", то вывести "Hello, world!".
    Решение проблемы от поклонников разных инструментов. awk, perl и всякие tcl не писал, поскольку там не будет говнокода.
    11 строка, то, как обычно пишу я. ИЧСХ, все примеры, кроме последнего, строго соответствуют POSIX.2:)

    Запостил: nil, 26 Ноября 2009

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

    • Чтоб вы понимали в говнокоде! Учитесь:
      echo -e '#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\nint main(){ char * end, * a; if (!(a = getenv("a"))) return 1; if ((end = a + strlen(a) - 2)<a) return 0; if (end[0] == '"'g'"' && end[1]=='"'z'"') puts("Hello, world!"); return 0;}'| gcc -x c -Wall -Wextra -O - -pedantic && ./a.out
      Ответить
      • Я думал об этом:)
        Но потом решил, что не надо, поскольку не совсем скриптовый код получается, а во-вторых, в стандарте прописано только наличие c99:)
        Но да, можно!!!
        Ответить
        • Ну, это правильный c99, я всегда по стандартами пишу.

          Вообще, я сейчас посмотрел - есть ещё куча противоестественных способов решить сабжевую задачу из консоли, включая php, js (в кде входит кривоватый интерпретатор) и другое всякое:
          kjs -e 'if (/\.gz/.exec("'$a'")) print ("Hello world!");'
          php -r 'if (preg_match("/\.gz/",$_ENV["a"])) echo "Hello world!\n";'
          # немного неёбнутых методов:
          [ "$(basename $a .gz)" != $a ] && echo 'Hello world!'
          echo $a | grep -q "gz$" && echo 'Hello, world!'

          А теперь самое мудаческое:
          echo -n ".gz" > pattern.txt
          patternlen=$(stat -c %s pattern.txt)
          echo -n "$a" > var.txt
          varlen=$(stat -c %s var.txt)
          newlen=$(echo "$varlen-$patternlen" | bc)
          dd if=var.txt of=var2.txt bs=1 count=$newlen 2> /dev/null
          dd if=pattern.txt of=var2.txt seek=$newlen bs=1 2> /dev/null
          cmp -s var.txt var2.txt && echo 'Hello world!'
          Ответить
          • А-а-а! Родственная душа!

            Да, про grep я забыл, хотя раньше именно так и использовал.
            basename — однозначно рулез, в копилку!
            Последнее вообще шикарно (stat — не стандарт), хотя если уж говнокодить и создавать файл, то можно как-то так (проверок на существование директорий, очистки и блабла не будет, потому что это говнокод:)):

            mkdir tmpdir; touch tmpdir/$a; ls tmpdir/*.gz 2>&- >&-|| echo "Hello, world!"

            А вообще да, манипулирование файлами открывает новую страницу в говнокодинге данного примера:)
            Ответить
        • А еще можно lex заюзать! Это будет вся мощь!
          Ответить

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