Newsgroup: it.comp.lang.c
Titolo: 20esima edizione del "Obfuscated C Code Contest"

 
La 20esima edizione del famoso "Obfuscated C Code Contest"
apre dal 12-Nov-2011 11:00 UTC al 12-Jan-2012 12:12 UTC.
 
Per maggiori informazioni: 
http://www.ioccc.org/
 
 
Buon divertimento ;)
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 


 
Sicuramente l'evento è principalmente ludico, ma potrebbe avere anche 
dei risvolti costruttivi?  Ha senso evidenziare un carattere sicuramente 
poco efficiente del C che è quello di poter scrivere dei programmi 
incredibilmente illeggibili?
 

 incredibilmente illeggibili?
 
Infatti non si tratta di un contest per tutti. Poche persone sono a
conoscenza di tante sottigliezze del linguaggio da potersi permettere
il divertimento nello scrivere un programma adatto a quel contest,
e altrettanto poche sono le persone in grado di capire quei programmi.
Essere in possesso di queste conoscenze non è cosa da poco. Si puo'
conoscere un linguaggio a vari livelli, il mio post è sicuramente
rivolto a chi puo' apprezzare le acrobazie semantiche e sintattiche
nella programmazione in C, fino ai limiti consentiti dal linguaggio.
Per questo tipo di programmatori ha perfettamente senso.
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 


 
Oh, grande! Quest'anno partecipo sicuro! ;-)

FtM ha scritto:

Eheh.. ma sai che nella biblioteca alle scuole superiori avevo letto
alcune parti di un libro molto particolare. Sono poi risalito al titolo
e autore, è "Obfuscated C and Other Misteries" di Don Libes. In pratica
fa un'analisi di alcuni programmi che hanno vinto quel contest e il
risultato è stato un libro molto originale, ma che spiega tante parti
piuttosto oscure del linguaggio. Naturalmente è un libro datato (pare
che ci fosse allegato anche un disco da 5.25") non ricordo neanche se
si riferisse al C89 o precedente, ma da quei listati "orribili"
praticamente uscivano delle tecniche molto interessanti. Magie del C ;)
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 


wrote:

Non lo conoscevo, vedrò di rimediarlo da qualche parte! :-)
A dire il vero nemmeno sapevo che continuassero a indire il contest! :-
O
Ho letto un po' le linee guida, e devo dire che mi sono fatto un po'
un'idea di cosa realizzare.. A livello di "trucchi" del linguaggio
penso non ci sia più molto da dire, se non piccole varianti a quello
che già è stato utilizzato spesso nei contest precedenti -
personalmente credo che cercherò di buttare giù qualcosa
sull'implementazione non convenzionale di un algoritmo comune (ho già
qualche idea che non anticipo) che paradossalmente rende le cose più
facili ;-) tutto condito alla solita maniera..
Ovviamente non m'aspetto di essere competitivo (specialmente per
assenza di tempo, anche se conto di sfruttare le vacanze natalizie) ma
in ogni caso un post relativo qui lo lascerò sicuramente ;)
Ciao!

 Buon divertimento ;)
 
Io ho avuto modo di leggere (non volutamente) il codice di uno dei 
vincitori: buzzard.2
 
http://www.formation.jussieu.fr/ars/2000-2001/C/cours/COMPLEMENTS/DOC/
 
www.ioccc.org/years.html
 
 
 
E' una implementazione di un simil Forth.
 
Ogni tanto rileggo il codice, cercando di capire cosa fa ;-).
 
 
Ciao

 in ogni caso un post relativo qui lo lascerò sicuramente ;)
 
Sarebbe interessante. Certo aspettati che altri abbiano avuto un po' piu
tempo per preparare qualche bel listato competitivo, aleggiava infatti
l'idea della 20esima edizione, ma non si era capito quando..
Certo anche avere un'idea anche per qualche riga di codice, sarebbe
interessante discuterla fra di noi qui su i.c.l.c.
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 

 Ogni tanto rileggo il codice, cercando di capire cosa fa ;-).
[...]
 
Eh si alcuni sono davvero dei rompicapo.. molti giocano sulla
compatibilità dei compilatori verso il vecchio C, il primo K&R per
intenderci. Infatti basta compilare con "-ansi -pedantic" per inter-
rompere la compilazione. Altri fanno molto uso del preprocessore e
delle varie "stranezze" del C, tipo i "trigraph", quelli che produr-
rebbero un output inaspettato anche dal semplice programma:
 
#include <stdio.h>
 
int main(void)
{
     printf("Di che colore e' il cavallo bianco"
            " di Napoleone???(domanda banale, "
            "non vi sembra???)\n");
     return 0;
}
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 


wrote:

A questo punto ve l'anticipo pure.. sto lavorando ad un algoritmo
super strippato di una rete neurale evolutiva a topologia variabile
(una specie di NEAT dei poveri). Il codice è molto carino anche perché
è una di quelle cose che sembra offuscata anche quando è scritta bene,
figuriamoci quando si eliminano controlli, funzioni o indirizzamenti
XD
Il mio problema principale adesso, prima di immergermi fulltime
nell'impresa, è riuscire a trovare un'applicazione semplice dove
l'algoritmo sia applicabile e dia dei risultati, cosa tutt'altro che
banale: come sappiamo bene tutti quanti questi algoritmi sono tanto
carini quanto completamente inutili! :-( Se avete idee sono tutto
orecchi!
Ciao!

 orecchi!
 
Vediamo allora se viene in mente qualche idea sempre discutendo del
linguaggio magari ne esce qualche discussione utile per tutti.
Le idee più prese in considerazione al contest sono comunque pressocchè
abbastanza semplici, non molto impegnative teoricamente. Ne riparliamo.
 
-- 
Vincenzo Mercuri | 
www.backbox.org
 


 
L'idea che mi sono fatto è che ci sono due vie possibili per essere
competitivi: il primo è un programma che fa praticamente niente ma che
riesce ad portare a termine il suo semplice compito sfruttando trucchi
del linguaggio o dello OS che sono più o meno sconosciuti e
cervellotici (offuscamento della procedura); il secondo è applicare
varie forzature del linguaggio per avere un programma decente/utile ma
assolutamente illeggibile (offuscamento del codice).
L'ottimo sarebbe ovviamente riuscire ad ottenere entrambi, solo che
comincio a pensare che di "trucchi" del linguaggio non ancora
sfruttati ce ne siano pochi: magari qualcuno nuovo sulle nuove
features del C99?
 
Ciao!

 features del C99?
 
Credo che le novità del C99 che più si prestano all'offuscamento del
codice siano: "designated initializers", "compound literals",
"variadic macros" e le "intermingled declarations" (la possibilità
di dichiarare variabili non per forza all'inizio di un 'blocco {}')
Di "trucchi" non saprei, anche se non mi dispiace sforzarmi
di capire codice ingarbugliato scrivo codice molto banale.
(Una volta ho sentito dire che per ottenere il massimo da un
programma bisogna essere "stupidi" come un computer) ;)
 
-- 
Vincenzo Mercuri | 
www.backbox.org