[risolto] [PHP] Ripartizione casuale di un numero

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
IL BaK
Prode Principiante
Messaggi: 123
Iscrizione: lunedì 3 luglio 2006, 4:32
Sesso: Maschile
Località: Reggio Calabria
Contatti:

[risolto] [PHP] Ripartizione casuale di un numero

Messaggio da IL BaK »

Sto scrivendo uno script PHP che deve semplicemente ripartire un numero e penso di star complicando troppo le cose, chiedo a voi.

Avendo un numero iniziale lo si vorrebbe ripartire in dei numeri proporzionali. La divisione però deve essere casuale, ad esempio:
Numero iniziale 10
Lo possiamo ripartire in: 5, 3, 2 altrimenti in 8, 1, 1 o anche 4, 4, 2...
Ultima modifica di IL BaK il giovedì 18 giugno 2015, 14:05, modificato 1 volta in totale.
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: PHP - Ripartizione casuale di un numero

Messaggio da gila75 »

Ciao, io studio il C, quindi in php non saprei.
Ci saranno metodi più raffinati, ma per così poco (3 numeri per avere la somma di x), userei il brute force:
Pesca tre numeri nel range di 0-10, finchè la loro somma è uguale a 10.
Prima pesca: 5,5,2=12
rifaccio...ecc..
Tanto vedo che puoi avere numeri doppi per avere la somma, una complicazione in meno no?
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: PHP - Ripartizione casuale di un numero

Messaggio da SuperStep »

in realtà ci sarebbe anche un algoritmo gready.

Se io inizialmente pesco 6. Qualsiasi numero > 6 non mi fa ottenere 10. Quindi devo ricercare in quelli di (10 - 6) ovvero fra 1,2,3,4.

Estrai il primo numero randomico da 0 a MAX_INTERVAL (lo chiamiamo N0).
poi peschi un altro numero compreso fra 0 e (MAX_INTERVAL - N0). (lo chiamiamo N1).
poi peschi un altro numero compreso fra 0 e (MAX_INTERVAL - N1). (lo chiamiamo N2).

Così finchè il numero estratto non è 1.
[EDIT]
Così finchè il numero estratto non è 0.
[EDIT #2]
Così finchè Nn non è 0
Ultima modifica di SuperStep il lunedì 15 giugno 2015, 12:27, modificato 2 volte in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: PHP - Ripartizione casuale di un numero

Messaggio da M_A_W_ 1968 »

Questo thread contiene quasi esattamente quel che serve all'OP, con una completa soluzione in PHP. Si tratta banalmente di adattarla per selezionare una partizione pseudorandom, e anche in questo i riferimenti disseminati nel thread possono guidare rapidamente alla soluzione.
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: PHP - Ripartizione casuale di un numero

Messaggio da gila75 »

@M_A_W però io non credo che lui voglia tutte le possibilità, o almeno così non mi pare da come si è espresso.
Se è per tutti i casi, è un conto se per uno solo, chredo che il "costo" del brute force sia trascurabile, non credi?
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: PHP - Ripartizione casuale di un numero

Messaggio da M_A_W_ 1968 »

gila75 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4768917#p4768917][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:@M_A_W però io non credo che lui voglia tutte le possibilità, o almeno così non mi pare da come si è espresso.
Se è per tutti i casi, è un conto se per uno solo, chredo che il "costo" del brute force sia trascurabile, non credi?
L'OP ha bisogno di scegliere una partizione pseudocasuale di un numero intero positivo. Esistono algoritmi appositi, e c'è perfino una soluzione pressoché finita nel linguaggio richiesto. Il che è in definitiva un'ottima occasione per imparare qualcosa e pensare realmente da informatico, invece di limitarsi a risolvere alla bell'e meglio un problema contingente con una patacca ad hoc.
L'informatica applicativa, ma anche l'elettronica e molte altre discipline ingegneristiche affini, in fondo consistono proprio di questo: una sana dose di teoria e pacchi di best practices, soluzioni intelligenti che è sempre il caso di riciclare e riadattare, invece di reinventare la ruota ogni volta.
Poi ci sono i problemi davvero difficili, gli algoritmi più ostici, le strutture dati più complesse, l'ottimizzazione estrema, i sistemi altamente critici regolati da norme internazionali, i progetti di grande respiro, l'hardware custom... e lì ci vuole davvero l'esperto. Ma questa è un'altra storia.
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: PHP - Ripartizione casuale di un numero

Messaggio da gila75 »

Il che è in definitiva un'ottima occasione per imparare qualcosa e pensare realmente da informatico, invece di limitarsi a risolvere alla bell'e meglio un problema contingente con una patacca ad hoc.
Diretto come al solito :lol:
Avatar utente
IL BaK
Prode Principiante
Messaggi: 123
Iscrizione: lunedì 3 luglio 2006, 4:32
Sesso: Maschile
Località: Reggio Calabria
Contatti:

Re: [PHP] Ripartizione casuale di un numero

Messaggio da IL BaK »

RIngrazio tutti per gli interventi, preziosissimi e che mi hanno dato spunti di approfondimento (come nell'intervento di MAW, anche se penso che la possibilità di arrivare ad una soluzione in diversi modi non dia per scontanto che la tecnica sia meglio di una soluzione logica, ma è un'opinione personale e un altro discorso :) ).

Codice: Seleziona tutto

while ( ($a+$b+$c) < $totale ) {

    $add = rand(1, 3);

    switch ($add) {
        case 1:
            if ($a < $max ) { $a++; }
        break;

        case 2:
            if ($b < $max ) { $b++; }
        break;

        case 3:
            if ($c < $max ) { $c++; }
        break;
    }

}
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: dalca, nik1404, TommyB1992 e 6 ospiti