Array to string voor game
Op deze mooie morgen zit ik met een klein probleem. Ik dacht dat het allemaal heel makkelijk zou zijn, maar blijkbaar niet.
Ik heb een array, deze array kan alle lengtes hebben. En bestaat uit :
Maar kan ook zijn :
Ik heb nu alle string mogelijkheden nodig die zon array kan produceren in alle volgordes : Bij de eerste array zou dat dus zijn :
x,y,z | x,z,y | y,x,z | y,z,x | z,x,y | z,y,x
Ik heb al aardig wat for loopje sgeprobeerd, maar krijg hem steeds net niet te pakken :(
Enige idee ? Thanks alvast
Gewijzigd op 01/01/1970 01:00:00 door Joep
WAAROM?
En als je het voor vergelijken wil doen, 1 keer opslaan, imploden zonder spatie en http://nl3.php.net/eregi gaan leren
Gewijzigd op 01/01/1970 01:00:00 door Jacco Engel
Het is voor een game voor kinderen, een rekengame.
Zij moeten eerst het aantal mogelijkheden raden (faculteit), dat is gelukkgi niet zo moeilijk te berekenen, daarna moeten ze alle mogelijkheden opschrijven.
Die check ik daarna dan tegen de oplossing van dit probleem ;)
okey ik geloof je , u lost me :P , (ondanks dat ik pro programmer ben (ik doe het voor mn werk , niet dat ik goed ben :P) ik heb niet zon verstand van wiskunde :)
Jacco schreef op 23.06.2009 10:24:
okey ik geloof je , u lost me :P , (ondanks dat ik pro programmer ben (ik doe het voor mn werk , niet dat ik goed ben :P) ik heb niet zon verstand van wiskunde :)
Jij zit zeker de hele dag alleen koffie te leuten en te forummen :p
Als jij vrolijk word van dat denken ;)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function faculteit($g) {
switch($g) {
case 1:
return 1;
case $g > 1:
return $g * faculteit($g-1);
default:
return false;
}
}
$aLetters = array('w', 'x', 'y', 'z');
$aSolutions = array();
$iSolutions = faculteit(count($aLetters));
while(count($aSolutions) != $iSolutions) {
shuffle($aLetters);
$sSolution = implode('', $aLetters);
if(!in_array($sSolution, $aSolutions)) {
$aSolutions[] = $sSolution;
}
}
sort($aSolutions);
echo '<pre>'.print_r($aSolutions, true).'</pre>';
?>
function faculteit($g) {
switch($g) {
case 1:
return 1;
case $g > 1:
return $g * faculteit($g-1);
default:
return false;
}
}
$aLetters = array('w', 'x', 'y', 'z');
$aSolutions = array();
$iSolutions = faculteit(count($aLetters));
while(count($aSolutions) != $iSolutions) {
shuffle($aLetters);
$sSolution = implode('', $aLetters);
if(!in_array($sSolution, $aSolutions)) {
$aSolutions[] = $sSolution;
}
}
sort($aSolutions);
echo '<pre>'.print_r($aSolutions, true).'</pre>';
?>
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Wat een uiterst simpele oplossing en EXACT wat ik nodig heb. Ik ga weer aa de koffie. Ontzettend bedankt Blanche. De kids zullen het heel erg waarderen!
Greetz Joep
ook overnagedacht wat er gebeurt als je bijvoorbeeld ipv 4 letters er 100 in propt?
Blanche schreef op 23.06.2009 10:36:
Een voorbeeldje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function faculteit($g) {
switch($g) {
case 1:
return 1;
case $g > 1:
return $g * faculteit($g-1);
default:
return false;
}
}
$aLetters = array('w', 'x', 'y', 'z');
$aSolutions = array();
$iSolutions = faculteit(count($aLetters));
while(count($aSolutions) != $iSolutions) {
shuffle($aLetters);
$sSolution = implode('', $aLetters);
if(!in_array($sSolution, $aSolutions)) {
$aSolutions[] = $sSolution;
}
}
sort($aSolutions);
echo '<pre>'.print_r($aSolutions, true).'</pre>';
?>
function faculteit($g) {
switch($g) {
case 1:
return 1;
case $g > 1:
return $g * faculteit($g-1);
default:
return false;
}
}
$aLetters = array('w', 'x', 'y', 'z');
$aSolutions = array();
$iSolutions = faculteit(count($aLetters));
while(count($aSolutions) != $iSolutions) {
shuffle($aLetters);
$sSolution = implode('', $aLetters);
if(!in_array($sSolution, $aSolutions)) {
$aSolutions[] = $sSolution;
}
}
sort($aSolutions);
echo '<pre>'.print_r($aSolutions, true).'</pre>';
?>
o.O
Deze werkt gewoon..
Het vullen van de array tot 20 values was idd een probleem voor mijn execution time of 30 seconds ;)
Joep schreef op 23.06.2009 10:20:
Gelukkig zijn de meeste functies al redelijk bekend bij me en het is helaas ook niet voor vergelijken.
Het is voor een game voor kinderen, een rekengame.
Zij moeten eerst het aantal mogelijkheden raden (faculteit), dat is gelukkgi niet zo moeilijk te berekenen, daarna moeten ze alle mogelijkheden opschrijven.
Die check ik daarna dan tegen de oplossing van dit probleem ;)
Het is voor een game voor kinderen, een rekengame.
Zij moeten eerst het aantal mogelijkheden raden (faculteit), dat is gelukkgi niet zo moeilijk te berekenen, daarna moeten ze alle mogelijkheden opschrijven.
Die check ik daarna dan tegen de oplossing van dit probleem ;)
@Dreampower -> Ja want kinderen gaan zulke grote aantallen gebruiken en dan alle mogelijkheden opschrijven :P
Gewijzigd op 01/01/1970 01:00:00 door Jacco Engel
Maar voor de sake of php experts, ben ik wel benieuwd geworden naar een suitable oplossing zonder mijn execution time te halen..
Ik drink er nog eentje op...
Jacco schreef op 23.06.2009 10:52:
o.O
o.O
Jacco het had mijn reactie kunne zijn ik zat ook zo :P!
Blanche wat voor koffie drink jij ?
Gewijzigd op 01/01/1970 01:00:00 door RvW Of toch niet
En nee, ik had dit scriptje niet op de plank liggen. Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...
Quote:
Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...
Voor sommige mensen wel :P
Jacco schreef op 23.06.2009 11:08:
Voor sommige mensen wel :P
Quote:
Maar dit scriptje is nu ook weer niet echt hogere wetenschap ofzo...
Voor sommige mensen wel :P
Bwah, dat valt toch mee? Het is gewoon faculteit, dat staat op wiki. Dus als je 5 dingen hebt, doe je gewoon 5*4*3*2*1. Heel simpel. Nu weet je op hoeveel verschillende manieren iets kan oordenen.
Ik vraag me alleen af of die while wel klopt, maar zal vast wel kloppen door die if (iig geen dubbele).
Dit is nog maar simpele statistiek :-).
Karl schreef op 23.06.2009 11:14:
Die klopt inderdaad. De while loopt net zolang door totdat het aantal oplossingen in de oplossingen array gelijk is aan het berekende aantal oplossingen. En er worden alleen oplossingen aan de array toegevoegd als ze er nog niet in zitten, dus enkel unieke oplossingen in de array :)Ik vraag me alleen af of die while wel klopt, maar zal vast wel kloppen door die if (iig geen dubbele).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
echo "Array combis<hr>";
$erin = array("a", "b", "c");
$eruit = array();
findCombis($erin, $eruit);
function findCombis($erin, &$eruit, $arrHave = array()) {
$newCombis = array();
foreach($erin as $index => $item) {
$startArr[] = $item;
$restant = $erin;
unset($restant[$index]);
if ( count($restant) == 1 ) {
// Einde bereikt
$nHave = $arrHave;
$nHave[] = $item;
$nHave[] = array_pop($restant);
$eruit[] = $nHave;
} else {
// Er zijn nog meer combi's
findCombis($restant, $eruit, array_merge($arrHave,$startArr));
$startArr = array();
}
}
}
echo "Result:<BR>";
echo "<PRE>".var_export($eruit,1)."</pRE>";
$erin = array("a", "b", "c");
$eruit = array();
findCombis($erin, $eruit);
function findCombis($erin, &$eruit, $arrHave = array()) {
$newCombis = array();
foreach($erin as $index => $item) {
$startArr[] = $item;
$restant = $erin;
unset($restant[$index]);
if ( count($restant) == 1 ) {
// Einde bereikt
$nHave = $arrHave;
$nHave[] = $item;
$nHave[] = array_pop($restant);
$eruit[] = $nHave;
} else {
// Er zijn nog meer combi's
findCombis($restant, $eruit, array_merge($arrHave,$startArr));
$startArr = array();
}
}
}
echo "Result:<BR>";
echo "<PRE>".var_export($eruit,1)."</pRE>";
Alleen ben k niet z'n fan van recursieve functies in PHP, maar alsnog is het heel netjes gedaan.
Overigens krijg je al snel dit soort foutmeldingen door PHP met recursieve functies:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes)
Deze error onstaat al na deze array:
array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')