จากบทความ Wikipedia :
Location arithmetic (Latin arithmeticæ localis) เป็นระบบเลขฐานสองแบบเสริม (ไม่ใช่ตำแหน่ง) ซึ่ง John Napier สำรวจเป็นเทคนิคการคำนวณในตำราของเขา Rabdology (1617) ทั้งเป็นสัญลักษณ์และบนตารางคล้ายกระดานหมากรุก
อะไร?
ตัวเลขสถานที่ตั้งเป็นวิธีการเขียนตัวเลขโดยใช้ตัวอักษรของตัวอักษร
สัญกรณ์ไบนารียังไม่ได้มาตรฐานดังนั้นเนเปียร์จึงใช้สิ่งที่เขาเรียกว่าเลขที่ตั้งเพื่อแทนเลขฐานสอง ระบบของเนเปียร์ใช้สัญกรณ์ค่าสัญญาณเพื่อแสดงตัวเลข มันใช้ตัวอักษรต่อเนื่องจากตัวอักษรภาษาอังกฤษเพื่อเป็นตัวแทนของพลังต่อเนื่องของสอง: a = 2 ^ 0 = 1, b = 2 ^ 1 = 2, c = 2 ^ 2 = 4, d = 2 ^ 3 = 8, e = 2 ^ 4 = 16และอื่น ๆ
ตัวอย่าง
ab
= 1 + 2 = 3 ในฐาน 10
aabb
= 1 + 1 + 2 + 2 = 6 ในฐาน 10
โปรดทราบว่าaabb
สามารถย่อให้สั้นลงได้bc
โดยแทนที่ตัวอักษรใด ๆ 2 ตัวด้วยตัวอักษรที่สูงกว่า
การเพิ่ม
คุณแค่ต่อตัวเลขสองตัวเข้าด้วยกันแล้วทำให้มันง่ายขึ้น
acd
+ bde
= acdbde
= abcdde
= acebe
= abcf
= 39
ในฐาน 10
การลบ
เพียงลบตัวเลขทั้งหมดที่ปรากฏอย่างเท่าเทียมกันในทั้งสองส่วนของการลบ อาจจำเป็นต้องขยาย (แปลงb
เป็นaa
)
abde
- ad
= be
= 18 ในฐาน 10
การคูณ
มันยากกว่านี้อีกเล็กน้อย
ให้บอกว่าเราต้องการคูณacd
(13) ด้วยdef
(56) ก่อนอื่นให้คุณจัดเรียงacd
แนวตั้ง:
a
c
d
จากนั้นคุณเพิ่มdef
หลังจากแรกa
:
a def
c
d
ตอนนี้ c คือ 2 ตำแหน่งต่อไปในตัวอักษรกว่าดังนั้นเราจึงเพิ่ม 2 ตำแหน่งในตัวอักษรเพื่อที่จะทำให้def
fgh
ที่ถูกเพิ่มเข้าไปในแถวที่สอง
a def
c fgh
d
สุดท้าย d เป็น 1 ตำแหน่งต่อมาในตัวอักษรกว่า C เพื่อให้เราเพิ่ม 1 ตำแหน่งในตัวอักษรเพื่อที่จะทำให้fgh
ghi
ที่ถูกเพิ่มเข้าไปในแถวที่สาม
a def
c fgh
d ghi
จากนั้นคุณหาผลรวมของสิทธิ: def
+ fgh
+ ghi
= deffgghhi
= deggghhi
= deghhhi
= deghii
= deghj
(728)
อีกตัวอย่างของการคูณ
การป้อนข้อมูล:
bc * de
ครั้งแรก:
b
c
แล้วก็
b ef
c
แล้วก็
b ef
c fg
โปรดทราบว่าเราเขียนลงef
ในบรรทัดแรก นั่นเป็นเพราะbc
เริ่มต้นด้วยb
และb
เป็นจดหมายฉบับที่สองในตัวอักษรดังนั้นเราจึงจำเป็นที่จะเปลี่ยนde
จาก 1 ef
ตัวอักษรดังนั้นมันจะกลายเป็น
แล้วก็
ef+fg
เอาท์พุท:
eh
แผนก
นี่ไม่ใช่ส่วนหนึ่งของความท้าทายนี้เพราะมันซับซ้อนมาก
ความท้าทายที่แท้จริงของคุณ
โปรแกรมหรือฟังก์ชั่นของคุณจะต้องป้อนข้อมูลเป็นสตริงที่มีลักษณะดังนี้:
a + b
และคุณจะต้องส่งออก:
ab
แน่นอนโปรแกรมหรือการทำงานของคุณจะต้องสนับสนุนตัวเลขของความยาวโดยพลการ (ถึงสตริงหรือการป้อนขีด จำกัด ของภาษาของคุณ) กับใด ๆ ของผู้ประกอบการ+
, หรือ-
*
ตัวอย่างเพิ่มเติม:
การป้อนข้อมูล:
ab + bd
เอาท์พุท:
acd
การป้อนข้อมูล:
d - ab
เอาท์พุท:
ac
การป้อนข้อมูล:
ab * cd
เอาท์พุท:
cf
หมายเหตุ:
- ลำดับของตัวอักษรในเอาต์พุตไม่สำคัญ แต่คุณสามารถสันนิษฐานได้ว่าลำดับของตัวอักษรในตัวเลขในอินพุตจะเพิ่มขึ้น (a before z)
- คุณสามารถรับอินพุตด้วยการขึ้นบรรทัดใหม่และส่งออกด้วยการขึ้นบรรทัดใหม่
- คุณอาจจะไม่ได้ใช้การป้อนข้อมูลเป็นรายการของ
ab
,*
และสำหรับbd
ab * bd
- ใช้ตัวอักษรภาษาอังกฤษ (
abcdefghijklmnopqrstuvwxyz
) - ผลลัพธ์ของคุณจะต้องง่ายขึ้น (
aa
ไม่อนุญาตb
เป็นสิ่งจำเป็น) - อินพุตจะถูกทำให้ง่ายขึ้น (
b
+c
, ไม่ใช่aa
+bb
หรือaa
+aaaa
) - คุณอาจจะต้องใช้พื้นที่ก่อนและผู้ประกอบการ (ก
+
,-
หรือ*
) หรือคุณอาจจำเป็นต้องที่จะมีใคร - จะมีเพียงหนึ่งโอเปอเรเตอร์ต่อหนึ่งอินพุต
- คุณอาจคิดว่าเอาต์พุตและอินพุตจะไม่เกิน 2 ^ 27-1 (
abcdefghijklmnopqrstuvwxyz
) - นี่คือโค้ดกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!
bc*de==efgh
แต่efgh
เป็น240
ไม่ได้144
bc*de
ควรเป็นeh
d is 2 positions later in the alphabet than c
ช่างนี่เหรอ? มันไม่ควรจะเป็น1
?That is added to the second row.
ในประโยคเดียวกันมันไม่ควรจะเป็นthird
?