จากบทความ 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,*และสำหรับbdab * 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?