Manufactoriaの素数テスト


13

バックグラウンド

Manufactoriaはプログラミングに関するゲームです。プレーヤーは、タスクを完了するために2次元プログラミング言語の形式を使用する必要があります。聞いたことがないなら、最も簡単な学習方法は、ゲームの最初のいくつかのレベルを試すことです。

チャレンジ

あなたの課題は、数の素数性をテストするプログラムを作成することです。

入力は、キュー内の一連のN個の青いマーカーになります。Nが素数の場合、プログラムはそれを受け入れます(ロボットを最後まで動かします)。Nが複合の場合、プログラムはそれを拒否する必要があります(どこかに床に落とします)。

提出オプション

これは典型的なManufactoriaチャレンジよりも複雑なチャレンジであるため、回答を送信する方法を増やすことを決定しました。

バニラ

提出物を作成してテストするための13x13カスタムレベルを作成しました。カスタムテストレベルは次のとおりです。

13x13カスタムレベル

ゲームではカスタムレベルで8つのテストケースのみが許可されます、理論的には、使用可能なメモリによってのみ制限される任意の自然数Nを処理できるようにする必要があります。 情報目的で、カスタムレベルで提供されるテストケースは次のとおりです。

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

拡張グリッド

一部のユーザーは、13x13グリッドよりも広いスペースが必要な場合があります。URLの番号を変更して作成されたゲーム内15x15カスタムレベルへのリンクは次のとおりです。

15x15カスタムレベル

悲しいことに、追加のセルにアクセスできないため、より大きなカスタムレベルは機能しません。

The Manufactoria Esolang

ManufactoriaはASCIIベースの言語に適応しています。作品をデザイン/テストする別の方法が必要な場合、または最終的なソリューションをゲームボードに適合させることができない場合は、このエソランを使用できます。このエソランに関する情報は、ここで見つけることができます:

Manufactoria esolang

エソランと実際のゲームの間にはいくつかの矛盾があります。たとえば、コンベアの交差点の処理方法は異なります。これらの不一致を利用しないようにしてください。

より高速なテスト方法

完了するまでに数千ステップを要するプログラムに関しては、ゲームは非常に遅くなります。私の概念実証ソリューションでは、15を拒否するために28042ステップが必要でした。ゲーム内で50倍の高速化をしても、時間がかかりすぎます。

私はこの非常に役立つウェブサイトを見つけました。回答へのリンクをコピーアンドペーストするだけで、特定の入力で回答をテストできます。28042ステップのプロセスには1秒もかかりませんでした。

注意すべきことの1つは、マシンが正常に動作していても、「誤って受け入れられた」というようなメッセージが頻繁に表示されることです。これは、Webページがテストケースのみを知っているためです。たとえば、私のマシンは実際には正しいものでしたが、私のソリューションは3番を「誤って受け入れた」と言うでしょう。

勝つ方法

スコアリング基準は、パーツ(占有セル)の数です。これはコードゴルフであるため、最も少ない部品での提出が勝ちです。

興味のある方のために、私のベンチマークソリューションには96個の部品があり、13x13グリッドに適合しています。最適なアルゴリズムを使用したことがわかっているため、より良いアルゴリズムを見つけると、大幅な改善につながる可能性があります。

回答:


10

53パーツ-11x11グリッド

私はちょうど2日前にManufactoriaをプレイすることを学んだので、おそらくゴルフにはあまり最適化されていませんが、少なくとも問題は解決します。もちろん、繰り返し減算を介して、試行分割を実装します。2からN-1までのすべての除数がチェックされます。時間の複雑さはO(N ^ 3)である必要があります。

53個のソリューション

ソリューションリンク

コンベアベルトを使用しなければならないことに非常に失望しました:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.