Numeri casuali e Java. Ci divertiamo?

LEGANERD 044666

Ci sono alcuni argomenti che è indispensabile conoscere, come ad esempio i fondamenti della programmazione, o alcuni concetti di matematica, magari sotto forma di equazioni, ma a volte non è chiaro se sia indispensabile, utile o produttivo (in senso ampio, ovvero capace di portare frutti) conoscere per davvero un argomento, averne sentito parlare, o semplicemente fare sì con la testa al momento giusto /…/
non è detto che l’utilità pratica debba necessariamente saltar fuori in una situazione reale.

Aprire una discussione sull’impossibilità attuale di generale ‘true’ numeri casuali con un calcolatore elettronico computer è l’ultimo dei miei interessi. Per esempio adoro pescare…

Tutti sappiamo, epperché c’è l’hanno detto, che non è possibile.
Si sa che riproducendo le stesse condizioni anche i codici piu fichi danno gli stessi risultati ecc ecc…

Sappiamo anche di tecniche ‘arduer’ piu sofisticate, ovviamente…

Ok! Ottimo. E infatti non è di questo che voglio scrivere.

Oggi pomeriggio ho letto un breve articolo sui feed di programmazione.it dove si riprendeva una segnalazione di javacodegeeks.com del 27 ottobre (in fondo trovate le fonti belle e linkate ;) ) che mi ha regalato un bel sorriso per buoni 5 minuti (…e fatto perdere in cazzate il resto della giornata).

Davide Panceri, l’autore, introduce il discorso spiegando brevemente quanto sia inutile suffermarsi sull’utilità di certi aspetti della programmazione (perdonerete il gioco di parole…).

In alcuni casi …basta che ci si diverta! (semi cit.)

E infatti io oggi pome me la sono ‘tajata ‘bbastanza’ (per dirla come dalle mie parti) perché la cosa carina del codice java che vedete in testa è che la funzione random nei due casi restituisce risultati che non si direbbero affatto casuali. Provare per credere.

Fatto? Serve una pausa? Respirate lentamente. :)

Visto che vi pesa il culo di aprire eclipse Come avrete sicuramente appena provato, la prima funzione si ‘limita’ a restituire 10 volte il numero uno, ma ancora a mio avviso piu rilevante, la seconda stampa in sequenza le dieci cifre comprese tra 0 e 9!!

(wow! Orgasmo per il nerd!)

Dunque, parafrasando Orwell…

Tutti i casuali sono uguali, ma alcuni sono più uguali degli altri.

Io, come il gentil Panceri, mi sono subito chiesto:

«No, aspè! Ma quella genera 10 volte un numero casuale, e noi li leggiamo nella totalità. Non è uno solo…possibile??»

«Ma come diavolo si arriva a trovare sequenze numeriche come questa?»

«È una botta di culo?» … «..no, aspé! DUE botte di culo??»

E ancora:

«ma quindi…LOL, ci saranno anche altre sequenze che mi tireranno fuori il numero di cellulare, il codice fiscale*, il numero di Belen!!»

In effetti quelli sempre numeri casuali sono.
È tipico dell’ “inesperto” pensare al caso come a qualche cosa di “strano”…forse addirittura sinonimo di improbabile.

Ma fa parte del caso anche l’ordine, la sequenza ordinata. (mi viene in mente fibbonacci o altre robe di distribuzione probabilistica che dovrei studiare in questo semestre…)

Quelle combinazioni generano quelle sequenze, è così. Punto.
Non ci sarebbe nulla di strano. Non c’è nulla si strano.
Ma è divertente osservarle, e io continuo a sorridere come un idiota.

E quindi ecco, questo è tutto. Riflettete sul dio Caso e diffondete la parabola.

Proprio qui sula lega mi sembra di aver letto che, statisticamente, se si chiede di scegliere un numero “a caso” tra i primi dieci, l’uomo medio preferirà numeri primi, magari il sette o il tre. :) Sono i piu ‘strani’.

Allo stesso modo, se si pensa ad una sequenza di dieci numeri (sempre da zero a nove e senza ripetizioni, per semplicità) saranno favorite robacce del tipo 7 9 3 2 1 4 6 5 8 0 o magari 9 2 6 3 8 4 5 0 1 7.

Ma non è immediato pensare a 0 1 2 3 4 5 6 7 8 9 o simili. Statisticamente hanno tutte la stessa probabilità (9!, se la stanchezza non mi inganna) ma intuitivamente consideriamo tutte le sequenze “strane” in un unico macro gruppo, che tiene fuori solo le particolari 0 1 2 3 4 5 6 7 8 9 e 9 8 7 6 5 4 3 2 1, rendendo in pratica improbabili delle sequenze che avrebbero stessa dignita di altre solo considerate piu probabili perche non significative e quindi raggruppate. :D

Quando scrivo che mi sono divertito, vuol dire che mi sono divertito:

Infondo sotto le fonti trovate il link al download di una piccola applicazione java che ho scritto (provate a contare fino a diciotto ;) ) che praticamente mostra quanto detto sopra:

Mr. 441287210 che stampa tanti uno, Mr. 6732303926L che conta fino a nove.

Se vi va fatela girare, trovate anche un piccolo “quiz java” (al click della fonte).

È anche possibile ricavare pseudo-stringhe-casuali che ci ricordano i bei tempi di Kernighan e Ritchie.

Fonti:
Articolo programmazione.it
Articolo javacodegeeks.com

[more]

LEGANERD 044664

LEGANERD 044665

[/more]

-Dalla mia cartella pubblica di Dropbox, i link sono http://dl.dropbox.com/u/19878628
http://dl.dropbox.com/u/19878628/ThatsRandom.app.zip per l’applicazione osx
http://dl.dropbox.com/u/19878628/RandomGen.jar per il jar
http://dl.dropbox.com/u/19878628/RandomGen.zip per il progetto

Dopo lo slash aggiungete il nome di quello che volete scaricare. ;)

P.S.
Mi sta venendo la “bazza” di creare un semplice algoritmo in grado di scoprire quali sequenze generano numeri “particolari” (il numero di Belen, appunto)… Nulla di trascendentale, pensandoci è piuttosto banale. Magari tra un po lo vedrete linkato sopra ;)

La storia dei linguaggi di programmazione in un infografica
La storia dei linguaggi di programmazione in un infografica
NASA ISS Longeron Challenge
NASA ISS Longeron Challenge
The "Java Life" rap, ora anche i nerd si danno al rap.
Kota Koti: il caso della living doll
A Nitrome way of life
Incauto random - InsaniTEE at Qwertee.com
Buoni consigli per i ca**o di appuntamenti.