Dari artikel Wikipedia :
Aritmatika lokasi (Latin arithmeticæ localis) adalah sistem angka biner aditif (non-posisional), yang dieksplorasi John Napier sebagai teknik perhitungan dalam risalahnya Rabdology (1617), baik secara simbolis maupun pada kotak seperti papan catur.
Apa?
Angka lokasi adalah cara penulisan angka menggunakan huruf alfabet.
Notasi biner belum distandarisasi, sehingga Napier menggunakan apa yang disebutnya angka lokasi untuk mewakili angka biner. Sistem Napier menggunakan notasi nilai-tanda untuk mewakili angka; menggunakan huruf berturut-turut dari alfabet Inggris untuk mewakili kekuatan dua: berturut-turut: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 dan seterusnya.
Sebuah contoh
ab = 1 + 2 = 3 pada basis 10
aabb = 1 + 1 + 2 + 2 = 6 di basis 10
Catatan yang aabbdapat disingkat menjadi bcdengan mengganti 2 contoh surat dengan yang lebih tinggi.
Tambahan
Anda baru saja menggabungkan dua angka dan menyederhanakan.
acd+ bde= acdbde= abcdde= acebe= abcf= 39pada basis 10
Pengurangan
Hapus saja semua digit yang tampak sama di kedua bagian pengurangan. Perluasan (konversi bke aa) mungkin diperlukan
abde- ad= be= 18 dalam basis 10
Perkalian
Ini agak sulit.
Katakanlah kita ingin mengalikan acd(13) dengan def(56). Pertama Anda mengatur acdsecara vertikal:
a
c
d
Kemudian Anda tambahkan defsetelah yang pertama a:
a def
c
d
Sekarang, c adalah 2 posisi kemudian dalam abjad dari, jadi kita tambahkan 2 posisi dalam alfabet untuk defuntuk membuat fgh. Itu ditambahkan ke baris kedua.
a def
c fgh
d
Terakhir, d adalah 1 posisi kemudian dalam alfabet dari c, jadi kami menambahkan 1 posisi dalam alfabet fghuntuk dibuat ghi. Itu ditambahkan ke baris ketiga.
a def
c fgh
d ghi
Kemudian Anda mengambil jumlah dari kanan: def+ fgh+ ghi= deffgghhi= deggghhi= deghhhi= deghii= deghj(728)
Contoh lain dari perkalian
Memasukkan:
bc * de
Pertama:
b
c
Kemudian
b ef
c
Kemudian
b ef
c fg
Perhatikan bahwa kami menulis efdi baris pertama. Itu karena bcdimulai dengan b, dan bmerupakan huruf kedua dalam alfabet, jadi kita perlu beralih dedengan 1 huruf, jadi itu menjadi ef.
Kemudian
ef+fg
Keluaran:
eh
Divisi
Ini bukan bagian dari tantangan ini, karena ini bisa menjadi sangat kompleks.
Tantangan Anda yang sebenarnya
Program atau fungsi Anda harus mengambil input sebagai string yang terlihat seperti ini:
a + b
Dan Anda harus menampilkan:
ab
Tentu saja, program atau fungsi harus mendukung nomor panjang sewenang-wenang (sampai string atau masukan batas bahasa Anda) dengan salah satu operator +, -atau *. Beberapa contoh lagi:
Memasukkan:
ab + bd
Keluaran:
acd
Memasukkan:
d - ab
Keluaran:
ac
Memasukkan:
ab * cd
Keluaran:
cf
Catatan:
- Urutan huruf dalam output tidak masalah, tetapi Anda selalu dapat mengasumsikan bahwa urutan huruf dalam angka dalam input akan naik (sebelum z).
- Anda dapat mengambil input dengan trailing newline dan output dengan trailing newline.
- Anda mungkin tidak mengambil input sebagai daftar
ab,*danbduntukab * bd. - Alfabet bahasa Inggris digunakan (
abcdefghijklmnopqrstuvwxyz) - Output Anda harus disederhanakan (
aatidak diizinkan,bdiperlukan) - Input akan disederhanakan (
b+c, bukanaa+bbatauaa+aaaa) - Anda mungkin memerlukan ruang sebelum dan operator (
+,-, atau*), atau Anda mungkin memerlukan ada menjadi tidak ada. - Hanya akan ada satu operator per input.
- Anda dapat berasumsi bahwa output dan input tidak akan pernah melebihi 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz) - Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
bc*de==efghtapi efghini 240tidak144
bc*deseharusnyaeh
d is 2 positions later in the alphabet than capakah ini wright? bukankah seharusnya begitu1?That is added to the second row.pada kalimat yang sama, bukankah begituthird?