Lastig probleempje
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?
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?
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.
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
Daar maak ik dan wat in die dan weer filtert
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 Dutch Caffeine
Alleen dan 362880 keer en allemaal verschillende combinaties
[amateurmode]
(geen 9 , maar ff 3 hokjes, leest wat eenvoudiger)
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Baarr
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 ;-)
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 ....
Voor het eerste vakje heb je keuze uit 9 getallen, dan 8 dan 7 dan 6 enzo
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
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