ด้วยความช่วยเหลือของคุณในการทำเครื่องหมายท้าทายอีเมลของฉัน PPCG-Post ได้ทำการประทับตราพัสดุทั้งหมดด้วยบาร์โค้ดที่สร้างเสร็จเรียบร้อยแล้ว!
ตอนนี้ถึงเวลาถอดรหัสพวกมันแล้ว
ในการท้าทายนี้โปรแกรมของคุณจะได้รับบาร์โค้ดที่สร้างจากMark My Mailความท้าทาย , ถอดรหัสและคืนค่าจำนวนเต็มที่เข้ารหัส
แต่ระวัง! บาร์โค้ดอาจคว่ำลง ...
บาร์โค้ด 4 สถานะ
ในกรณีที่คุณพลาดการท้าทายการเข้ารหัสคุณจะต้องรู้ว่าบาร์โค้ดประเภทใดที่เรากำลังพูดถึง บาร์โค้ด 4 สถานะคือแถวของแท่งที่มีสี่สถานะที่เป็นไปได้แต่ละอันแสดงจำนวนเต็มฐาน 4:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
แสดงผลใน ASCII บาร์โค้ดจะใช้ข้อความสามบรรทัดโดยใช้|
อักขระpipe ( ) เพื่อแสดงส่วนหนึ่งของบาร์และเว้นวรรค ( ) เพื่อแสดงส่วนที่ว่างเปล่า จะมีช่องว่างเดียวในแต่ละแถบ บาร์โค้ดตัวอย่างอาจมีลักษณะเช่นนี้:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
หากต้องการแปลงบาร์โค้ดกลับไปเป็นจำนวนเต็มจะเข้ารหัสแผนที่แต่ละแท่งให้ตรงกับตัวเลขฐาน 4 ที่สอดคล้องกันต่อกันและแปลงเป็นทศนิยม
เนื่องจากบาร์โค้ดแต่ละอันจะแสดงบาร์โค้ดที่แตกต่างกันเมื่อคว่ำเราใช้ลำดับการเริ่ม / หยุดเพื่อให้สามารถคำนวณค่าความเบี่ยงเบนได้ สำหรับจุดประสงค์ของการท้าทายนี้เราจะใช้ลำดับเริ่มต้น / หยุดที่ระบุโดย Australia Post: บาร์โค้ดแต่ละอันจะเริ่มต้นและสิ้นสุดด้วย1 0
ลำดับ
ความท้าทาย
งานของคุณคือเพื่อรับ ASCII 4 รัฐบาร์โค้ดแยกมันและกลับจำนวนเต็มมัน encodes - หลักหลังของมาร์คจดหมายของฉัน
แต่เพื่อทำให้สิ่งมีชีวิตชีวามีสิ่งที่จับได้ - บาร์โค้ดอาจถูกคว่ำ ในโลกแห่งความเป็นจริงมันจะถูกทิ้งไว้ที่เครื่องอ่านบาร์โค้ด (โปรแกรมของคุณ) เพื่อกำหนดทิศทางที่ถูกต้องโดยใช้ลำดับการเริ่ม / หยุด
ตัวอย่าง:
รับบาร์โค้ดต่อไปนี้:
| | | | | | | | | | | | | | | | | | | |
เราสามารถเห็นได้ชัดเจนว่าคู่แรกและครั้งสุดท้ายของตัวเลขที่เป็นและไม่ได้0, 2
1, 0
ซึ่งหมายความว่าบาร์โค้ดกลับหัว - เราต้องหมุนมัน 180 องศา (ไม่ใช่แค่พลิกแต่ละแท่ง) เพื่อให้ได้แนวที่ถูกต้อง:
| | | | | | | | | | | | | | | | | | | |
ตอนนี้เราสามารถเริ่มถอดรหัสได้ เราแมปแต่ละแถบกับตัวเลขฐาน 4 ที่สอดคล้องกันโดยไม่สนใจลำดับการเริ่ม / หยุดเนื่องจากไม่เข้ารหัสข้อมูล
| | | | | | | | | | | | | | | | | | | | - - 2 1 0 3 0 2 3 - -
เราต่อสิ่งนี้เข้ากับจำนวนเต็มฐาน 4 2103023
จากนั้นแปลงเป็นทศนิยมแทน9419
ผลลัพธ์สุดท้าย
กฎระเบียบ
- อินพุตจะเป็นบาร์โค้ด 4 สถานะที่ถูกต้องแสดงผลใน ASCII ตามที่กำหนดไว้ด้านบนพร้อมลำดับเริ่มต้น / หยุดที่อธิบายไว้
- คุณอาจร้องขอช่องว่างที่ลากหรือถอดสายรวมถึงการขึ้นบรรทัดใหม่ - รูปแบบใดที่เหมาะกับการเล่นกอล์ฟของคุณ
- อาจหรือไม่อยู่ในทิศทางที่ถูกต้อง - โปรแกรมของคุณต้องพิจารณาว่าจะอ่านกลับหัวโดยใช้ลำดับการเริ่ม / หยุด
- มันจะไม่เข้ารหัสเลขศูนย์นำหน้าในจำนวนเต็มฐาน 4
- คุณอาจรับอินพุตเป็นรายการของบรรทัดหรือสตริงที่มีบรรทัดใหม่
- ผลลัพธ์ควรเป็นจำนวนเต็มในฐานจำนวนเต็มมาตรฐานของภาษาของคุณซึ่งเป็นข้อมูลที่เข้ารหัสด้วยบาร์โค้ด
- เนื่องจากแสตมป์มีขนาดเล็กและสามารถใส่รหัสได้น้อยมากรหัสของคุณจะต้องสั้นที่สุดเท่าที่จะเป็นไปได้: นี่คือรหัสกอล์ฟ - ดังนั้นโปรแกรมที่สั้นที่สุด (เป็นไบต์) ชนะ!
กรณีทดสอบ
| | | | | | | | | | | | | |
= 4096 (พลิก)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 (พลิก)
| | | | | | | | | | | | | | | | | | | |
= 9419 (พลิก)
| | | | | | | | | | | | | | | | | | |
= 990 (ไม่พลิก)
| | | | | | | | | | | | | | | | | | |
= 12345 (ไม่พลิก)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
ที่ระบุว่า? String
จะเทียบเท่ากับ{#Char}