Từ bài viết Wikipedia :
Số học vị trí (số học Latinhæ localis) là hệ thống số nhị phân phụ gia (không theo vị trí), mà John Napier đã khám phá như một kỹ thuật tính toán trong chuyên luận Rabdology (1617), cả về mặt tượng trưng và trên lưới giống như bàn cờ.
Gì?
Chữ số vị trí là một cách viết số bằng cách sử dụng các chữ cái của bảng chữ cái.
Ký hiệu nhị phân chưa được chuẩn hóa, vì vậy Napier đã sử dụng cái mà ông gọi là số vị trí để biểu thị số nhị phân. Hệ thống của Napier sử dụng ký hiệu giá trị ký hiệu để thể hiện các con số; nó sử dụng các chữ cái liên tiếp từ bảng chữ cái tiếng Anh để thể hiện sức mạnh liên tiếp của hai: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16 và cứ thế.
Một ví dụ
ab
= 1 + 2 = 3 trong cơ sở 10
aabb
= 1 + 1 + 2 + 2 = 6 trong cơ sở 10
Lưu ý rằng aabb
có thể rút ngắn bc
bằng cách thay thế bất kỳ 2 trường hợp nào của một chữ cái bằng một chữ cái cao hơn.
Thêm vào
Bạn chỉ cần nối hai số và đơn giản hóa.
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
trong cơ sở 10
Phép trừ
Chỉ cần loại bỏ tất cả các chữ số xuất hiện như nhau trong cả hai phần của phép trừ. Mở rộng (chuyển đổi b
thành aa
) có thể cần thiết
abde
- ad
= be
= 18 trong cơ sở 10
Phép nhân
Cái này khó hơn một chút.
Hãy nói rằng chúng tôi muốn nhân acd
(13) với def
(56). Đầu tiên bạn sắp xếp acd
theo chiều dọc:
a
c
d
Sau đó, bạn thêm def
sau đầu tiên a
:
a def
c
d
Bây giờ, c là 2 vị trí sau trong bảng chữ cái hơn a, vì vậy chúng tôi thêm 2 vị trí trong bảng chữ cái def
để thực hiện fgh
. Điều đó được thêm vào hàng thứ hai.
a def
c fgh
d
Cuối cùng, d là 1 vị trí sau trong bảng chữ cái so với c, vì vậy chúng tôi thêm 1 vị trí trong bảng chữ cái fgh
để thực hiện ghi
. Điều đó được thêm vào hàng thứ ba.
a def
c fgh
d ghi
Sau đó, bạn lấy tổng của quyền: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
= deghj
(728)
Một ví dụ khác về phép nhân
Đầu vào:
bc * de
Đầu tiên:
b
c
Sau đó
b ef
c
Sau đó
b ef
c fg
Lưu ý rằng chúng tôi đã viết xuống ef
dòng đầu tiên. Đó là bởi vì bc
bắt đầu bằng b
, và b
là chữ cái thứ hai trong bảng chữ cái, vì vậy chúng ta cần thay đổi de
1 chữ cái, để nó trở thành ef
.
Sau đó
ef+fg
Đầu ra:
eh
Bộ phận
Đây không phải là một phần của thử thách này, vì nó có thể trở nên rất phức tạp.
Thử thách thực tế của bạn
Chương trình hoặc chức năng của bạn phải lấy đầu vào là một chuỗi trông như thế này:
a + b
Và bạn phải xuất ra:
ab
Tất nhiên, chương trình hoặc chức năng của bạn phải hỗ trợ số chiều dài tùy ý (lên đến chuỗi hoặc đầu vào giới hạn của ngôn ngữ của bạn) với bất kỳ của các nhà khai thác +
, -
hoặc *
. Một số ví dụ khác:
Đầu vào:
ab + bd
Đầu ra:
acd
Đầu vào:
d - ab
Đầu ra:
ac
Đầu vào:
ab * cd
Đầu ra:
cf
Ghi chú:
- Thứ tự các chữ cái trong đầu ra không quan trọng, nhưng bạn luôn có thể giả định rằng thứ tự các chữ cái trong các số trong đầu vào sẽ tăng dần (a trước z).
- Bạn có thể nhận đầu vào với một dòng mới và đầu ra với một dòng mới.
- Bạn có thể không nhận các thiết bị như một danh sách
ab
,*
vàbd
choab * bd
. - Bảng chữ cái tiếng Anh được sử dụng (
abcdefghijklmnopqrstuvwxyz
) - Đầu ra của bạn phải được đơn giản hóa (
aa
không được phép,b
là bắt buộc) - Đầu vào sẽ được đơn giản hóa (
b
+c
, không phảiaa
+bb
hoặcaa
+aaaa
) - Bạn có thể yêu cầu một không gian trước và các nhà điều hành (
+
,-
hay*
), hoặc bạn có thể yêu cầu có được không. - Sẽ chỉ có một toán tử cho mỗi đầu vào.
- Bạn có thể cho rằng đầu ra và đầu vào sẽ không bao giờ vượt quá 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!
bc*de==efgh
nhưng efgh
là 240
không144
bc*de
nên làeh
d is 2 positions later in the alphabet than c
cái này có ổn không? không nên nó được1
?That is added to the second row.
trong cùng một câu, không nênthird
?