Kakurolösungen Teil 2 - Neuer Ansatz?

Hallo!

Vor einigen Tagen hatte ich eine Frage für ein kleines Skriptchen, dass mir Kakurolösungen berechnet:
/t/array-ausserhalb-einer-funktion-beschreiben/6900931
(in meinem hinteren Beitrag wird genauer erklärt, was ich vor habe:
/t/array-ausserhalb-einer-funktion-beschreiben/69009…

Die Fragestellung ist gelöst, leider stelle ich gerade fest, dass ich doch mit meinem Lösungsansatz an die Grenzen von PHP komme, wenn ich „große“ Feldanzahl von 7+ habe.

Letztlich ist die Frage vielleicht auch schon besser im Matheforum aufgehoben, aber ich probiere es trotzdem mal hier :smile:

Also:
Meine Lösung war mir ein Array der entsprechenden Feldanzahl aufzubauen, da an alle möglichen Stellen 1-9 einzutragen und zu schauen, ob das Ergebnis stimmt. Das ganze Rekursiv hatte zur Folge, dass die geprüften Arrays in etwa so aussah:

(Feldanzahl 4)
1111
1112
1113

1121
1122
1123

1211
1212
1213

9999

In der Theorie klappt das tadellos, in der Praxis steigt aber mein Skript mit einem Timeout aus, wenn ich 7 Felder habe; anscheinend ist da meine Rekursive Berechnung nicht so dolle schnell… Ich brauche also einen neuen Ansatz für meine Problematik! Nur wie?

Ist es möglich, wenn z.B. das Ergebnis 1239 finde meine Funktion umstricken, dass er auch nicht noch 9321 ausprobiert, wo ich natürlich dutzende bis hunderte weitere Schritte habe und so mein Skript völlig auslastet?

Oder ich benötige einfach einen komplett neuen Ansatz…
Stehe aber gerade auf dem Schlauch, wie ich das noch machen könnte…

Freue mich also über alle neuen Ideen!

danke
Geisterkarle

hi
wie wärs, wenn du einfach eine längere skriptlaufzeit zulassen würdest?
siehe: http://de.php.net/set_time_limit
wenn dus auf einem lokalen server (xampp oder ähnliches) laufen lässt, sollte dies sowieso kein problem sein zu ändern.
lg niemand

Hallo Geisterkarle,

wenn ich Dich richtig verstandne habe, werbendest Du ein Array 7mal7, dass Du dann sicher mit zwei Schleifen bearbeitest.

Das schafft php problemlos ohne einen Timeout.

Überprüfe alle Deine Schleifen noch einmal.
Vielleicht gibt es irgendwo ein paar Durchläuft, die Du nicht brauchst.

Schau mal, ob Deine Entwicklungsumgebung einen Debugger hat, dann kannst du sehen, wo es stehen bleibt oder noch besser einen Profiler, dann kannst Du sehen, wo die meisste Zeit verwendet wird.

Viele Grüsse,
Sarah.

Hallo,

wenn ich das ganze mit meinem einfachen Verstand betrachte so gibt es, ungeachtet der Reinfolge für
Länge = 1 9 mögliche Ergebnisse 1,…,9
Länge = 2 32 mögliche Ergebnisse 12,…,89
Länge = 3 83 mögliche Ergebnisse 123,…,789
Länge = 4 55 mögliche Ergebnisse 1234,…,6789
Länge = 5 169 mögliche Ergebnisse 12345,…,56789
Länge = 6 75 mögliche Ergebnisse 123456,…,456789
Länge = 7 32 mögliche Ergebnisse 1234567,…,3456789
Länge = 8 9 mögliche Ergebnisse 12345678,…,23456789
Länge = 9 1 mögliche Ergebnisse 123456789

ich Hoffe ich habe richtig gerechnet.

Also ich würde das Ganze andersrum berechnen.

Du suchst eine 7 Feld große Zahl mit dem Ergebnis = 35 so gibt es nur diese 4:

1235789
1245689
1345679
2345678

und jede Zahl kann an jeder Stelle stehen also * 49 Möglichkeiten.

Demnach gilt, für die Werte A B C D E F G

A liegt zwischen 1-3
B liegt zwischen 2-4
C liegt zwischen 3-5
D liegt zwischen 4-6
E liegt zwischen 5-7
F liegt zwischen 6-8
G liegt zwischen 7-9

und A