Latar Belakang
Banyak bahasa pemrograman esoterik tidak memiliki angka bawaan pada literal, jadi Anda harus menghitungnya saat runtime; dan dalam banyak kasus ini, representasi angka bisa sangat menarik. Kami sudah memiliki tantangan tentang mewakili angka untuk Underload. Tantangan ini adalah tentang mewakili angka dalam SNUSP Modular . (Perhatikan bahwa Anda tidak perlu mempelajari SNUSP untuk menyelesaikan tantangan ini - semua informasi yang Anda butuhkan ada dalam spesifikasi - tetapi Anda mungkin menemukan latar belakangnya menarik.)
Tugas
Untuk tujuan tantangan ini, nomor SNUSP Modular adalah string yang terbentuk dari karakter @,, +dan =, kecuali bahwa karakter terakhir adalah a #, dan bahwa karakter kedua dari belakang harus +atau =(tidak mungkin @). Misalnya, nomor yang valid termasuk @+#, ==#dan @@+@=#; contoh nomor yang tidak valid termasuk +=, @@#, dan +?+#.
Nilai nomor SNUSP Modular dihitung secara rekursif sebagai berikut:
#memiliki nilai 0 (ini adalah kasus dasar).- Jika angka memiliki bentuk
=x, untuk string apa punx, nilainya sama dengan nilaix. - Jika angka memiliki bentuk
+x, untuk string apa punx, nilainya sama dengan nilaix, ditambah 1. - Jika angka memiliki bentuk
@cx, untuk karakter tunggalcdan string apa punx, nilainya sama dengan nilaix, ditambah nilaicx.
Untuk tantangan ini, Anda harus menulis sebuah program yang mengambil bilangan bulat non-negatif sebagai input, dan menghasilkan string yang merupakan nomor SNUSP Modular tersingkat yang memiliki nilai sama dengan input.
Klarifikasi
- Sangat mungkin bahwa akan ada lebih dari satu string dengan nilai yang sama, dan khususnya, untuk beberapa bilangan bulat akan ada ikatan untuk nomor SNUSP Modular terpendek dengan nilai itu. Dalam kasus seperti itu, Anda dapat menampilkan nomor apa pun yang terkait dengan seri.
- Tidak ada batasan pada algoritma yang Anda gunakan untuk menemukan nomornya; misalnya, string kasar dan mengevaluasinya adalah taktik hukum, tetapi begitu juga melakukan sesuatu yang lebih pintar untuk mengurangi ruang pencarian.
- Seperti biasa di PPCG, kiriman Anda bisa berupa program lengkap atau fungsi (pilih mana yang lebih ringkas dalam bahasa Anda).
- Ini bukan masalah tentang penanganan format input dan output, sehingga Anda dapat menggunakan cara apa pun yang masuk akal untuk memasukkan bilangan bulat negatif dan mengeluarkan string. Ada panduan lengkap tentang meta , tetapi metode hukum yang paling umum digunakan meliputi argumen fungsi / pengembalian, argumen baris perintah, dan input standar / output standar.
Uji kasus
Berikut adalah representasi terpendek dari beberapa angka pertama:
- 0 :
# - 1 :
+# - 2 :
++# - 3 :
+++#atau@++# - 4 :
++++#atau+@++#atau@=++# - 5 :
@+++#atau@@++# - 6 :
+@+++#atau+@@++#atau@=+++#atau@=@++#atau@@=++# - 7 :
@++++#atau@+@++# - 8 :
@@+++#atau@@@++# - 9 :
+@@+++#atau+@@@++#atau@+++++#atau@++@++#atau@+@=++#atau@@=+++#atau@@=@++# - 10 :
@=@+++#atau@=@@++#atau@@@=++#( ini adalah kasus uji yang cukup penting untuk diperiksa , karena semua jawaban yang mungkin termasuk=) - 11 :
@+@+++#atau@+@@++#atau@@++++#atau@@+@++# - 12 :
+@+@+++#atau+@+@@++#atau+@@++++#atau+@@+@++#atau@=+@+++#atau@=+@@++#atau@=@=+++#atau@=@=@++#atau@=@@=++#atau@@=++++#atau@@=+@++#atau@@=@=++# - 13 :
@@@+++#atau@@@@++# - 14 :
+@@@+++#atau+@@@@++#atau@=@++++#atau@=@+@++#atau@@+++++#atau@@++@++#atau@@+@=++# - 15 :
@+@++++#atau@+@+@++#atau@@=@+++#atau@@=@@++#atau@@@=+++#atau@@@=@++#
Sebagai kasus uji yang lebih besar, output dari input 40 harus @@@=@@+++#, @@@=@@@++#, @@@@=@+++#, atau @@@@=@@++#.
Kondisi kemenangan
Sebagai tantangan kode-golf , pemenangnya adalah entri terpendek, diukur dalam byte.
=hanya akan terjadi secara optimal@=, kan?