The Collatz urut mulai dari bilangan bulat positif n didefinisikan dengan cara ini:
- jika n bahkan maka membaginya dengan 2 (
n' = n / 2
) - jika n ganjil maka kalikan dengan 3 dan tambahkan 1 (
n' = 3n + 1
)
Ulangi iterasi di atas hingga n mencapai 1.
Tidak diketahui (ini adalah masalah utama yang belum terpecahkan dalam teori bilangan) jika urutan akhirnya akan mencapai nomor 1, terlepas dari bilangan bulat positif yang dipilih pada awalnya.
Sebuah Dua Kontra Machine (2cm) adalah mesin dilengkapi dengan dua register yang dapat menyimpan nilai integer non-negatif dan dapat diprogram dengan set instruksi berikut:
INCX increase the value of register X
INCY increase the value of register Y
JMP n jump to instruction n
DJZX n if register X is zero jump to instruction n,
otherwise decrement its value
DJZY n if register Y is zero jump to instruction n,
otherwise decrement its value
HALT halt (and accept)
PRINTX print the content of register X
Program 2CM hanyalah urutan instruksi, misalnya program berikut hanya menyalin isi register X untuk mendaftar Y:
cp: DJZX end
INCY
JMP cp
end: HALT
Perhatikan bahwa 2CM adalah Turing Lengkap (yaitu dapat menghitung setiap fungsi yang dapat dihitung dengan pengkodean input yang sesuai, tetapi tidak relevan di sini). Perhatikan juga bahwa set instruksi sedikit berbeda dari yang ada di artikel Wikipedia.
Tantangan
Tulis program 2CM terpendek, yang menghitung dan mencetak urutan collatz hingga 1 dan berhenti (register X awalnya berisi nilai awal n
dan register Y awalnya berisi 0). Perhatikan bahwa panjang program 2CM adalah jumlah instruksi yang digunakan (bukan panjang teks).
Misalnya, ketika mulai dari X = 3 harus dicetak: 3 10 5 16 8 4 2 1
dan HALT.
Jadi Anda dapat menggunakan bahasa favorit Anda untuk membangun simulator / juru bahasa 2CM, tetapi kode akhir (terpendek) yang Anda masukkan dalam jawaban harus dalam bahasa 2CM .