Primalitätstests in Manufactoria


13

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.

13x13 benutzerdefiniertes Level

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:

15x15 benutzerdefiniertes Level

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:

Manufactoria esolang

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.

Antworten:


10

53 Teile - 11x11 Raster

Ich habe gerade vor 2 Tagen gelernt, Manufactoria zu spielen, daher ist es wahrscheinlich nicht sehr golfoptimiert, aber es löst zumindest das Problem. Es implementiert natürlich die Probeteilung durch wiederholte Subtraktion. Alle Teiler von 2 bis N-1 werden überprüft. Die zeitliche Komplexität sollte O (N ^ 3) sein, glaube ich.

53-teilige Lösung

Lösungslink

Ich war sehr enttäuscht, ein Förderband benutzen zu müssen :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.