Tantangan:
Ada teka-teki konyol yang beredar di jejaring sosial yang berbunyi:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Menerapkan fungsi atau operator yang, ketika diberi dua angka bilangan bulat positif xdan ysedemikian rupa x > y > 0, menghasilkan jawaban yang benar sebagai bilangan bulat , di mana digit jawaban adalah digit x * ydiikuti oleh digit x + ydiikuti oleh digit x - y. Sangat sederhana.
Aturan:
- Celah standar tidak diijinkan.
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang.
- Validasi data input tidak diperlukan. Program ini dapat macet atau mengembalikan sampah saat diberikan input yang tidak valid.
- Anda diperbolehkan menggunakan fungsi numerik dan operator (termasuk integer dan floating point, fungsi perpustakaan matematika, dan fungsi lain yang menerima dan mengembalikan angka).
- Anda diizinkan menggunakan fungsi yang mengembalikan jumlah digit suatu angka, jika berlaku.
- Anda tidak diizinkan menggunakan string atau jenis penggabungan apa pun di dalam kode Anda.
- Hasilnya dapat dikembalikan atau didorong ke tumpukan, mana yang berlaku dalam bahasa. Hasilnya harus berupa bilangan bulat, bukan string.
Kode sampel:
Kode berikut membuat operator diad bernama X.
X ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Penjelasan:
Di APL, Anda mengevaluasi dari kanan ke kiri.
⍺ and ⍵adalah operan kiri dan kanan, masing-masing⌊10⍟⍺-⍵berbunyi:floor of log10(⍺-⍵). Pertama melakukan substraksi kemudian logaritma kemudian lantai. Dari kanan ke kiri. log10 dilakukan untuk menghitung digit⍺-⍵(Anda harus menjumlahkan 1 setelahnya).⍺×⍵×10*(...)berbunyi:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺Karenanya,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵adalah produk, bergeser ke kiri dengan jumlah jumlah digit dan perbedaan. Mengalikan dengan kekuatan 10 akan menggeser bilangan bulat ke kiri.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)adalah jumlah, bergeser ke kiri dengan jumlah digit perbedaan.(⍺-⍵)bedanya. Tidak ada pergeseran diperlukan di sini.X←{...}adalah cara Anda mendefinisikan operator di APL.
Contoh:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Kode berikut membuat makro bernama a:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Penjelasan:
sxdansypop elemen dari tumpukan dan simpan di registerxdany, masing-masing.lxdanlymemuat elemen dari registerxdanymasing-masing dan mendorongnya ke tumpukan.dmenduplikasi elemen terakhir di stack.^menghitung kekuatan dua angka.Zmuncul nomor dan mengembalikan jumlah digitnya. Ini dilakukan karenadctidak memiliki fungsi logaritma.[...]samenyimpan makro dalam registera.lamemuatnya.xmengeksekusi makro di bagian atas tumpukan.
Contoh:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153