Membagi dengan cepat di Manufactoria

10

Latar Belakang

Manufactoria telah dipasarkan sebagai permainan, tetapi pegolf-kode kami dapat melihatnya seperti apa adanya: bahasa pemrograman dua dimensi. Bahasa pemrograman Manufactoria didasarkan pada satu antrian tunggal , yang berisi serangkaian penanda berwarna. Penunjuk instruksi bergerak di sekitar papan permainan menggunakan sabuk konveyor, dan ia bertemu serangkaian penulis dan cabang yang membaca dari dan menulis ke antrian.

Bahasa ini sangat mudah dimengerti, jadi cara tercepat untuk mempelajarinya adalah dengan memainkan beberapa level pertama permainan (tertaut di atas).

Tantangan

Tantangan Anda adalah membuat program yang dapat membagi satu nomor dengan nomor lainnya dalam waktu yang paling singkat.

Input untuk program ini akan menjadi string penanda biru X diikuti oleh penanda merah Y. Output yang dibutuhkan adalah string penanda merah dengan panjang X / Y.

Papan permainan yang akan digunakan ditemukan di tingkat kontes resmi ini:

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

Ukurannya 13x13 (ukuran maksimum) dan sudah dilengkapi dengan tes yang benar (lihat bagian penilaian).

Mencetak gol

Skor dari program Anda adalah jumlah total waktu yang diperlukan untuk program untuk lulus semua tes di tingkat kontes resmi. Total waktu diberikan pada layar level-selesai.

Saat menjalankan tes, Anda kemungkinan besar harus menggunakan slider akselerasi 50x di kiri bawah untuk menerima hasil dengan cepat (akselerasi waktu tidak mempengaruhi skor).

Berikut adalah daftar masalah pembagian yang terlibat dalam tes:

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

Contoh I / O

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: 
PhiNotPi
sumber
Hal-hal keren, game itu! Jangan benar-benar memberi waktu untuk bermain golf hari ini tetapi akan mengingat ini.
tomsmeding

Jawaban:

6

Skor 3:29

Mungkin juga membagi kasus khusus dengan 1,2,3,4. Membuatnya jauh lebih cepat.

masukkan deskripsi gambar di sini

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c9:13f2;c10:13f2;c11:13f2;p12:f7;y13:f0;p11:f0;c11:4f3;c10:3f0;p11==f0 ; c10: 5f0; c9: 5f0; c11: 6f3; p11: 7f0; c10: 7f0; p11: 3f0; r10: 6f1; q8: 5f4; q8: 6f1; q9: 6f1; c7: 5f3; c7: 6f3; c7: 6f3; q7: 6f3; : 2f0; r10: 1f3; r10: 4f1; q9: 3f4; q9: 4f1; c9: 2f3; c8: 3f3; c8: 4f3; r10: 8f1; q10: 9f6; q9: 9f1; q9: 8f4; q9: 7f4; q9: 7f4; ; c8: 8f3; c8: 9f3; c8: 10f3; c8: 11f3; c8: 12f3; c8: 13f2; c7: 7f2; c8: 7f3; r11: 9f3; r11: 10f0; r10: 10f0; r9: 10f3; r9: 10f3; r9; : 11f2; p11: 11f6; r11: 12f1; g11: 8f3; b10: 11f2; c16: 10f2; q17: 10f6; q17: 11f3; g18: 11f0; c12: 11f1; c12: 10f2; c13: 10f2; c14: 10f2; c14: 10f2; ; c15: 10f2; c17: 12f0; p16: 12f4; c16: 11f3; c16: 13f1; q15: 12f0; r15: 13f1; c14: 12f3; c14: 13f0; c13: 13f0; q17: 7f6; q17: 9f1; q17: 9f1; q18: 9f1; : 9f6; q18: 8f5; q17: 6f1; g16: 6f2; y18: 6f0; p17: 5f5; r18: 5f0; c16: 5f0; p15: 5f0; r15: 6f3; b15: 7f2; r16: 8f1; r16: 8f1; ; q14: 5f0; y14: 4f3; g14: 6f1; p13: 5f0; p13: 6f0; p13: 7f0; p13: 8f0; p13: 9f1; g12: 9f0; c17: 8f1; & ctm = Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbrrr: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbj! Bbr bbr bbb bbbbbbbbbbbbbbbbbbbbr bbb bbb bbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbspty; bbr bbb bb bbb bbb bbb bbb bbb; bbr bbb;

Keith Randall
sumber
Aku seharusnya sudah memperkirakan ini, tapi bagaimanapun juga pekerjaan bagus. Saya berharap mesin game memungkinkan saya untuk membuat lebih dari 8 test case. Haruskah saya membuat lebih banyak tantangan Manufactoria di masa depan?
PhiNotPi
1
Tentu, saya suka mereka.
Keith Randall
4

Nilai: 15:51

masukkan deskripsi gambar di sini

Apakah pembagian dengan pengurangan berulang. Gunakan Y di antara R untuk melacak berapa banyak pembagi yang telah kami kurangi sejauh ini. Menggunakan Gs untuk menghitung hasil bagi.

Misalnya, status pada awal setiap loop luar (tepat setelah penulis G awal) untuk 12/4 adalah:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Ketika tidak ada B yang tersisa, gadget di bagian kiri bawah menghapus Rs dan kemudian menampilkan # G-1 Rs.

Loop dalam melepaskan satu B pada satu waktu dan menggunakan Y untuk melacak posisi. Mulai dari lingkaran luar:

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

Loop dalam adalah kotak 3x4 di kanan bawah. Tata letak sisanya mungkin bisa sedikit ditingkatkan, tetapi loop dalam ketat.

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; q14: 8f7; g13: 8f2; p14: 9f4; r13: 10f2; p14: 10f7; b15: 10f0; q14: 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; q11: 11f6; q11: 11f6; ; q11: 12f7; r10: 12f2; c10: 10f2; q16: 10f5; y14: 6f3; q14: 5f3; g15: 5f1; c15: 4f1; c15: 3f1; c17: 9f1; c17: 8f1; c17: 7f1; c17: 7f1; c17: 7f1; c17: 7f1; : 6f1; C17: 5f1; C17: 4f1; C17: 3f1; y16: 9f1; G17: 10f1; Q14: 2f4; G14: 1f3; & 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 ;

Keith Randall
sumber
Dengan mengatur ulang bagian-bagian desain Anda secara drastis, saya dapat mengurangi skor menjadi 13:28 dengan 53 bagian.
PhiNotPi
2

Skor 20:35

Pendekatan yang sama sekali berbeda - bagian yang lebih sedikit tetapi jauh lebih lambat.

solusi div

http://pleasingfungus.com/Manufactoria/?lvl=34&code=p12:f3;g11:f3;b11:3f3;c12:4f2;c11:4f2;c13:f3;c13:3f3;c13:4f3;c12#f3 ; c11: 5f1; c10: 5f2; c9: 8f3; c9: 9f3; c10: 11f2; c11: 11f1; c11: 9f1; c11: 10f1; c11: 12f2; c13: 8f0; c11: 8f0; c13: 7f0; c14: 7f0; c14: 7f0; : 7f0; c14: 6f3; c12: 7f3; y14: 5f0; y10: 6f1; y11: 7f1; g12: 6f2; g9: 11f2; g10: 10f0; q9: 10f3; q13: 5f7; q13: 6f7; b11: 6f1; b11: 6f1; ; b10: 9f1; p10: 7f1; r9: 7f2; p10: 8f4; p12: 8f3; q12: 12f3; r13: 12f0; r8: 10f2; c12: 9f3; c12: 10f3; c12: 11f3; & ctm = Divide_and_bantuan_barang_dimasukkan_permintaan_kepentingan_memutuskan_kepentingan_memiliki , _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;

Howard
sumber