Ik zit al een tijdje mijn hoofd te breken, maar kom er maar niet uit.. dus ik hoop dat er hier iemand mij op de goede weg kan helpen! ;-)
Ik heb een variabele waarde, neem voor het voorbeeld even 50.
Nu wil ik berekenen hoe vaak hier de waarde 5, 2 en 1 in gaan. Waarbij ik overwegend 5 en 2 wil gebruiken, en sporadisch 1. Maar het moet wel volledig random zijn.
Ik moet dus een lijstje krijgen ala:
2 2 5 1 5 5 5 2 1 2 5 2 2 2 5 2 2
Dit maakt een totaal van 50, waarbij ik 6x 5, 9x 2 en 2x 1 heb gebruikt.
Hoe kun je nu met PHP een dergelijke 'som' compleet random laten uitvoeren, waarbij het getal 50 een variabele is, 1, 2 en 5 een vast gegeven en je 1 slechts heel sporadisch wil gebruiken?
- random waardes
-
10-04-2014, 19:22 #1
- Berichten
- 243
- Lid sinds
- 15 Jaar
random waardes
-
In de schijnwerper
Transparant je linkbuilding uitbesteden? Equote.nl helpt je verder!LinkpartnersVEILING: Telefoonnummeronline.nl met Adsense inkomstenWebsite te koopPopi.nl | Linkbuilding Platform| 5.000+ MogelijkhedenLinkpartnersErvaren SEO Linkbuilder voor €17,50/uur - Boost Uw Online Zichtbaarheid!Freelance / Werk -
10-04-2014, 20:36 #2Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: random waardes
Eigenlijk is dit pure wiskunde, maar wat je zoekt is recursie.
Maak een functie die, gegeven een getal, daar achtereenvolgens 1, 2 en 5 van aftrekt en roep jezelf op het resultaat aan. Hou bij hoe vaak je 1, 2 of 5 aftrekt en het resultaat is een set met alle permutaties a, b, c zodanig dat 1a + 2b +5c gelijk is aan je som.
-
11-04-2014, 18:34 #3
- Berichten
- 446
- Lid sinds
- 12 Jaar
Re: random waardes
Het is een leuke, zoiets moet 't worden :)
Code:// 2,5 vaker toevoegen voor meer randomness $input = array(1,2,5,2,5); for ($i = 50; $i >= 1; $i-=$last) { $rand_keys = array_rand($input, 2); echo $last = $input[$rand_keys[0]].'<br />'; // Checken of hij er niet overheen loopt if($i <= 4 && $last > 2) $last = 0; if($i <= 1 && $last > 1) $last = 0; }
-
11-04-2014, 20:25 #4Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: random waardes
Oke, ik had zin om een kwartiertje te puzzelen ;)
Code:<?php function pickOne($options) { $r = rand(0,array_sum($options)); $sum = 0; foreach ($options as $i => $j ) { $sum += $j; if ($r <= $sum) return $i; } } function _unsum($goal, $options, $counts) { $result = null; while ($result == null & count($options) > 0) { $option = pickOne($options); $newGoal = $goal - $option; $newCounts = $counts; $newCounts[$option]++; if ($newGoal > 0) { $result = _unsum($newGoal, $options, $newCounts); } elseif ($newGoal == 0) { $result = $newCounts; } else { return null; } } return $result; } function unsum($goal, $options) { foreach($options as $i => $j) $counts[$i] = 0; return _unsum($goal, $options, $counts); } $goal = 65; $options = array( /* getal -> verhouding, kies de getallen niet te klein, dan gaat de randomness er uit */ 1 => 1, 3 => 2, 5 => 10 ); $results = unsum($goal, $options); // Even mooi maken echo "$goal = "; $first = true; foreach($results as $option => $count) { if ($first) $first = false; else echo " + "; echo "$count * $option"; } echo "\n\n";
-
15-04-2014, 13:11 #5Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: random waardes
En? Kun je wat met de suggesties?
-
15-04-2014, 14:53 #6
- Berichten
- 243
- Lid sinds
- 15 Jaar
Re: random waardes
Henry,
Je bent een held! Hier kan ik zeker mee uit de voeten!! :)
Voor als er nog iemand anders gebruik van wil maken: Zodra de variabele $goal onder de 5 komt, kan hij in een fout springen. Even afvangen dus :)
-
15-04-2014, 16:34 #7Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: random waardes
Hi Robert,
Niet overdrijven, maar graag gedaan.
Overigens "return null;" moet inderdaad een "$result = null" zijn, dan moet hij goed verder zoeken.
Het is overigens een depth first aanpak die het first-satisfying result pakt, mocht je het een keer willen uitdiepen. ;)Laatst aangepast door Henry Been : 15-04-2014 om 16:40
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic