[risolto] [PHP] Ripartizione casuale di un numero
- 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
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...
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

- 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
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?
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?
- SuperStep
- 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
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
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)
- M_A_W_ 1968
- 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
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?"
"...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

- 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
@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?
Se è per tutti i casi, è un conto se per uno solo, chredo che il "costo" del brute force sia trascurabile, non credi?
- M_A_W_ 1968
- 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
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.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'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?"
"...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

- 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
Diretto come al solitoIl 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.
- 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
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;
}
}
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti