1. Си / Говнокод #23271

    +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
    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
    #include <stdio.h>
    main(t,_,a)
    char
    *
    a;
    {
     return!
    0<t?
    t<3?
    main(-79,-13,a+
    main(-87,1-_,
    main(-86, 0, a+1 )
    +a)):
    1,
    t<_?
    main(t+1, _, a )
    :3,
    main ( -94, -27+t, a )
    &&t == 2 ?_
    <13 ?
    main ( 2, _+1, "%s %d %d\n" )
    :9:16:
    t<0?
    t<-72?
    main( _, t,
    "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#;\
    #q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;\
    q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; \
    r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
    \
    n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;\
    {nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
    #'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
    :
    t<-50?
    _==*a ?
    putchar(31[a]):
    main(-65,_,a+1)
    :
    main((*a == '/') + t, _, a + 1 )
    :
    0<t?
    main ( 2, 2 , "%s")
    :*a=='/'||
    main(0,
    main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry")
    ,a+1);}

    виверни свой мозк, бро !

    Запостил: bahamot, 16 Августа 2017

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

    • > виверни свой мозк, бро !

      но не ради какого-то изврата.

      https://ideone.com/7PJ4OL

      да, могучий изврат. но все равно изврат.
      Ответить
    • https://github.com/omen23/obfuscated-c

      оригинальный (как всегда неработающий) линк: http://research.microsoft.com/en-us/um/people/tball/papers/XmasGift/

      "any program can be rewritten into a program consisting of a single recursive function containing only conditional statements"

      я думаю что это был пример для лисперов что они даже и на ц могут спокойно дальше тоже самое писать.
      Ответить
    • > виверни
      Виве́рнуть это примерно как раздраконить?
      Ответить
      • Виве́рнул первый слой: https://ideone.com/i2q5Bi
        Ответить
      • Немножко пересортируем: https://ideone.com/DSWg4B
        Ответить
      • В ветке t>=-72 && t < -50 видно рекурсивный поиск символа u в строке a. Затем выводится символ на 31 позицию правее. Назовём эту ветку print_decoded_char.

        Очевидно, что ветка t == 0 вызывает print_decoded_char для каждого символа строки a и останавливается на '/'. А s2 - таблица перекодировки. Назовём эту ветку print_decoded_string.

        Теперь заметим, что ветка t >= -50 && t < 0 крутится на одном t пока не найдёт '/', а затем вызывает себя с t = t + 1. Т.е. это вывод t'й строки в таблице (строки разделены '/') - print_decoded_string_by_index.

        https://ideone.com/GLqeBa
        Ответить
      • Все вызовы с t < -72 раскроются в print_decoded_string_by_index(-u, s1).

        Заметим, что оставшиеся рекурсивные вызовы не могут сделать t <= 0 (если в коде нет UB). Поэтому весь накопившийся мусор можно отбросить: https://ideone.com/jOIpeU
        Ответить
      • Ветка с t == 1 работает как точка входа, перезапуская main с t == 2 и u == 2. Вивернем оставшиеся ветки: https://ideone.com/4oDvS4
        Ответить
      • Вынесем рекурсию по u при t == 2, заодно отнимем лишнюю двойку от t и u: https://ideone.com/kVi5JZ
        Ответить
      • Осталось расшифровать строки: https://ideone.com/WTJBIL

        З.Ы. Я думал там что-то интересное, типа интерпретатора байткода. А оказалось всё так тупо :(
        Ответить
        • это ж олимпиады по говнокоду обфускации. Там комиссия пытается понять что выведет программа, написанная на чистом си и содержащая не более чем N символов
          Ответить
        • Деобфусцировал не полностью, в оригинале:
          # Ошибка выполнения #stdin #stdout 0s 9432KB
          У тебя:
          # Успешно #stdin #stdout 0s 9432KB

          Иди думай дальше
          Ответить
        • как я выше и цитировал, это просто чудак написал пример в тему "any program can be rewritten into a program consisting of a single recursive function containing only conditional statements".

          я лично остановился думать как только увидел рекурсию, и что первый аргумент и тело мэйна это просто извратный switch/case для конкретной "вложеной функции" мэйна. хотел раскрыть ?: операторы, но я как всегда плаваю в приоритетах, поэтому поленился.
          Ответить
      • Землю — крестьянам!
        Фабрики — рабочим!
        Мозг — виверне!
        Ответить
      • >>Виве́рнуть это примерно как раздраконить?
        Wyvern is a dragon-like creature
        Ответить
    • HACTEHbKA, ты ли это?
      Ответить
    • Хуй, перелогинься.
      Ответить

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