Hintergrund
Manufactoria ist ein Programmierspiel. Der Spieler muss eine zweidimensionale Programmiersprache verwenden, um Aufgaben zu erledigen. Wenn Sie noch nie davon gehört haben, lernen Sie am einfachsten, indem Sie die ersten Level des Spiels ausprobieren.
Herausforderung
Ihre Herausforderung besteht darin, ein Programm zu erstellen, das die Primalität einer Zahl testet.
Die Eingabe besteht aus einer Reihe von N blauen Markierungen in der Warteschlange. Wenn N eine Primzahl ist, sollte Ihr Programm diese akzeptieren (bewegen Sie den Roboter zum Ziel). Wenn N zusammengesetzt ist, sollte Ihr Programm es ablehnen (irgendwo auf den Boden fallen lassen).
Einreichungsoptionen
Da dies eine komplexere Herausforderung als die typische Manufactoria-Herausforderung ist, habe ich beschlossen, mehr Möglichkeiten zum Einreichen Ihrer Antworten zuzulassen.
Vanille
Ich habe ein benutzerdefiniertes 13x13-Level erstellt, um Einreichungen zu erstellen und zu testen. Die benutzerdefinierte Teststufe lautet wie folgt.
Das Spiel erlaubt nur 8 Testfälle auf einer benutzerdefinierten Ebene, aber Ihre Kreation sollte theoretisch in der Lage sein, jede natürliche Zahl N zu verarbeiten, die nur durch den verfügbaren Speicher begrenzt ist. Zu Informationszwecken werden die folgenden Testfälle in der benutzerdefinierten Ebene bereitgestellt:
1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject
Erweitertes Gitter
Einige Benutzer möchten möglicherweise mehr Platz als ein 13x13-Raster. Hier ist ein Link zu einem benutzerdefinierten 15x15-Level im Spiel, der durch Ändern einer Zahl in der URL erstellt wurde:
Größere benutzerdefinierte Ebenen funktionieren leider nicht, da auf die zusätzlichen Zellen nicht zugegriffen werden kann.
Die Manufactoria Esolang
Manufactoria wurde in eine ASCII-basierte Sprache überführt. Wenn Sie Ihre Kreation auf eine andere Weise entwerfen / testen möchten oder Ihre endgültige Lösung nicht auf das Spielbrett passen können, können Sie diesen Esolang verwenden. Informationen zu diesem Esolang finden Sie hier:
Es gibt einige Unterschiede zwischen dem Esolang und dem tatsächlichen Spiel. Beispielsweise werden Förderkreuzungen unterschiedlich gehandhabt. Versuchen Sie, diese Diskrepanzen nicht auszunutzen.
Eine schnellere Möglichkeit zum Testen
Das Spiel ist sehr langsam, wenn es um Programme geht, die mehrere tausend Schritte benötigen. Meine Proof-of-Concept-Lösung benötigte 28042 Schritte, um 15 abzulehnen. Selbst bei der 50-fachen Geschwindigkeit im Spiel dauert dies einfach zu lange.
Ich fand diese Website sehr hilfreich . Kopieren Sie einfach den Link zu Ihrer Antwort, und Sie können Ihre Antwort mit bestimmten Eingaben testen. Der 28042-stufige Prozess dauerte weniger als eine Sekunde.
Eine Sache zu beachten ist, dass es oft so etwas wie "falsch akzeptiert" sagt, auch wenn Ihre Maschine richtig funktioniert hat. Dies liegt daran, dass die Webseite nur die Testfälle kennt. Zum Beispiel würde es bedeuten, dass meine Lösung die Nummer 3 "falsch akzeptiert" hat, obwohl meine Maschine tatsächlich korrekt war.
Wie gewinnt man
Das Bewertungskriterium ist die Anzahl der Teile (Zellen belegt). Dies ist Codegolf, daher gewinnt die Einsendung mit den wenigsten Teilen.
Für Interessenten besteht meine Benchmark-Lösung aus 96 Teilen und passt in das 13x13-Raster. Die Suche nach einem besseren Algorithmus könnte zu enormen Verbesserungen führen, da ich weiß, dass ich einen suboptimalen Algorithmus verwendet habe.