Manufactoria: buat program penerimaan yang paling lambat

18

Tulis program Manufactoria yang akan menerima kaset input kosong. Tapi jangan lakukan itu dengan cepat! Maksud saya, menulis program dengan cepat, tetapi jangan biarkan itu berjalan cepat. Semakin lambat program, semakin baik, selama akhirnya berakhir. Contoh program di bawah ini memakan waktu 3:51 ("total waktu" yang dilaporkan oleh simulator).

masukkan deskripsi gambar di sini

http://pleasingfungus.com/Manufactoria/?lvl=36&code=g12#f3;r9:8f1;p12:9f3;c13:9f0;r11:9f0;r10:9f0;r9:9f1;b10:8f0;b10:8f1 ; r9: 7f2; c10: 7f2; c11: 7f2; c12: 7f3; q12: 8f3; y13: 8f2; y14: 8f2; y15: 8f1; y15: 7f0; y14: 7f0; y12: 7f0; g12: 6f3; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Program Anda dimulai dengan kaset kosong. Ini harus mencorat-coret sedikit, tetapi akhirnya mencapai kuadrat keluaran. Anda dapat meninggalkan data pada kaset jika Anda mau. Program paling lambat pada papan 7x7 Manufactoria menang!

Tombol panah kanan Anda adalah teman Anda, itu mempercepat simulator.

Poin bonus untuk menabrak simulator!

Keith Randall
sumber
Jadi tidak ada persyaratan untuk menerima / menolak input selain dari kaset kosong?
Volatilitas
@Vatilitas: benar.
Keith Randall
Mengganggu, simulator tidak akan melaporkan waktu berjalan kecuali kaset kosong pada akhirnya, karena tidak cocok dengan hasil yang diharapkan tantangan. (Untungnya mudah bagi saya untuk menghapus kaset pada akhirnya tanpa membutuhkan terlalu banyak ruang.)
kotak roti

Jawaban:

22

~ 10 23 iterasi ~ 10 15 iterasi ~ 10 8 iterasi

Pengaturan manufactoria

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g9:7f2;b12:8f2;p13:8f5;p11:8f3;r14:8f0;q11:10f3 ;q13:7f1;y13:9f1;r10:10f1 ; c12: 9f2; c9: 9f2; i11: 9f7; i10: 9f4; c9: 8f3; i10: 8f2; c14: 9f0; c15: 9f0; c15: 8f3; c15: 7f3; c14: 7f2; g12: 7f0; c11: : 7f3; c10: 7f2; q9: 6f7; r10: 6f1; r9: 5f3; c11: 6f0; r10: 5f2; r11: 5f1; r9: 4f3; r10: 4f0; r11: 4f0; y12: 5f2; y13: 5f2; ; y14: 5f3; y14: 6f0; y13: 6f0; y12: 6f0; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Mesin ini pada dasarnya adalah odometer yang berjalan di base tiga, menggunakan simbol merah, biru dan kuning untuk masing-masing angka 0, 1, dan 2. Simbol hijau digunakan untuk menandai akhir nomor. Pada awalnya, rekaman itu diinisialisasi dengan 49 simbol merah. Ini dilakukan oleh bagian-bagian di tiga baris teratas mesin. Empat baris terbawah menangani tugas penambahan angka dalam satu lingkaran. Pada setiap iterasi, dua sel cabang di sisi kiri mencari cara untuk menerapkan kenaikan ke nomor saat ini, dan kemudian sel-sel cabang di sisi kanan menyalin sisa, angka yang tidak terpengaruh.

Sebelumnya saya sudah mencoba memperkirakan waktu berjalan mesin, apakah diizinkan berjalan hingga selesai, tetapi pada level ini lebih masuk akal jika hanya menghitung jumlah iterasi. Secara kasar, dibutuhkan sekitar satu menit untuk menyelesaikan satu iterasi - tetapi bahkan jika butuh satu detik itu hanya akan mengurangi waktu berjalan dengan satu urutan besarnya.

kotak roti
sumber
4
Oke, saya menyerah ..
Volatilitas
2
Jangan menyerah! Saya tidak ragu bahwa ini masih hanya menggores permukaan. Misalnya, memadatkan logika odometer hanya dengan satu atau dua sel akan memungkinkan peningkatan urutan waktu dalam menjalankan waktu.
kotak roti
5
Jika itu membantu, saya sering mengirimkan jawaban golf yang jauh di belakang pemimpin, hanya karena itu pendekatan yang berbeda. Salah satu hal yang saya sukai dari situs ini adalah menjaga keragaman tanggapan.
kotak roti
1
@SimplyBeautifulArt One dapat dibayangkan meningkat dengan memiliki pasangan simbol sebagai digit (dalam hal ini Anda dapat menggunakan 15 dari 16 bukan 3 dari 4). Tentu saja, Anda akan mengalami banyak kesulitan dengan ukuran papan kecil dalam mencoba mengimplementasikannya.
feersum
8

603: 25

Tes online

Saya membaca kembali pertanyaan Manufactoria hari ini, dan tiba-tiba punya ide yang secara dramatis akan memperlambat proses: alih-alih hanya memiliki 50 nilai dan mengubah warna 3 kali, program baru melakukan itu, tetapi kemudian setelah itu, ia menurunkan jumlah nilai dengan 1, dan melewati perubahan warna lagi, sampai ada pita kosong di mana saat program berhenti.

Antrian tidak akan menyimpan lebih dari 50 nilai pada satu waktu, jadi tidak ada gunanya mencoba mendorong terlalu banyak nilai ke rekaman - mereka langsung terdorong keluar. Seperti sebelumnya, conveyor belts bertujuan untuk memaksimalkan waktu yang dibutuhkan untuk menjalankan sesuatu. Bahkan, ada sedikit penyesuaian untuk mencapai peningkatan run-time yang luar biasa.

Masih tidak ada jawaban di dekat kotak roti .

Keriangan
sumber
Menarik betapa miripnya solusi kami. Kami berdua mulai dengan pengganda 9x6, dan kami menempatkan grup cabang dan x6 di tempat yang sama! Milik Anda lebih elegan - Anda menggunakan setiap sel dan selesai dengan selotip yang bersih.
Igby Largeman
5

33:33

Mengerjakan ini cukup lama ( Volatilitas mengatur bar cukup tinggi), tetapi begitu saya menekan 33:33, saya pikir itu adalah waktu yang tepat untuk berhenti.

Strateginya cukup tumpul: pada dasarnya mengisi rekaman dengan satu warna, lalu yang lain, lalu yang lain, dan selalu mencoba untuk melintasi sebanyak mungkin sel di antara setiap penulisan (atau kelompok penulisan).

Saya yakin ada beberapa cara yang dapat ditemukan bahwa kita dapat melangkah lebih jauh dengan ini.

Beaver sibuk

Tautan level

Igby Largeman
sumber
+1 Saya akan melihat apa yang bisa saya lakukan untuk mengalahkannya;) (walaupun saya mungkin tidak akan terlalu jauh)
Volatilitas