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:
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:
sumber
Jawaban:
Skor 3:29
Mungkin juga membagi kasus khusus dengan 1,2,3,4. Membuatnya jauh lebih cepat.
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;
sumber
Nilai: 15:51
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:
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:
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 ;
sumber
Skor 20:35
Pendekatan yang sama sekali berbeda - bagian yang lebih sedikit tetapi jauh lebih lambat.
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 ;
sumber