バックグラウンド
Manufactoriaはプログラミングに関するゲームです。プレーヤーは、タスクを完了するために2次元プログラミング言語の形式を使用する必要があります。聞いたことがないなら、最も簡単な学習方法は、ゲームの最初のいくつかのレベルを試すことです。
チャレンジ
あなたの課題は、数の素数性をテストするプログラムを作成することです。
入力は、キュー内の一連のN個の青いマーカーになります。Nが素数の場合、プログラムはそれを受け入れます(ロボットを最後まで動かします)。Nが複合の場合、プログラムはそれを拒否する必要があります(どこかに床に落とします)。
提出オプション
これは典型的なManufactoriaチャレンジよりも複雑なチャレンジであるため、回答を送信する方法を増やすことを決定しました。
バニラ
提出物を作成してテストするための13x13カスタムレベルを作成しました。カスタムテストレベルは次のとおりです。
ゲームではカスタムレベルで8つのテストケースのみが許可されますが、理論的には、使用可能なメモリによってのみ制限される任意の自然数Nを処理できるようにする必要があります。 情報目的で、カスタムレベルで提供されるテストケースは次のとおりです。
1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject
拡張グリッド
一部のユーザーは、13x13グリッドよりも広いスペースが必要な場合があります。URLの番号を変更して作成されたゲーム内15x15カスタムレベルへのリンクは次のとおりです。
悲しいことに、追加のセルにアクセスできないため、より大きなカスタムレベルは機能しません。
The Manufactoria Esolang
ManufactoriaはASCIIベースの言語に適応しています。作品をデザイン/テストする別の方法が必要な場合、または最終的なソリューションをゲームボードに適合させることができない場合は、このエソランを使用できます。このエソランに関する情報は、ここで見つけることができます:
エソランと実際のゲームの間にはいくつかの矛盾があります。たとえば、コンベアの交差点の処理方法は異なります。これらの不一致を利用しないようにしてください。
より高速なテスト方法
完了するまでに数千ステップを要するプログラムに関しては、ゲームは非常に遅くなります。私の概念実証ソリューションでは、15を拒否するために28042ステップが必要でした。ゲーム内で50倍の高速化をしても、時間がかかりすぎます。
私はこの非常に役立つウェブサイトを見つけました。回答へのリンクをコピーアンドペーストするだけで、特定の入力で回答をテストできます。28042ステップのプロセスには1秒もかかりませんでした。
注意すべきことの1つは、マシンが正常に動作していても、「誤って受け入れられた」というようなメッセージが頻繁に表示されることです。これは、Webページがテストケースのみを知っているためです。たとえば、私のマシンは実際には正しいものでしたが、私のソリューションは3番を「誤って受け入れた」と言うでしょう。
勝つ方法
スコアリング基準は、パーツ(占有セル)の数です。これはコードゴルフであるため、最も少ない部品での提出が勝ちです。
興味のある方のために、私のベンチマークソリューションには96個の部品があり、13x13グリッドに適合しています。最適なアルゴリズムを使用したことがわかっているため、より良いアルゴリズムを見つけると、大幅な改善につながる可能性があります。