Lastig probleempje
Hallo,
Ik heb een vierkant van 3 bij 3
Ik wil de getallen van 1 t/m 9 er invullen met een script. En dat hij dan alle mogelijke manieren laat zien. (9! manieren)
Hoe moet dat?
Ik heb een vierkant van 3 bij 3
Ik wil de getallen van 1 t/m 9 er invullen met een script. En dat hij dan alle mogelijke manieren laat zien. (9! manieren)
Hoe moet dat?
Gesponsorde koppelingen:
Kan je je vraag even wat duidelijker stelen. Is dat vierkant 3 bij 3 pixels is of hokjes?
En je topic titel is niet erg duidelijk!
Maar als je de hokjes bedoeld, dan kan je beter met divs gaan werken.
En je topic titel is niet erg duidelijk!
Maar als je de hokjes bedoeld, dan kan je beter met divs gaan werken.
Hij wil dus gewoon de getallen 1-9 in een hokje gooien, net zo lang tot alle weet ik hoeveel mogelijke combi's gemaakt zijn?
Nee
ik wil alle combinaties op het scherm hebben :)
ik wil alle combinaties op het scherm hebben :)
Weet je wel hoe fokking veel mogelijkheden dat dat zijn ? Tenzij je bedoelt dat de getallen wel in dezelfde volgorde staan maar telkens 1 opgeschoven worden.
Nee ik bedoel dat eerste :)
Maar hoe moet dat?
Maar hoe moet dat?
Dat zijn miljoene mogelijkheden, dat krijg je toch nooit op je scherm :P
Waarom zou je in vredesnaam een sudoku solver willen schrijven dan is alle lol er af :P
maakt niet uit :) ik hbe een loopje nodig die ze als het waren kan echo'ne
Daar maak ik dan wat in die dan weer filtert
Daar maak ik dan wat in die dan weer filtert
Wat ik al zij is divs. Of html tabelen, ff een voorbeeld:
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
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
<table width="132" border="0" cellpadding="2" cellspacing="2" bgcolor="#CCCCCC" class="text">
<!--DWLayoutTable-->
<tr>
<td width="43" height="45" valign="top"><div align="center">1</div></td>
<td width="40" valign="top"><div align="center">2</div></td>
<td width="41" valign="top"><div align="center">3</div></td>
<td width="1"></td>
</tr>
<tr>
<td height="45" valign="top"><div align="center">4</div></td>
<td valign="top"><div align="center">5</div></td>
<td valign="top"><div align="center">6</div></td>
<td></td>
</tr>
<tr>
<td height="49" valign="top"><div align="center">7</div></td>
<td valign="top"><div align="center">8</div></td>
<td valign="top"><div align="center">9</div></td>
<td></td>
</tr>
<tr>
<td height="4"></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<!--DWLayoutTable-->
<tr>
<td width="43" height="45" valign="top"><div align="center">1</div></td>
<td width="40" valign="top"><div align="center">2</div></td>
<td width="41" valign="top"><div align="center">3</div></td>
<td width="1"></td>
</tr>
<tr>
<td height="45" valign="top"><div align="center">4</div></td>
<td valign="top"><div align="center">5</div></td>
<td valign="top"><div align="center">6</div></td>
<td></td>
</tr>
<tr>
<td height="49" valign="top"><div align="center">7</div></td>
<td valign="top"><div align="center">8</div></td>
<td valign="top"><div align="center">9</div></td>
<td></td>
</tr>
<tr>
<td height="4"></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
Gewijzigd op 01/01/1970 01:00:00 door Alexander de Jong
Ja dit
Alleen dan 362880 keer en allemaal verschillende combinaties
Alleen dan 362880 keer en allemaal verschillende combinaties
De tabel zal zijn probleem niet zijn, hij wil gewoon weten hoe hij alle verschillende combinaties kan laten zien.
[amateurmode]
(geen 9 , maar ff 3 hokjes, leest wat eenvoudiger)
[amateurmode]
(geen 9 , maar ff 3 hokjes, leest wat eenvoudiger)
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Baarr
Bedankt voor je reactie,
Dit klopt alleen helaas niet
Elk getal mag maar 1 keer gebruikt worden
Dit klopt alleen helaas niet
Elk getal mag maar 1 keer gebruikt worden
Euh, tis al laat, maar goed, daar kun je dan nog wel een check voor inbouwen, je kunt het beter anders doen, maar ik kan mijn hoofd er op dit moment niet toe zetten ;-)
134.217.728 combinatie's
stel je begint met 1 dan is het volgende hokje 2 t/m 9 dat zijn acht combinaties. dus het is een macht van 8 en dat voor 9 vakjes is 8^9 en dat is dan ....
stel je begint met 1 dan is het volgende hokje 2 t/m 9 dat zijn acht combinaties. dus het is een macht van 8 en dat voor 9 vakjes is 8^9 en dat is dan ....
het is gewoon 9!
Voor het eerste vakje heb je keuze uit 9 getallen, dan 8 dan 7 dan 6 enzo
Voor het eerste vakje heb je keuze uit 9 getallen, dan 8 dan 7 dan 6 enzo
Nee bart, het zijn 9! (negen faculteit) combinaties. Dus in totaal 362.880 combinaties.
Maar goed, leuk probleempje. Dit scriptje hieronder levert je alle resultaten in een array aan:
ps. Deze combinaties zijn nu allemaal strings. Deze kun je zelf dus nog opknippen en je 3x3 velden gaan maken.
Maar goed, leuk probleempje. Dit scriptje hieronder levert je alle resultaten in een array aan:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Het creeren van een reeks van $aantal unieke getallen.
function maak($aantal)
{
$output = '';
for($p = 1; $p <= $aantal; $p++)
{
$getal = rand(1,$aantal);
if(strpos($output, (string) $getal) === false)
{
$output .= $getal;
}
else
{
$p--;
}
}
return $output;
}
// Het genereren van alle mogelijke combinaties.
function genereer($aantal)
{
$resultaat = array();
while(count($resultaat) < faculteit($aantal))
{
$waarde = maak($aantal);
if(!in_array($waarde, $resultaat))
{
array_push($resultaat, $waarde);
}
}
sort($resultaat);
return $resultaat;
}
// Een functie voor het berekenen van de faculteit.
function faculteit($getal)
{
$faculteit = 1;
for($n = $getal; $n >= 1; $n--)
{
$faculteit *= $n;
}
return $faculteit;
}
// En nu nog even uitvoeren.
$aantal = 3;
$resultaat = genereer($aantal);
echo '<pre>'.print_r($resultaat , true).'</pre>';
?>
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Het creeren van een reeks van $aantal unieke getallen.
function maak($aantal)
{
$output = '';
for($p = 1; $p <= $aantal; $p++)
{
$getal = rand(1,$aantal);
if(strpos($output, (string) $getal) === false)
{
$output .= $getal;
}
else
{
$p--;
}
}
return $output;
}
// Het genereren van alle mogelijke combinaties.
function genereer($aantal)
{
$resultaat = array();
while(count($resultaat) < faculteit($aantal))
{
$waarde = maak($aantal);
if(!in_array($waarde, $resultaat))
{
array_push($resultaat, $waarde);
}
}
sort($resultaat);
return $resultaat;
}
// Een functie voor het berekenen van de faculteit.
function faculteit($getal)
{
$faculteit = 1;
for($n = $getal; $n >= 1; $n--)
{
$faculteit *= $n;
}
return $faculteit;
}
// En nu nog even uitvoeren.
$aantal = 3;
$resultaat = genereer($aantal);
echo '<pre>'.print_r($resultaat , true).'</pre>';
?>
ps. Deze combinaties zijn nu allemaal strings. Deze kun je zelf dus nog opknippen en je 3x3 velden gaan maken.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
De formule om alle volgordes van een aantal elementen te berekenen heet faculteit en noteer je inderdaad met een uitroepteken. Stel je wilt alle volgordes van 123, dan heb je zes mogelijkheden want 3! == 6 (1 * 2 * 3)
Ik heb net een scriptje gemaakt:
echter, als ik die 789 er nog achter plak, dan krijg je 9! mogelijkheden (dat is inderdaad 362880) en dan redt het script het niet binnen de 30 seconden vrees ik. Er moet dan ook een slimmere manier zijn.
Ik heb net een scriptje gemaakt:
Code (php)
echter, als ik die 789 er nog achter plak, dan krijg je 9! mogelijkheden (dat is inderdaad 362880) en dan redt het script het niet binnen de 30 seconden vrees ik. Er moet dan ook een slimmere manier zijn.
Kijk de oplossing van Jan is vele malen korter. Netjes!
Ja, maar hij is me nog een beetje te brute-force ;-) En hij werkt alleen snel op korte reeksen, tot 6 a 7 getallen.
Bedankt voor jullie nadenken :) Ik ga de scripts nu ff bekijken en snappen :P



