Manufactoria'daki Mod 7


12

Basit bir Manufactoria mücadelesi. Giriş modülü 7'yi hesaplayın. Giriş big-endian ikili dosyasında olacaktır (mavi = 1, kırmızı = 0). Çıktı aynı biçimde olmalıdır.

Test örnekleri sağlanmıştır. En küçük parça sayısı kazanır.

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 ;

(giriş modu 7 0 ise, hiçbir şey çıktılamaz.)


"kod-golf" bu durumda "en az parça" anlamına mı geliyor?
John Dvorak

Artım problemini bile çözmediğim için, bunu nasıl çözeceğim hakkında hiçbir fikrim yok. Manufactoria eğlencelidir.
Justin

@ JanDvorak: evet.
Keith Randall

@KeithRandall Kod golf oyununu asla manufactoria ile etiketlemedik . Etiketi buradan kaldırmalı veya diğer sorulara eklemeliyiz.
Howard

@Howard: Bunu (veya en hızlı kod veya meşgul-kunduz veya kod meydan okuması veya puanlamayı en iyi tanımlayan ne varsa) eklemeyi söyleyebilirim ve manufactoria'nın basit bir dil etiketi olmasına izin verin .
Ilmari Karonen

Yanıtlar:


5

### Manufactoria, 85 parça yerleştirildi

Algoritma oldukça basittir: Bir durum makinesi (sekiz dallı en büyük bölüm - durumlardan biri lojistik amaçlı çoğaltılır) kullanarak modülü hesaplayın, sonra sonuçları kodlayın ve toplayın. Hemen hemen her sonuç bir basamak içerdiğinden parça miktarını azaltmak için fazladan bir sıkıştırma adımı kullanılır.

YED'de tasarlandı, daha sonra Manufactoria'ya kopyalandı.

Bence çok fazla taşıyıcı bant kullanıyor.


5

58 43 parça

Ekran görüntüsü 43 parçalı mod7 azaltmak Manufactoria

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 ; S12: 10f4; p11: 10f4; C16: 11f1; i15: 11f7; S14: 11f7; S13: 11f7; S12: 11f7; c11: 11f2; R15: 12f3, b14: 12f3; c12: 12f3; C15: 13f0; c14 : 13f0; c13: 13f0; R13: 12f3; Y10: 3f3; c10: 4F2; G10: 5f1; S10: 6f4; Y11: 3f0; S11: 4F6; R11: 5F3; p11: 6f4; B11: 7f1; I12: 4F7 C12: 5F3; S12: 6f0; G12: 2f3; c12: 3f3; p13: 4F6; Y13: 3f0; c13: 5f0; c12: 7F3; b 12: 8f3; ve CTM = Mod7; Girdi: _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 ;

Keith Randall'ın girişi ilk olarak tek başına dönüştürme fikri oldukça iyiydi, bu yüzden çaldım. ;-) Kolayca, sadece Manufactoria küçük ikili-unary dönüştürücüler optimize etmek için biraz zaman harcadı , bu yüzden sadece bu zorluktan neredeyse çalışan çözümlerimi * aldı ve hızlı bir şekilde optimize mod-7 sayacı ile birleştirdi.

Bu tasarım şimdi sadece robotları yukarıdan aşağıya doğru almanın, aksi takdirde işe yaramaz ekstra konveyörler gerektirmeye başladığı noktada. Diğer önemli parça indirimleri, muhtemelen yerleşimin daha uzun ve daha dar olacak şekilde yeniden tasarlanmasından kaynaklanacaktır.

(* Bu meydan okuma a) tasarımın 7 × 7 levhaya sığmasını ve b) tekli çıktının kırmızı işaretlerde olmasını gerektiriyordu. Yukarıdaki makinenin ikili-tekli dönüştürücü kısmına bakarsanız, bir veya iki ekstra parça ile her iki gereksinimi de değil, her iki gereksinimi de kolayca karşılayabileceğini unutmayın.)


Önceki 58 bölümlük sürüm:

Manufactoria'daki 58 parçalı mod 7 redüktörün ekran görüntüleri

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; S15: 5f0; C15: 6f3; C15 : 7F3; i15: 8F6; C15: 9F3; S15: 10f7; C15: 11f3; R12: 12f2; p13: 12f7, b14: 12f0, b14: 11f3; b 12: 11f3; Y14: 10f3; Y15: 13f0; ve CTM = Mod7 ; Girdi: _binary_number_big_endian._Çıktı: _that_binary_number_mod_7; bbb: | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;

Gibi Jan Dvorak'ın çözümü , bu da bir 7-devlet FSM dayanmaktadır. Okumayı kolaylaştırmak için ekran görüntüsünde her duruma karşılık gelen kapıları etiketledim. Ancak devlet makinesinin kendisi gerçekten kolay olan kısımdır; zor kısım, minimum çıktıyı az sayıda kapı ile üretiyor.

Yararlı bulduğum bir numara, sarı işaretleyiciden önce yazılan her şeyi sonuna kadar değiştiren son kopya döngüsüydü (aynı zamanda yeşil işaretleyiciyi sıyırırken): bu, yüksek dereceli çıktı bitlerindeki tekrarlamayı kullanmama izin verdi çıktıları şu şekilde üretmek:

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

Bu, çoğunlukla 2, 4 ve 5 (hepsi ile başlar BR) ve 3 ve 6 (ile başlar BB) çıkışları için çıkış yollarını birleştirmeme izin verir .


Tasarımında hiçbir kusur bulamadım. Yerden tasarruf konusunda iyi iş.
John Dvorak

Ps. Bunun gibi durum-makine tabanlı uygulamalar için güzel bir test: 8890 = BRRRBRBRBBBRBR sayısı 0 çıktısını vermeli, her durumu iki kez ziyaret etmeli (ve sonunda 0 durumunu tekrar) ve olası her durum geçişini bir kez almalıdır.
Ilmari Karonen


0

Aslında ne yaptığım hakkında hiçbir fikrim yoktu ama işe yarıyor ve kazanan olabilirim (eğer sadece test senaryoları yeterli kanıtsa). : D

resim açıklamasını buraya girin

EDIT: 2 kez, şimdi biraz daha küçük optimize edilmiştir. (Çöp kaldırıldı)


Aslında daha büyük sayılarla (ya da test durumlarından farklı) çalışıp çalışmadığını bilmiyorum.
Leo Pflug

1
-1 yalnızca test senaryolarında çalışır. Sayı ile başlarsa 111, her zaman 7 ile bölünebilir olarak rapor edilir. Bu doğru değildir.
John Dvorak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.