- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 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);}
Dummy00001 16.08.2017 13:20 # 0
но не ради какого-то изврата.
https://ideone.com/7PJ4OL
да, могучий изврат. но все равно изврат.
Dummy00001 16.08.2017 15:37 # +2
оригинальный (как всегда неработающий) линк: 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"
я думаю что это был пример для лисперов что они даже и на ц могут спокойно дальше тоже самое писать.
bormand 16.08.2017 20:02 # +2
Виве́рнуть это примерно как раздраконить?
bormand 16.08.2017 21:02 # +2
bormand 16.08.2017 21:18 # +2
bormand 16.08.2017 22:48 # +1
Очевидно, что ветка 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
bormand 16.08.2017 23:12 # 0
Заметим, что оставшиеся рекурсивные вызовы не могут сделать t <= 0 (если в коде нет UB). Поэтому весь накопившийся мусор можно отбросить: https://ideone.com/jOIpeU
bormand 16.08.2017 23:35 # 0
bormand 16.08.2017 23:52 # 0
bormand 17.08.2017 00:05 # 0
З.Ы. Я думал там что-то интересное, типа интерпретатора байткода. А оказалось всё так тупо :(
Antervis 17.08.2017 05:43 # 0
d_fomenok 17.08.2017 10:31 # 0
# Ошибка выполнения #stdin #stdout 0s 9432KB
У тебя:
# Успешно #stdin #stdout 0s 9432KB
Иди думай дальше
Dummy00001 17.08.2017 11:48 # 0
я лично остановился думать как только увидел рекурсию, и что первый аргумент и тело мэйна это просто извратный switch/case для конкретной "вложеной функции" мэйна. хотел раскрыть ?: операторы, но я как всегда плаваю в приоритетах, поэтому поленился.
inkanus-gray 19.08.2017 11:59 # +5
Фабрики — рабочим!
Мозг — виверне!
roskomgovno 03.08.2018 02:49 # 0
Wyvern is a dragon-like creature
d_fomenok 17.08.2017 10:21 # +2
HACTEHbKA 19.08.2017 21:58 # 0
gostinho 07.07.2020 23:07 # 0
gostinho 07.07.2020 23:06 # 0
TOPT 08.07.2020 02:07 # 0