Ada cara yang bagus untuk melakukan perkalian panjang untuk dua bilangan bulat tanpa harus melakukan apa pun selain menghitung, yang sesekali dibagikan di internet. Anda menulis digit setiap angka sebagai sekelompok garis miring, dengan dua angka pada sudut 90 derajat. Kemudian Anda bisa menghitung simpang pada kolom terpisah yang muncul. Diagram mungkin akan memperjelas hal ini. Berikut ini contoh untuk menghitung 21 * 32
:
Jika Anda mencari "perkalian panjang visual / grafis", Anda akan menemukan lebih banyak contoh.
Dalam tantangan ini, Anda harus membuat diagram ini menggunakan seni ASCII. Untuk contoh yang sama, hasilnya akan terlihat seperti ini:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
Mungkin paling mudah untuk mengetahui aturan konstruksi untuk ini dari beberapa contoh (lihat di bawah), tetapi di sini beberapa detail:
- Segmen berpotongan adalah
X
, segmen non-garis berpotongan adalah/
atau\
. - Harus ada tepat satu segmen setelah persimpangan terluar.
- Harus ada tepat satu segmen antara persimpangan yang memiliki digit berbeda. Jika ada nol digit, ini akan menghasilkan berturut
/
- turut atau\
segmen. - Anda harus mendukung input positif apa pun (setidaknya hingga batas yang masuk akal seperti 2 16 atau 2 32 ), dan angka apa pun dari
0
hingga9
. Namun, Anda dapat berasumsi bahwa tidak ada yang memimpin maupun yang tertinggal0
. - Anda tidak boleh mencetak spasi putih terkemuka di luar angkasa atau memimpin atau mengikuti garis kosong.
- Anda dapat mencetak trailing whitespace tetapi tidak boleh melebihi kotak bounded aligned diagram.
- Anda dapat secara opsional mencetak satu baris baru.
- Anda dapat memilih dalam urutan mana Anda mengambil dua nomor input. Namun, Anda harus mendukung angka sembarang untuk salah satu orientasi, sehingga Anda tidak dapat memilih sesuatu seperti "Jumlah yang lebih besar diberikan terlebih dahulu".
- Jika Anda mengambil input sebagai string, Anda dapat menggunakan pemisah non-digit di antara kedua angka tersebut.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Ini adalah kode golf, jawaban terpendek (dalam byte) menang.
Contohnya
1*1
\ /
X
/ \
2*61
\ /
\ X /
X X /
/ X X /
/ X X /
/ X X /
/ X X
/ X \ /
/ \ X
X \
/ \
45*1
\ /
\ X
\ X \
\ X \
\ X \
X \
\ / \
\ X
\ X \
\ X \
X \
/ \
21001*209
\ /
X /
/ X
/ / \
\ / / \ /
X / X /
\ / X / X /
\ X / \ / / X /
X X \ / / / X /
/ X \ X / / / X /
/ \ \ / X / / / X /
\ X / X / / / X /
X X / X / / / X /
/ X X / X / / / X
/ X X / X / / / \
/ X X / X / /
/ X X / X /
/ X X / X
/ X X / \
/ X X
/ X \
/ \