M → Kiat , 4 byte
Ṅ×ịß
Cobalah online!
TIO link menambahkan footer untuk memanggil fungsi dengan contoh program Tip yang ditampilkan pada halaman Esolang ("pembungkus otomatis" M untuk memanggil fungsi seolah-olah mereka program tidak dapat menangani angka-angka rasional atau titik tetap, atau setidaknya saya berlindung tidak tahu bagaimana cara mengatakannya, jadi saya perlu membuat fungsi menjadi program lengkap dengan tangan untuk dapat menjalankannya.)
Ini sebenarnya mencetak hasil debug berguna; program tidak dapat ditulis dalam 3 byte dalam M karena program yang terdiri dari tepat tiga diad memicu kasus khusus di parser, jadi saya harus menambahkan perintah tambahan untuk menghindari kasus khusus. Membuatnya Ṅ
(mencetak dengan baris baru) setidaknya memberinya tujuan yang bermanfaat.
ı
i=−1−−−√
Tidak menerapkan I / O (selain berhenti / tidak berhenti). I / O adalah ekstensi untuk Tip (bukan bagian dari bahasa itu sendiri), dan tidak diperlukan untuk kelengkapan Turing.
Penjelasan / latar belakang
Ṅ×ịß
Ṅ Print {the left argument} and a newline; also resolves a parser ambiguity
ị {The left argument}th element of {the right argument}, wrapping on OoB
× Multiply {the left argument} by {the chosen element}
ß Recursive call; arguments: {the product} and {the same right argument}
[1,2,3]
[1,2,3,1,2,3,1,2,3,…]
rx+s, yang merupakan polinomial, dan "konversi basis" yang dibangun oleh banyak bahasa golf sebenarnya adalah penilai polinom tujuan umum yang menyamar. Jadi yang harus kita lakukan adalah mengindeks ke daftar daftar digit, basis-konversi mereka, dan kita selesai, kan?
xx
ḅ
x⊕(x⊗y)x⊗y⊕. Tentu, kita bisa mengganti perilaku rantai ke hampir semua yang kita inginkan, tapi itu akan menghabiskan seluruh byte, dan entri bahasa golf untuk pertanyaan ini menjadi sangat singkat sehingga satu byte sangat banyak.
Jadi saya melihat ke belakang dan mengevaluasi kembali sedikit. Apakah ada operasi yang dapat kita gunakan daripada evaluasi polinomial? Idealnya, yang komutatif, jadi kita tidak perlu khawatir tentang urutan argumen? Segera setelah itu, saya menyadari bahwa fungsi Collatz lebih kompleks daripada yang seharusnya.
s
Dan tentu saja, tidak seperti konversi basis ( ḅ
), multiplikasi ( ×
) bersifat komutatif, dan dengan demikian tidak masalah urutan urutan argumen. Jadi yang perlu kita tulis adalah ×ị
, dan kemudian menempatkan program ke dalam rekursi tak terbatas dengan ß
, dan kami memiliki bahasa lengkap Turing. Kanan?
(x⊙y)⊕(x⊗y)¹×ịß
¹
¹
Ṅ
adalah pilihan yang baik karena menghasilkan keluaran debug yang bermanfaat.
Apakah tiga byte mungkin? Kecuali saya kehilangan sesuatu, tidak dengan pilihan implementasi dan implementasi bahasa yang spesifik ini, tetapi pada titik ini sepertinya sepertinya mungkin, karena ada begitu banyak cara untuk melakukannya dalam empat dan begitu banyak Turing-complete bahasa yang bisa Anda terapkan.
eval
solusi sepele .