ManufactoriaのMod 7


12

シンプルなManufactoriaチャレンジ。7を法とする入力を計算します。入力はビッグエンディアンバイナリ(青= 1、赤= 0)になります。出力は同じ形式である必要があります。

テストケースが提供されます。最小の部品数が優先されます。

http://pleasingfungus.com/Manufactoria/?ctm=Mod7;Input:_binary_number_big_endian._Output:_that_binary_number_mod_7;bbb:|brrr:b|brrrr:br|bb:bb|bbrrb:brr|brrrrb:brb|bbrb:bbr; 13; 3; 1 ;

(入力mod 7が0の場合、何も出力しません。)


この場合の「code-golf」は「最少の部品」を意味しますか?
ジョンドヴォルザーク14年

増分の問題さえ解決していないので、これを解決する方法がわかりません。製作所は楽しいです。
ジャスティン14年

@JanDvorak:はい。
キースランドール14年

@KeithRandall私たちはコードゴルフに製造業者のタグを付けませんでした。ここでタグを削除するか、他の質問に追加する必要があります。
ハワード14年

@Howard:それを追加するか(または、最速コードビジービーバーコードチャレンジ、またはスコアリングを最もよく説明するもの)、manufactoriaを単純な言語タグにします。
イルマリカロネン

回答:


5

### Manufactoria、85個の部品を配置

アルゴリズムは非常に単純です。ステートマシン(8つの分岐を持つ最大部分-状態の1つはロジスティック目的で複製されます)を使用してモジュラスを計算し、結果をエンコードして収集します。ほとんどすべての結果には1桁が含まれるため、部品の量を減らすために追加の圧縮ステップが使用されます。

yEdで設計され、その後Manufactoriaに転写されました。

私の意見では、あまりにも多くのコンベアベルトを使用しています。


5

58 43パーツ

Manufactoriaの43部mod7 reduceのスクリーンショット

http://pleasingfungus.com/Manufactoria/?lvl=33&code=c16:9f0;q15:9f3;q14:9f3;q13:9f3;c12:9f3;c16:10f1;r15:10f3;r14:10f3;b13:10f3 ; q12:10f4; p11:10f4; c16:11f1; i15:11f7; q14:11f7; q13:11f7; q12:11f7; c11:11f2; r15:12f3; b14:12f3; c12:12f3; c15:13f0; c14 :13f0; c13:13f0; r13:12f3; y10:3f3; c10:4f2; g10:5f1; q10:6f4; y11:3f0; q11:4f6; r11:5f3; p11:6f4; b11:7f1; i12:4f7 ; c12:5f3; q12:6f0; g12:2f3; c12:3f3; p13:4f6; y13:3f0; c13:5f0; c12:7f3; b12:8f3;&ctm = Mod7; Input:_binary_number_big_endian._Output:_that_binary_b :| brrr:b | brrrr:br | bb:bb | bbrrb:brr | brrrrb:brb | bbrb:bbr; 13; 3; 1 ;

最初に入力を単項に変換するというキースランドールのアイデアはかなり良かったので、私はそれを盗みました。;-)便利なことに、私はManufactoriaの小さなバイナリから単数へのコンバータを最適化するのに少し時間を費やしたので、その課題からほとんど動作するソリューション*の1つを選択し、迅速に最適化されたmod-7カウンターと組み合わせました。

この設計では、ロボットを上から下に移動するだけでは、無駄な余分なコンベアが必要になり始めています。部品の大幅な削減は、レイアウトをより高く、より狭くなるように再設計することによって生じる可能性があります。

(* その課題には、a)7×7ボードに適合する設計、およびb)赤マーカーである単項出力が必要でした。上記のマシンのバイナリからユニタリーへのコンバーターの部分を見ると、1つまたは2つの余分な部分があれば、どちらか一方の要件を簡単に満たすことができますが、両方ではありません。


以前の58パートバージョンは次のとおりです。

Manufactoriaの58パートmod 7レデューサーのスクリーンショット、ラベル付きの状態

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g12:2f3;q13:13f5;c14:13f0;c15:12f3;c9:6f2;c9:7f1;c9:8f1;c9:9f1;c10:4f3 ; c10:5f3; i10:6f5; c10:7f2; c10:9f0; b11:3f2; p11:4f1; c11:5f1; p11:6f2; p11:7f2; c11:8f3; p11:9f3; b11:10f2; c12 :3f2; c12:4f2; c12:5f0; r12:6f3; c12:7f3; i12:8f1; i12:9f5; y12:10f3; c13:3f2; c13:4f3; i13:5f1; c13:6f3; c13:7f2 ; i13:8f0; c13:9f1; c14:3f3; c14:4f2; p14:5f5; c14:6f1; p14:7f6; p14:8f7; r14:9f3; c15:4f3; q15:5f0; c15:6f3; c15 :7f3; i15:8f6; c15:9f3; q15:10f7; c15:11f3; r12:12f2; p13:12f7; b14:12f0; b14:11f3; b12:11f3; y14:10f3; y15:13f0;&ctm = Mod7 ; Input:_binary_number_big_endian._Output:_that_binary_number_mod_7; bbb:| brrr:b | brrrr:br | bb:bb | bbrrb:brr | brrrrb:brb | bbrb:bbr; 13; 3; 1 ;

Jan Dvorakのソリューションと同様、これも7ステートFSMに基づいています。読みやすくするために、スクリーンショットで各状態に対応するゲートにラベルを付けました。ただし、ステートマシン自体は本当に簡単な部分です。トリッキーな部分は、最小限のゲート数で最終出力を生成することです。

私が便利だと思った1つのトリックは、黄色のマーカーの前に書かれたすべてを最後にバレルシフトする(また、緑色のマーカーを取り除く)最終コピーループでした:これにより、高次出力ビットの繰り返しを利用することができました出力を次のように生成します。

0:  Y   ->
1: BY   ->   B
2:  YBR ->  BR 
3:  YBB ->  BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR

これにより、出力2、4、5(すべてがで始まるBR)と3、6(すべてで始まる)の出力パスをほとんど組み合わせることができますBB


あなたのデザインに欠陥は見つかりませんでした。スペースを節約する上で良い仕事です。
ジョンドヴォルザーク14

追伸 このようなステートマシンベースの実装の良いテストは次のとおりです:数値8890 = BRRRBRBRBBBRBRは出力0を与え、すべての状態を2回(そして最後にもう一度状態0)訪問し、可能なすべての状態遷移を1回取得します。
イルマリカロネン14


0

私は実際に自分が何をしているのか分かりませんでしたが、うまくいき、勝者になるかもしれません(テストケースだけが十分な証拠になるなら)。:D

ここに画像の説明を入力してください

編集:2倍に最適化、少し小さくなりました(ゴミを削除)


実際、それがより大きな数値(またはテストケースとは異なる数値)で動作するかどうかはわかりません。
レオPflug 14年

1
-1はテストケースでのみ機能します。番号が始まる場合111、なり、常にこれは単に本当ではありません7で割り切れるであると報告さ。
ジョンドヴォルザーク14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.