Newsgroup: it.comp.lang.c++
Titolo: cosa fa questo codice ?

 Mi e' capitato tra le mani questo pezzettino di codice che...sembra
"volutamente" criptico e scritto da un utente abbastanza smaliziato...
vorrei capire cosa fa o intenderebbe fare...
Ci ho pensato un po' su, ma non ne sono uscito...
Qualcuno ha voglia/tempo di aiutarmi?
Ciao
Menez
 
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Menez
č veramente criptico, io nemmeno lo vedo :-)
-- 
"Siamo una generazione di uomini cresciuti dalle donne, mi chiedo se 
un'altra donna č veramente la risposta che ci serve"

azzz....scusate....e' che ormai ho le traveggggggole :)
Ecco il codice (sempre criptico, ma non piu' INVISIBILE) :))))
char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;
main(){
 
	for(read(0,r,4000);c=*r;r++) {
		c-']'|| (d>1 || (r=*p?*s:(--s,r)), !d||d--
),c-'['||d++||(*++s=r),d||(*p+=c=='+',*p-=c=='-', p+=c=='>', p-=c=='<',
c-'.'||write(2,p,1),c-','||read(2,p,1));



Prima di tutto questo è un Gruppo che discute di C++ e quello non è un
programma in Standard C++. Secondo, stavo per cercare di capire che fa
quando ho letto "read(2,p,1)". Che fa? Legge dallo stderr? Non mi pare che
faccia niente di realizzabile e costruttivo.
Ma chi te lo fa fare a preoccuparti di queste cose?
fabiomdf


 }
Prova a riscriverlo: dovrebbe dovrebbe risultare qualcosa di simile al 
seguente (ho un po' di fretta, per cui potrei aver fatto errori).
char buffer1[4001],buffer2[6000],*ptrs[99];
main() {
	char depth=0,*p=buffer2,**s=ptrs;
	read(0,buffer1,4000);
	for (char*r=buffer1;;++r) {
		char&c=*r;
		if (!c) break;
		if (c!=']') {
			if (depth<=1)
				if (*p)
					r=*s;
				else
					--s;
			if (depth) --depth;
		}
		if (c!='[') {
			++depth;
			if (depth==1)
				{++s; *s=r;}
		}
		if (!depth) {
			switch (c) {
				case '+': ++*p; break;
				case '-': --*p; break;
				case '>': ++p; break;
				case '<': --p; break;
				case '.': write(2,p,1); break;
				case ',': read(2,p,1)); break;
			}
		}
	}
}
... continua tu! :)
Insomma dovrebbe essere un qualche tipo di parser che legge (da non so 
dove) una serie di comandi ([]+-<>.,) e dati e modifica di conseguenza 
un altro buffer, stampandone dei pezzi quando richiesto.
Direi che e' C e non C++ (per lo meno non standard) e mi fa un po' 
inorridire in quanto a sicurezza, gestione di errori/casi non previsti, 
ipotesi riguardo all'ambiente, ecc...
  bye
	av.

 ipotesi riguardo all'ambiente, ecc...
Concordo...
...in poche parole, e' quello che "tecnicamente" viene definito: "una 
*schifezza* di codice"! :-)
Dan


Che venga da un qualche occc?
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 *schifezza* di codice"! :-)
su questo non c'e' dubbio :)
Cmq e' stato trovato in una home di un utente da un amico/collega che
amministra una rete e su due piedi
ci siamo chiesti se non fosse un qualche tentativo di implementare qualcosa
di....diciamo "smaliziato", e che fosse "volutamente" illeggibile. Non ho
mai conosciuto qualcuno che potesse scrivere un codice del genere
continuando a capirci qualcosa, pertanto puzzava di anomalo... e pensare che
sia opera di un "niubbo" mi sembra improbabile...di solito i niubbi sono
prolissi, semmai. No?
Ciao
Menez


 prolissi, semmai. No?
Forse voleva partecipare all'International Obfuscated C Code Contest (IOCCC)
http://www.de.ioccc.org/main.html
Non mi sembra particolarmente bello, rispetto a quelli che trovi nel sito:
ce ne sono di veramente carini.
Ciao, Enrico