Newsgroup: it.comp.lang.c
Titolo: Quesito...con la susi....

Qualcuno sa darmi la spiegazione di questo piccolo enigma?
#include <stdio.h>
void main()
{
printf(&(0["palmolive"]-2["shampo"]-12)["palmol%siva%c"],((0)["suona"]-(5)["ancora"])+"a
cappella "-0xC,(5-3)["man"]);
}
--
Posted from 
mta01-acc.tin.it
 [212.216.176.32]
via Mailgate.ORG Server - 
http://www.mailgate.org

}
Per esempio 0["palmolive"] equivale a "palmolive"[0], cioe' a 'p', il primo 
carattere della stringa "palmolive". Giocando un po' su questo fatto puoi 
"semplificare" la printf:
printf(&('p'-'a'-12)["palmol%siva%c"], ('s'-'a')+"a cappella "-0xC, 'n');
ora senza fare i conti, ma avendo visto l'output del programma, alla fine 
dovrebbe venire qualcosa del genere:
printf( "mol%siva%c", "ella ", 'n' );

cappella "-0xC,(5-3)["man"]);
I tre oggetti da analizzare sono :
    1.  &(0["palmolive"]-2["shampo"]-12)["palmol%siva%c"] 
    2.  ((0)["suona"]-(5)["ancora"])+"a cappella "-0xC,
    3.  (5-3)["man"]
1.
---------------------------------------------------
0["palmolive"] = "palmolive"[0] = 'p' 
2["shampoo"] = "shampoo"[2] = 'a'
quindi l'espressione si riduce a 
&('p'-'a'-12)["palmol%siva%c"]
la quale diventa 
&"palmol%siva%c"['p'-'a'-12]
dato che 'p' ha codice ASCII 112 e 'a' 97 si ha che
[112-97-12] = [3] e quindi 
&"palmol%siva%c"[3] = (char*)"mol%siva%c"
---------------------------------------------------
2.
---------------------------------------------------
(0)["suona"] = "suona"[0] = 's'
(5)["ancora"] = "ancora"[5] = 'a'
's'-'a' = 115 - 97 = 18
18 + "a cappella " - 0xC = "a cappella " + 6 = 
= (char*)"ella " 
---------------------------------------------------
3.
---------------------------------------------------
(5-3)["man"] = "man"[2] = 'n' 
---------------------------------------------------
Quindi il programma equivale a :
printf( "mol%siva%c", "ella ", 'n' ) ; 
e da' come output :
"molella ivan"
Attenzione, perche' non ho testato il programma, ma presumo che questo
sia il tuo nome proprio e quindi le cose dovrebbero stare cosi' ;)
--
Andrea Laforgia
andrea_...@bigfoot.com

 cappella "-0xC,(5-3)["man"]);
Pensavo che nel NG si trattassero cose serie.
Chi scrivesse del codice del genere meriterebbe di essere licenziato
all'istante.
Comunque i quesiti con la Susi sono solitamente banali per chi abbia fatto
un po' di matematica in più rispetto alle elementari.
Nel tuo caso, sarebbe bastato copiare in un file ".c" e vedere cosa
succedeva. Tu mica hai detto che non si può compilare, no?
--
Alessandro Monti

succedeva. Tu mica hai detto che non si può compilare, no?
Mamma mia, come siamo suscettibili ! ;)
Del resto, mi e' sembrata una buona occasione per spiegare che 
2["alessandro monti"] = "alessandro monti"[2]
o no ? 
--
Andrea Laforgia
andrea_...@bigfoot.com




 2["alessandro monti"] = "alessandro monti"[2]
Certo, ma non era stato detto anche poco tempo fa? Non mi ricordo l'autore
di quell'altra bravata, ma a questo punto si potrebbe creare un piccola FAQ,
indicando anche le note "curiose" del C.
--
Alessandro Monti

in questo caso l'output e' proprio  molella.
No, ti sbagli.
L'output del programma originale e' esatto.
La stringa non e' "acappella ", ma "a cappella".
--
Andrea Laforgia
andrea_...@bigfoot.com

 La stringa non e' "acappella ", ma "a cappella".
Ho sbagliato a copiare il programma
Zag


--
Posted from 
mta02-acc.tin.it
 [212.216.176.33]


 Dopo queste batoste mi ripongo nel letto a meditare.
Perň bisogna anche dire che una simile notazione, all'infuori
dell'obfuscated context, non ha alcuna ragione per essere utilizzata e
anzi a me sembra piů una (forse voluta per motivi di efficienza) carenza
nel controllo sintattico.
EMG

 dicendo ", tutto qui!
Nessuna offesa, non preoccuparti.
Personalmente mi diverto di piů con enigmi del tipo "dov'č l'errore?"
Sono casi reali, e si spera che l'autore abbia fatto di tutto per rendere il
codice comprensibile e corretto, rendendo la soluzione davvero interessante
ed utile.
Scrivere 0[array], invece, sebbene permesso, mi pare invece piů
un'indicazione di cattivo stile che una probabile fonte d'errore, o no?
Ciao
--
Alessandro Monti

Non e'  un po' complessa sintatticamente?
Sicuramente non e' facilmente interpretabile ma (forse) puo' risultare
utile.
--
Andrea Laforgia
andrea_...@bigfoot.com