Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ferchundo9 en 20 Octubre 2017, 13:41 pm



Título: Salida extraña de un codigo extraño
Publicado por: ferchundo9 en 20 Octubre 2017, 13:41 pm
Alguien sabe como funciona esta locura, la salida es espectacular

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


Título: Re: Salida extraña de un codigo extraño
Publicado por: ivancea96 en 20 Octubre 2017, 16:57 pm
Probaste a indentar bien el código? Hecho eso, podrás inspeccionarlo sin mayor problema (pese a la complejidad que pueda tener por hacer tantas operaciones y etc)


Título: Re: Salida extraña de un codigo extraño
Publicado por: ferchundo9 en 20 Octubre 2017, 16:59 pm
Pero viste la salida, que es un villancico gigante


Título: Re: Salida extraña de un codigo extraño
Publicado por: engel lex en 20 Octubre 2017, 19:52 pm
basicamente es un montón de operaciones con punteros a char tal que genera eso

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

es un "truquito" matematico/algoritmico como cuando te dicen "agarra tu fecha de nacimiento, sima, resta, multiplica, y mira! los ultimos 2 numeros son tu edad"

fijate que se llama varias veces a main y una de ellas es esta cadena extraña, de allí está usando el putchar para darles salida...

fuera de eso, es bastante dificil de "desenredar" porque son varios operadores ternarios, llamadas recursivas y demás