» »

Najbolj nepregledna koda v C-ju spet nagrajena

Najbolj nepregledna koda v C-ju spet nagrajena

Slo-Tech - Znani so rezultati letošnjega tekmovanja v prikriti in neprepoznavni (obfuscated) C-jevski kodi IOCCC, ko je potekalo že osemindvajsetič. Smoter tekmovanja je preprost, in sicer napisati čim bolj neprepoznavno kodo, ki pa je še vedno veljavna, se prevede in izvede ter stori nekaj nepričakovanega.

Kdor ima veliko potrpljenja ali močan interes, si lahko pogleda štiri ure in pol dolgo predstavitev dosežkov in podelitev nagrad. Vseh triindvajset nagrajencev in njihove kode so izpostavili tudi na spletni strani. Dosežki so res impresivni, saj segajo od emulatorja 32-bitnega OpenRISC do recepta za lososa. Koda je v vseh primerih silno zapletena in nepregledna, a nalogo opravi.



7 komentarjev

MrStein ::

Tu sem se naučil, da je to veljavna C koda:
1["]; 2=["];


(dejansko še bolj hecen, se zdaj ne spomnim točne vrstice)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

Predkambrij ::

A lahko razložiš?

error: expected identifier or '(' before numeric constant
1 | 1["]; 2=["];
| ^

socialec ::

¿ɐ 'ɐsɹɐɟ ʇoʞ ɐɾlʌɐuod ǝs ɐuᴉʌopoƃZ

MrStein ::

Hmm, to tudi ne dela?

1["]; 2=["]=1;

?

Možno da so moderni kompajlerji bolj izbirčni.
Nimam zdaj tule da bi probal.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

mallard ::

1["]; 2=["];

je isto kot
"]; 2=["[1];
// string literal je tipa char[n], dostopanje do elementov polja pa je v C-ju komutativno:
// a[n] je definirano kot *(a+n) kar je isto kot *(n+a), torej se lahko napiše kot n[a]

ZigaZiga ::

Nič ni bolj nepregledno od kode začetnikov >:D

Včasih gledam svojo kodo iz srednje šole in mi ni jasno, kaj naj bi delala. Pa so bile začetniške naloge. :))

Zgodovina sprememb…

Predkambrij ::

Hvala mallard.

Tole izpiše 59, kar je ascii od podpičja (2. element).

#include <stdio.h>

int main() {
    char a = 1["]; 2=["];
    char b = "]; 2=["[1];
    printf("a=%d b=%d\n",a,b);
}


ps, v prvo sem pozabil na main metodo ;((


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zastave pri navijanju v Sloveniji in v tujini

Oddelek: Problemi človeštva
171751 (1005) Miki N
»

Ima bolnišnica Izola problem z razumevanjem delovanja interneta? (strani: 1 2 )

Oddelek: Novice / Zasebnost
7229883 (22838) MMKK
»

Nadaljevanje učenja jave

Oddelek: Programiranje
161928 (1381) c00L3r
»

Yahoo ima novo šefinjo

Oddelek: Novice / Omrežja / internet
335502 (4242) Ziga Dolhar

Več podobnih tem