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 x
dan y
sedemikian rupa x > y > 0
, menghasilkan jawaban yang benar sebagai bilangan bulat , di mana digit jawaban adalah digit x * y
diikuti oleh digit x + y
diikuti 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:
sx
dansy
pop elemen dari tumpukan dan simpan di registerx
dany
, masing-masing.lx
danly
memuat elemen dari registerx
dany
masing-masing dan mendorongnya ke tumpukan.d
menduplikasi elemen terakhir di stack.^
menghitung kekuatan dua angka.Z
muncul nomor dan mengembalikan jumlah digitnya. Ini dilakukan karenadc
tidak memiliki fungsi logaritma.[...]sa
menyimpan makro dalam registera
.la
memuatnya.x
mengeksekusi makro di bagian atas tumpukan.
Contoh:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153