Einführung
Ein häufiges Puzzle besteht aus einem dreieckigen Brett mit 15 Löchern für T-Stücke, wie in der folgenden Abbildung gezeigt:
Beginnend mit allen Stiften im Brett, mit Ausnahme eines Lochs oben, besteht der Sinn des Puzzles darin, Stifte wie Steine so übereinander zu springen, dass genau ein Stift übrig bleibt. Die einzig gültige Bewegung besteht darin, einen Stift über einen benachbarten Stift in eine beliebige Richtung in ein leeres Loch zu springen. Der Stift, der gesprungen wurde, wird dann vom Brett entfernt. Das Spiel endet, wenn keine gültigen Züge mehr vorhanden sind.
Spec
Ihre Aufgabe ist es, ein Programm zu schreiben, das eine vollständige Lösung für das Peg-Puzzle findet, dh eines, bei dem genau ein Peg übrig bleibt. Es gibt mehrere mögliche Lösungen, sodass Ihr Programm nur eine drucken muss.
- Ihr Programm erhält keine Eingabe. Sie dürfen keine Daten von externen Quellen lesen.
- Drucken Sie die Liste mit 13 Zügen aus, die ergibt, dass in diesem Format noch 1 Stift übrig ist:
Peg 1 jumps Peg 3 to Hole 6.
- Die Löcher / Zapfen sind von oben nach unten von links nach rechts nummeriert, so dass der obere Zapfen / Loch 1 ist und nummeriert wird, bis unten rechts 15 ist.
- Ihr Programm muss zur Laufzeit die Lösung finden . Das direkte Ausdrucken einer Lösung auf andere Weise als durch Lösen im Programm ist eine automatische Disqualifikation.
- Bonus : Sie erhalten 10 Bonuspunkte, wenn Sie mehrere eindeutige Lösungen ausgeben können (Sie können nur durch Leerzeilen getrennt drucken).
- Bonus : Erhalten Sie 5 Bonuspunkte, wenn die Nummer
15
nirgends in Ihrem Quellcode erscheint.
Wertung
Dies ist Code-Golf, daher ist die kürzeste Lösung (nach Byte-Anzahl), die eine korrekte Antwort ausgibt, der Gewinner. Bonuspunkte werden von Ihrer Gesamtbytezahl abgezogen. Bitte geben Sie eine Beispielausgabe zum Ausführen Ihres Programms sowie einen Link zu ideone
oder eine ähnliche Site an, wenn möglich, um die Ausführung Ihres Programms zu demonstrieren.
quelle
15=0xff=(1<4)-1=~(-1<<4)=...
15
selbst;)Antworten:
Ruby, Punktzahl
240238234 = 249 - 10 - 5Eine einfache Ruby-Implementierung, die alle möglichen Lösungen für dieses Rätsel druckt (dauert auf meinem Computer weniger als eine Minute). Die ersten Ausgabezeilen sind hier zu sehen:
Das Online-Beispiel finden Sie hier .
quelle
Python, 324 Zeichen, Punktzahl = 319
Der Peg-Status wird als Bitmaske beibehalten.
M
enthält eine Liste der Peg-Zustände und die Anweisungen, um zu diesem Zustand zu gelangen.Ich könnte es auch dazu bringen, alle Lösungen auszudrucken (es gibt 29760 davon), aber es würde mehr als 10 Zeichen kosten, dies zu tun.
Ich kann es nicht auf ideone posten, da es ungefähr 90 Sekunden dauert, bis es ausgeführt wird.
Ausgabe:
quelle
C, 386 Zeichen, Punktzahl = 371
Druckt alle 29760-Lösungen in weniger als einer Sekunde aus.
Diese Version geht (unter anderem) davon aus, dass der Compiler die implizite Deklaration von printf () zulässt. Mit implicit-int konnten etwa sechs weitere Zeichen gespeichert werden, diese Funktion wurde jedoch technisch aus C99 entfernt.
Außerdem können vier weitere Bytes gespeichert werden, indem die Großbuchstaben in den beiden Zeichenfolgen durch die entsprechenden Steuerzeichen ersetzt werden. Ich habe das hier nicht gemacht, weil Compiler solche Zeichenfolgen nicht zulassen müssen und es bereits dichten Quellcode vollständig unleserlich macht.
Der Klarheit halber ist hier derselbe Algorithmus ohne die verschleierteren Größenoptimierungen:
f, o und t sind die Liste der in der ersten Schleife initialisierten zulässigen Sprünge. r und ich bilden die Geschichte, die das Programm verwendet, um alle möglichen Spiele zurückzuverfolgen und zu erkunden.
Ich bin sicher, das kann verbessert werden!
quelle
>>1
durch ersetzt wird/2
.