# Spezzone offuscato per divertirvi :)

**URL:** <https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058>\
**Category:** IT\
**Created:** [June 6, 2007, 12:22am UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058 "2007-06-06T00:22:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [June 6, 2007, 12:22am UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058/1 "2007-06-06T00:22:24Z")

</div>

questa è passata poco fa su #ruby-lang… i rubyisti  
esperti forse la smontano al volo, ma è comunque  
carina 🙂

cosa stampa

p ?%./(!!?_??&/?^+0.0:!!?().class  
?  
Su questa invece c’è un warning altrimenti era molto  
più bella 😃  
p ?%./!!?_??&/?^+0.0:!!?(+?).class

non provate direttamente in irb che è disonesto 😉

* * *

All New Yahoo! Mail – Tired of unwanted email come-ons? Let our  
SpamGuard protect you. [http://uk.docs.yahoo.com/nowyoucan.html](http://uk.docs.yahoo.com/nowyoucan.html)

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [June 6, 2007, 11:23am UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058/2 "2007-06-06T11:23:34Z")

</div>

gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> questa Ã¨ passata poco fa su #ruby-lang… i rubyisti  
> esperti forse la smontano al volo, ma Ã¨ comunque  
> carina 🙂
> 
> cosa stampa
> 
> p ?%./(!!?\*??&/?^+0.0:!!?().class

?c Ã© un carattere (numero intero)

! Ã¨ la negazione ed Ã© messo sempre doppio solo per far casino e  
!!numero == true

ruby supporta le espressioni condizionali C-like test ? true-val :  
false-val

l’espressione si semplifica con

(numero1 / ( true ? numero2/numero3 + 0.0 : true )).class

ovvero

(numero1 / (numero2/numero3 + 0.0)).class

il / di interi puo’ dare un intero o errore se il denominatore Ã© 0.

Se non da errore (numero3 != 0) allora Ã© un intero che + 0.0 fa un  
Float. intero diviso float fa Float sempre. Quindi stampa Float

> ?  
> Su questa invece c’Ã¨ un warning altrimenti era molto  
> piÃ¹ bella 😃  
> p ?%./!!?\*??&/?^+0.0:!!?(+?).class

qui la cosa diversa Ã© che mancano le parentesi quindi Ã©

numero1 / ( true ? numero2/numero3 + 0.0 : true.class)

ovvero

numero1 / (numero4.to\_f)

che da sempre un Float non capisco perchÃ© sia tanto diversa dalla  
prima.

> non provate direttamente in irb che Ã¨ disonesto 😉

Ora ho capito perchÃ© la seconda Ã© diversa 🙂

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [June 6, 2007, 1:45pm UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058/3 "2007-06-06T13:45:57Z")

</div>

— Luigi P. aka Matley [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> > questa è passata poco fa su #ruby-lang… i  
> > rubyisti  
> > esperti forse la smontano al volo, ma è comunque  
> > carina 🙂
> > 
> > cosa stampa
> > 
> > p ?%./(!!?\*??&/?^+0.0:!!?().class

(alessandro & luigi)++ bravi 🙂

la seconda è più interessante non solo per il  
risultato che è abbastanza inatteso… ma anche per la  
porcata perlish che non si nota 🙂

```
  ___________________________________________________________

```

Yahoo! Mail is the world’s favourite email. Don’t settle for less, sign  
up for  
your free account today  
[http://uk.rd.yahoo.com/evt=44106/\*http://uk.docs.yahoo.com/mail/winter07.html](http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.html)

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [June 6, 2007, 9:33am UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058/4 "2007-06-06T09:33:18Z")

</div>

On 6/5/07, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> cosa stampa  
> p ?%./(!!?\*??&/?^+0.0:!!?().class  
> ?

Oddio, svegliarsi alla mattina e trovarsi in mail certe cose Ã¨ un po’  
traumatico. Io direi Float, ora perÃ² provo a dargli una spiegazione  
che Ã¨ la cosa piÃ¹ complicata…

Questa accozzaglia di roba usa parecchio la notazione ?carattere per  
prelevare il valore ascii del carattere che segue il punto di domanda,  
per cui ?%, ?_, ?^ e ?( sono in realtÃ numeri e quindi ?%./( … )  
dovrebbe essere una banale divisione tipo numero./(numero), con  
l’operatore usato a mÃ² di metodo anzichÃ© nella sua forma tradizionale  
numero / numero. Dentro alla parentesi c’Ã¨ l’operatore ternario (expr  
? b : c) che genera la sua bella confusione e la condizione di expr Ã¨  
nella realtÃ il valore numerico ?_ con davanti !! che restituisce  
quindi TRUE (possiamo pensare a !numero come la forma compatta di  
!numero == TRUE # =\> FALSE, per cui il secondo ! nega il risultato  
trasformandolo in TRUE). Pertanto diventa:

TRUE ? ?\* / ?^ + 0.0 : !!?(

ovvero

TRUE ? numero / numero + 0.0 : !!numero

dal momento che TRUE Ã¨ TRUE e non si scappa, viene ritornata la prima  
condizione. A questo punto il tutto diventa:

numeroA / (numeroB / numeroC + 0.0)

Il risultato di numeroB / numeroC sommato a 0.0 restituisce un Float,  
per forza di cose, allora il risultato di numeroA / numeroFloat Ã¨  
comunque un Float.

Ma si sarÃ capito qualcosa?

> non provate direttamente in irb che Ã¨ disonesto 😉

Non ho provato proprio, non per niente non ho idea dei valori dei vari  
?%, ?\*, ?^ e ? 😃 Almeno Ã¨ giusto?

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [June 6, 2007, 4:12pm UTC](https://www.ruby-forum.com/t/spezzone-offuscato-per-divertirvi/106058/5 "2007-06-06T16:12:31Z")

</div>

On 6/6/07, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> (alessandro & luigi)++ bravi 🙂

‘alessandro’.replace(‘daniele’)

(giuro che non era per farlo notare, ma solo per sparare 'sta ca\*\*ata  
:D)

> la seconda Ã¨ piÃ¹ interessante non solo per il  
> risultato che Ã¨ abbastanza inatteso… ma anche per la  
> porcata perlish che non si nota 🙂

Fortunatamente mi sono fermato alla prima parte della risposta di  
Luigi, per cui sono ancora in tempo a giocarci (purtroppo questa  
mattina sentivo l’ufficio che chiamava in lontananza)…
