Forum: Italian Ruby user group Spezzone offuscato per divertirvi :)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C01072ccffb1f2d23f8b5f686e5b106a?d=identicon&s=25 gabriele renzi (Guest)
on 2007-06-06 00:22
(Received via mailing list)
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 :D
 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
1c29f9b1bf5f1b88ed8b0c9a9be39788?d=identicon&s=25 Daniele Alessandri (Guest)
on 2007-06-06 09:33
(Received via mailing list)
On 6/5/07, gabriele renzi <surrender_it@yahoo.it> 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 ? :-D Almeno è giusto?
36f352bc8c234dbde21cb30e89767824?d=identicon&s=25 Luigi Panzeri aka Matley (Guest)
on 2007-06-06 11:23
(Received via mailing list)
gabriele renzi <surrender_it@yahoo.it> 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 :D
>  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 :-)
C01072ccffb1f2d23f8b5f686e5b106a?d=identicon&s=25 gabriele renzi (Guest)
on 2007-06-06 13:45
(Received via mailing list)
--- Luigi Panzeri aka Matley <matley@muppetslab.org>
wrote:

> gabriele renzi <surrender_it@yahoo.it> 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.y...
1c29f9b1bf5f1b88ed8b0c9a9be39788?d=identicon&s=25 Daniele Alessandri (Guest)
on 2007-06-06 16:12
(Received via mailing list)
On 6/6/07, gabriele renzi <surrender_it@yahoo.it> 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)...
This topic is locked and can not be replied to.