Manufactoria'ya hızlıca bölün


10

Arka fon

Manufactoria bir oyun olarak piyasaya sürüldü, ancak kod golfçüleri gerçekte ne olduğunu görebiliyoruz: iki boyutlu bir programlama dili. Manufactoria programlama dili, bir dizi renkli işaretleyici içeren tek bir sıraya dayanır . Talimat işaretçisi konveyör bantları kullanarak oyun tahtası etrafında hareket eder ve sıradan okuyan ve sıraya yazan bir dizi yazar ve dalla karşılaşır.

Dili anlamak çok kolaydır, bu yüzden onu öğrenmenin en hızlı yolu, oyunun ilk birkaç seviyesini (yukarıda bağlantılı) oynamaktır.

Meydan okuma

Zorluğunuz, bir sayıyı en az sürede başka bir sayıya bölebilecek bir program oluşturmaktır.

Programın girdisi, bir X mavi işaretçi dizisi ve ardından Y kırmızı işaretleyici dizisi olacaktır. Gerekli çıktı, X / Y uzunluğunda bir kırmızı işaretler dizisi olacaktır.

Kullanılacak oyun tahtası bu resmi yarışma seviyesinde bulunur:

http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbbbbrrrr:rrr|bbbbbbbbbbbbrrr:rrrr|bbbbbbbbbrrr:rrr|bbbbbbbbbbrr: rrrrr, 13, 3; 0

13x13'tür (maksimum boyut) ve doğru testlerle önceden donatılmıştır (puanlama bölümüne bakın).

puanlama

Programınızın puanı, programın tüm testleri resmi yarışma düzeyinde geçmesi için geçen toplam süredir. Toplam süre seviye tamamlama ekranında verilir.

Testleri çalıştırırken, sonuçları hızlı bir şekilde almak için büyük olasılıkla sol alt kısımdaki 50x hızlandırıcı kaydırıcıyı kullanmanız gerekecektir (zaman ivmesi skoru etkilemez).

Testlerde yer alan bölme sorunlarının listesi:

 6/2 = 3
 3/3 = 1
 4/1 = 4
 0/1 = 0
12/4 = 3
12/3 = 4
 9/3 = 3
10/2 = 5

Örnek G / Ç

12/3=4
in:  BBBBBBBBBBBBRRR
out: RRRR

10/2=5
in:  BBBBBBBBBBRR
out: RRRRR

9/3=3
in:  BBBBBBBBBRRR
out: RRR

0/1=0
in:  R
out: 

Harika şeyler, bu oyun! Gerçekten bu gün golf için zaman vermedi ama bunu hatırlar.
tomsmeding

Yanıtlar:


6

Bunu tahmin etmeliydim, ama yine de iyi bir iş. Keşke oyun motoru 8'den fazla test senaryosu oluşturmama izin verdi. Gelecekte daha fazla Manufactoria zorluğu yaratmalı mıyım?
PhiNotPi

1
Tabii, onları seviyorum.
Keith Randall

4

Puan: 15:51

resim açıklamasını buraya girin

Tekrarlanan çıkarma ile bölme yapar. Şimdiye kadar ne kadar bölücü çıkardığımızı takip etmek için R arasında bir Y kullanır. Bölümü saymak için Gs kullanır.

Örneğin, 12/4 için her dış halkanın başlangıcındaki (ilk G yazarından hemen sonra) durum:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Hiç Bs kalmadığında, sol alttaki gadget Rs'yi çıkarır ve sonra # G-1 Rs çıkarır.

İç döngü her seferinde bir tane B çıkarır ve pozisyonu takip etmek için Y'yi kullanır. Dış döngüden başlayarak:

BBBBBBBB RRRR GG
BBBBBBB RYRRR GG
BBBBBB RRYRR GG
BBBBB RRRYR GG
BBBB RRRR GG

İç döngü sağ alt taraftaki 3x4 kutusudur. Geri kalanın düzeni muhtemelen biraz geliştirilebilir, ancak iç döngü sıkıdır.

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; S14: 8f7; G13: 8f2; p14: 9f4; R13: 10f2; p14: 10f7; B 15: 10f0; S14: 11f7; P15: 11f3; R16: 11f1; P15: 8f0; R15: 9f1; C16: 8f0; c13 : 2f0; C15: 2f0; C16: 2f0; C17: 2f0; c11: 3f3; c11: 4f3; c11: 6f3; c11: 7F3; c11: 8f3; c11: 9F3; c11: 5F3; p11: 10f7; S11: 11f6 ; S11: 12f7; R10: 12f2; c10: 10f2; S16: 10f5; Y14: 6f3; S14: 5F3; G15: 5f1; C15: 4f1; C15: 3F1; C17: 9f1; C17: 8f1; C17: 7f1; c17 : 6F1; C17: 5f1; C17: 4f1; C17: 3F1; Y16: 9f1; G17: 10f1; S14: 2f4; g14: 1F3; ve CTM = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: fff | bbbrrr: r | bbbbr : rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;


Tasarımınızın parçalarını büyük ölçüde yeniden düzenleyerek, 53 parça ile skoru 13:28'e indirebildim.
PhiNotPi

2
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.