Змея / Говнокод #24658 Ссылка на оригинал

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
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
stack = []

def stdout(x):
    if x == "puts":
        print(stack.pop())
    else:
        raise Exception("иди нахуй")

def stdin(x):
    global stack
    if x == "gets":
        stack.append(input())
    else:
        raise Exception("иди нахуй")

math = {
    "add": lambda: stack.append(float(stack.pop()) + float(stack.pop())),
    "sub": lambda: stack.append((-float(stack.pop())) + float(stack.pop())),
    "mul": lambda: stack.append(float(stack.pop()) * float(stack.pop())),
    "div": lambda: stack.append(1 / float(stack.pop()) * float(stack.pop())),
}

def stack_commands(x):
    global stack
    if x == "swap":
        stack[-1], stack[-2] = stack[-2:]
    elif x == "drop":
        stack.pop()
    elif x == "dup":
        stack.append(stack[-1])
    else:
        raise Exception("иди нахуй")

string = {
    "concat": lambda: stack.append(str(stack.pop()) + str(stack.pop()))
}

commands = {
    "comment": lambda x: x,
    "push": lambda x: stack.append(x),
    "stdout": stdout,
    "stdin": stdin,
    "math": lambda x: print(math[x]()),
    "stack": stack_commands,
    "string": lambda x: string[x]()
}

def do(x):
    if '@' not in x:
        raise Exception(x + " is not email.")
    a, b = x.split('@')
    b = b.split('.')[0]
    commands[b](a)

def eval(s):
    for i in s.lower().split():
        do(i)

eval("""
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d3a7bbbaa08cbaa08cb0bcbebeb6bda793b0bcbebeb6bda7fdababab">[email protected]</a>

<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="24525241404d50417b65645451574c0a414051">[email protected]</a> <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="85f5f0f1f6c5f6f1e1eaf0f1abe6fd">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0661637275467572626f6828697461">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e2949487868b9687bda0a29297918acc878697">[email protected]</a> <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9a9acadaa99aaadbdb6acadf7baa1">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a1c6c4d5d2e1d2d5c5c8cf8fc2cecc">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99f8fdfdd9f4f8edf1b7f7fced">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="af9defdfdadcc781cacbda">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e38e968fa38e82978bcd9b9a99">[email protected]</a>
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ddafb8aea8b1a982b4ae829dada8aeb5f3b8b9a8">[email protected]</a> <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="57343839343623172423253e393079393223">[email protected]</a> <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83f3f6f7f0c3f0f7e7ecf6f7ade0fb">[email protected]</a>
""")

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

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

    • <?php
      $stack = Array();
      
      function stdout($x) {
          global $stack;
          if ($x == "puts"):
              print(array_pop($stack));
          else:
              die("иди нахуй");
          endif;
      }
      
      function stdin($x) {
          global $stack;
          if ($x == "gets"):
              array_push($stack, fgets(STDIN));
          else:
              die("иди нахуй");
          endif;
      }
      
      $math = Array(
          "add" => function()use(&$stack){ array_push($stack, floatval(array_pop($stack)) + floatval(array_pop($stack))); },
          "sub" => function()use(&$stack){ array_push($stack, (-floatval(array_pop($stack))) + floatval(array_pop($stack))); },
          "mul" => function()use(&$stack){ array_push($stack, floatval(array_pop($stack)) * floatval(array_pop($stack))); },
          "div" => function()use(&$stack){ array_push($stack, 1 / floatval(array_pop($stack)) * floatval(array_pop($stack))); }
      );
      
      function stack_commands($x) {
          global $stack;
          if ($x == "swap"):
              $last = count($stack) - 1;
              list($stack[$last], $stack[$last-1]) = array_slice($stack, $last-1);
          elseif ($x == "drop"):
              array_pop($stack);
          elseif ($x == "dup"):
              array_push($stack, end($stack));
          else:
              die("иди нахуй");
          endif;
      }
      
      $string = Array(
          "concat" => function()use(&$stack){ array_push($stack, strval(array_pop($stack)) . strval(array_pop($stack))); }
      );
      
      $commands = Array(
          "comment" => function($x){ return $x; },
          "push" => function($x)use(&$stack){ array_push($stack, $x); },
          "stdout" => function($x){ stdout($x); },
          "stdin" => function($x){ stdin($x); },
          "math" => function($x)use($math){ print($math[$x]()); },
          "stack" => function($x){ stack_commands($x); },
          "string" => function($x)use($string){ $string[$x](); }
      );
      Ответить
    • Из хуз комментарий не подхватился. Попробуем ещё раз.

      <?php
      $stack = Array();
      
      function stdout($x) {
          global $stack;
          if ($x == "puts"):
              print(array_pop($stack));
          else:
              die("иди нахуй");
          endif;
      }
      
      function stdin($x) {
          global $stack;
          if ($x == "gets"):
              array_push($stack, fgets(STDIN));
          else:
              die("иди нахуй");
          endif;
      }
      
      $math = Array(
          "add" => function()use(&$stack){ array_push($stack, floatval(array_pop($stack)) + floatval(array_pop($stack))); },
          "sub" => function()use(&$stack){ array_push($stack, (-floatval(array_pop($stack))) + floatval(array_pop($stack))); },
          "mul" => function()use(&$stack){ array_push($stack, floatval(array_pop($stack)) * floatval(array_pop($stack))); },
          "div" => function()use(&$stack){ array_push($stack, 1 / floatval(array_pop($stack)) * floatval(array_pop($stack))); }
      );
      
      function stack_commands($x) {
          global $stack;
          if ($x == "swap"):
              $last = count($stack) - 1;
              list($stack[$last], $stack[$last-1]) = array_slice($stack, $last-1);
          elseif ($x == "drop"):
              array_pop($stack);
          elseif ($x == "dup"):
              array_push($stack, end($stack));
          else:
              die("иди нахуй");
          endif;
      }
      
      $string = Array(
          "concat" => function()use(&$stack){ array_push($stack, strval(array_pop($stack)) . strval(array_pop($stack))); }
      );
      
      $commands = Array(
          "comment" => function($x){ return $x; },
          "push" => function($x)use(&$stack){ array_push($stack, $x); },
          "stdout" => function($x){ stdout($x); },
          "stdin" => function($x){ stdin($x); },
          "math" => function($x)use($math){ print($math[$x]()); },
          "stack" => function($x){ stack_commands($x); },
          "string" => function($x)use($string){ $string[$x](); }
      );
      Ответить
      • function _do($x) {
            global $commands;
            if (strpos($x, '@') === false):
                die($x . " is not email.");
            endif;
            list($a, $b) = explode('@', $x);
            list($b,) = explode('.', $b);
            $commands[$b]($a);
        }
        
        function _eval($s) {
            foreach(preg_split('#[\s]+#', strtolower($s)) as $i):
                _do($i);
            endforeach;
        }
        
        _eval(<<<END
        this_is_comment@comment.xxx
        
        vvedite_A@push.edu puts@stdout.cx
        gets@stdin.org
        vvedite_B@push.edu puts@stdout.cx
        gets@stdin.com
        add@math.net
        2@push.edu
        mul@math.xyz
        result_is_@push.edu concat@string.net puts@stdout.cx
        END
        );


        P.S. Достали csrf verification error и SMTP Error: Could not connect to SMTP host.
        Ответить
        • Силою злых чар написанное здесь скрыто от глаз пользователей bormand@stock'а.
          Ответить
          • Защищённая программа. Мне нравится.
            Ответить
          • Надо вспомнить все языки программирования, в которых символ @ активно используется.
            Ответить
            • В TeX'е его можно использовать вместо любого служебного символа, переопределяя catcode, причём это можно делать на ходу.
              Ответить
            • Во многих ЯП перед @ должны стоять разделители, так что закосить под е-мейл не получится.
              Ответить
            • В Постскрипте слова нужно разделять пробелами:
              /@ { mul } def
              /i 7 def
              /j { =string cvs print } def
              6 i @ j


              Но можно использовать @ и даже точки внутри слова:
              /president@kremlin.ru { mul =string cvs print } def
              6 7 president@kremlin.ru

              Программа выведет в сосноль число 42.
              Ответить
            • J:
              NB. @ и @: спользуются для цепочек глаголов
              product =: */
              integers =: i.
              inc =: >:
              factorial =: product@:inc@integers

              Forth:
              ( @ – взять адрес из стека данных, извлечь значение из ячейки по этому адресу, но он выделен пробелами – облом )
              ( C@ – то же самое, но извлечь символ, после него всегда идёт пробел – облом )
              ( R@ – скопировать значение с вершины стека возвратов на стек данных, тот же самый облом )
              
              ( но зато в словах можно использовать любые символы! )
              : my@word  ." prints@this" CR ;

              TCL:
              # можно юзать @ в именах
              set my@var Hello!
              proc my@proc {} {
                  global my@var
                  puts ${my@var}
              }
              my@proc

              Спасибо, я кончел.

              ЗЫ. кто знает ObjectiveC? Там ведь он тоже ичпользуется.
              Ответить
              • Интересно, можно ли сделать так, чтобы код на tio.run содержал ссылку на самого себя?
                Ответить
          • > от глаз пользователей bormand@stock'а
            Да и хуй с ней 🙂 Лень костыль для расшифровки прикручивать.
            Ответить
          • Первую часть можно немножко подрезать, убрав упоминания переменной stack:
            <?php
            $stack = Array();
            
            function stack_push($x) {
                global $stack;
                array_push($stack, $x);
            }
            
            function stack_pop() {
                global $stack;
                return array_pop($stack);
            }
            
            function stdout($x) {
                if ($x == "puts"):
                    print(stack_pop());
                else:
                    die("иди нахуй");
                endif;
            }
            
            function stdin($x) {
                if ($x == "gets"):
                    stack_push(fgets(STDIN));
                else:
                    die("иди нахуй");
                endif;
            }
            
            $math = Array(
                "add" => function(){ stack_push(floatval(stack_pop()) + floatval(stack_pop())); },
                "sub" => function(){ stack_push((-floatval(stack_pop())) + floatval(stack_pop())); },
                "mul" => function(){ stack_push(floatval(stack_pop()) * floatval(stack_pop())); },
                "div" => function(){ stack_push(1 / floatval(stack_pop()) * floatval(stack_pop())); }
            );
            
            function stack_commands($x) {
                global $stack;
                if ($x == "swap"):
                    $last = count($stack) - 1;
                    list($stack[$last], $stack[$last-1]) = array_slice($stack, $last-1);
                elseif ($x == "drop"):
                    stack_pop();
                elseif ($x == "dup"):
                    stack_push(end($stack));
                else:
                    die("иди нахуй");
                endif;
            }
            
            $string = Array(
                "concat" => function(){ stack_push(strval(stack_pop()) . strval(stack_pop())); }
            );
            
            $commands = Array(
                "comment" => function($x){ return $x; },
                "push" => function($x){ stack_push($x); },
                "stdout" => function($x){ stdout($x); },
                "stdin" => function($x){ stdin($x); },
                "math" => function($x)use($math){ print($math[$x]()); },
                "stack" => function($x){ stack_commands($x); },
                "string" => function($x)use($string){ $string[$x](); }
            );
            Ответить
            • Ты лишил меня последней радости в жизни 🙁

              Кстати, недавно открывал сток, там были вместо [email protected] шестнацатеричные циферки. Выкрики гуеста смешно выглядели:
              f4684a925b!
              Ответить
        • > SMTP Error
          Блин, неужели в этом вашем "PHP" так сложно скинуть задачку по отправке письма какому-нибудь фоновому воркеру чтобы не делать это посреди запроса от юзера?
          Ответить
          • Я нечто подобное, но не связанное с отправкой электронного письма, решал так: выполнял через "file_get_contents" HTTP-запрос к другому скрипту в той же директории с определёнными POST-параметрами. В основном скрипте устанавливал тайм-аут запроса в одну секунду, в "фоновом" устанавливал лимит времени выполнения в минуту. Всё работает охуенно до сих пор. Поэтому я за "PHP".
            Ответить
          • Письма будут отправляться не риалтайм, это неприемлемо
            Ответить
            • Для риалтайма больше подойдут какие-нибудь push уведомления... А письма, имхо, лучше отправлять пореже, причём смёржив все накопившиеся комменты в одно письмо.
              Ответить
          • > так сложно скинуть задачку по отправке письма какому-нибудь фоновому воркеру

            Фоновый воркер может не завершиться за 30 секунд, значит, это невозможно.

            Согласно моей теории, PHP так популярен как раз потому, что прощает очень много ошибок и тупых решений, ведь всё начнётся с чистого листа на следующем запросе.

            Однако из-за этого похапешники не могут нормально шарить стейт и абьюзят пользовательские запросы для всякой херни вроде отправок емейлов, ведь так не нужно настраивать крон или настраивать очередь задач и поднимать отдельный процесс для обработки эвентов.
            Ответить
            • >>>"PHP <...> прощает очень много ошибок и тупых решений, ведь всё начнётся с чистого листа на следующем запросе"

              Лучше так, чем какая-то обоссанная "Java", созданная невесть, какими херами, будет мне указывать, как программировать и какого типа должна быть переменная.
              Ответить
              • В "Java" говно не в этом. Статическая типизация дисциплинирует. Говно в "Java" в том, что garbage collector может не прийти вовремя и вся память засрётся.
                Ответить
                  • Видимо он о том, что при продолжительной работе JVM жрёт всю память, которую ей разрешили сожрать, чтобы пореже гонять GC?
                    Ответить
                    • Так это же мега-фича!

                      Сначала собираем нужное, ложим в survior, а потом куча мусора чистится одним махом: простым изменением указателя. То ли дело кресты.
                      gc по young-geny на самом деле очень часто работает. Раз в 0.5 секунды, а то и чаще.
                      Ответить
                • >>>"Статическая типизация дисциплинирует"

                  Я сам себе не хозяин? Вообще, в любом язычке программирования типизация должна быть опциональной и назначаться где-то в начале кода программы.
                  Ответить

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

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

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


    8