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 aabb
dapat disingkat menjadi bc
dengan mengganti 2 contoh surat dengan yang lebih tinggi.
Tambahan
Anda baru saja menggabungkan dua angka dan menyederhanakan.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
pada basis 10
Pengurangan
Hapus saja semua digit yang tampak sama di kedua bagian pengurangan. Perluasan (konversi b
ke 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 acd
secara vertikal:
a
c
d
Kemudian Anda tambahkan def
setelah yang pertama a
:
a def
c
d
Sekarang, c adalah 2 posisi kemudian dalam abjad dari, jadi kita tambahkan 2 posisi dalam alfabet untuk def
untuk 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 fgh
untuk 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 ef
di baris pertama. Itu karena bc
dimulai dengan b
, dan b
merupakan huruf kedua dalam alfabet, jadi kita perlu beralih de
dengan 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
,*
danbd
untukab * bd
. - Alfabet bahasa Inggris digunakan (
abcdefghijklmnopqrstuvwxyz
) - Output Anda harus disederhanakan (
aa
tidak diizinkan,b
diperlukan) - Input akan disederhanakan (
b
+c
, bukanaa
+bb
atauaa
+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==efgh
tapi efgh
ini 240
tidak144
bc*de
seharusnyaeh
d is 2 positions later in the alphabet than c
apakah ini wright? bukankah seharusnya begitu1
?That is added to the second row.
pada kalimat yang sama, bukankah begituthird
?