การมองหาค่าไบนารีที่พิมพ์เป็นวงรีและแท่งไม่ใช่เรื่องง่าย ... เพื่อช่วยในการนั้นคุณต้องเขียนฟังก์ชั่น (หรือโปรแกรม) ที่พิมพ์ตัวเลขในรูปแบบไบนารีที่กำหนดเอง
ดังนั้นฉันต้องการใช้ตัวเลขพูด 3 ( 00000011
) และเอาท์พุทบิตในรูปแบบที่ผู้ใช้กำหนดเช่นกับคู่ที่คั่นด้วยช่องว่าง:
00 00 00 11
หรือพูดในลำดับที่กลับกันและมีผู้ตกแต่งบางอย่างเช่น:
11_00_00_00
นอกจากนี้จะต้องมีความเป็นไปได้ที่จะแสดง '0' และ '1' เป็นอักขระที่กำหนดเองเพื่อแยกความแตกต่างได้ดีขึ้นเช่น:
XX oo oo oo
ดังนั้นความท้าทายคือการเขียนโค้ดที่ทำทุกอย่างตามข้อกำหนดต่อไปนี้
สเปค
ฟังก์ชั่นรับอินพุตดังนี้: f (A, mask, ศูนย์, อัน)
พารามิเตอร์:
เอ - จำนวนอินพุต - จำนวนเต็มใด ๆ (ไม่ได้ลงนาม) ในช่วง 0-255
mask - พารามิเตอร์สตริงที่กำหนดการสร้างเอาต์พุต
ศูนย์ - สตริงที่มีความยาวเท่ากันกำหนด glyphs 'ศูนย์' สำหรับแต่ละช่องเอาต์พุต
ตัว - สตริงที่มีความยาวเท่ากันกำหนดสัญลักษณ์หนึ่งอันสำหรับแต่ละช่องออก
กฎสำหรับการสร้างผลผลิต:
ดูภาพนี้พร้อมกับตัวอย่างอย่างใกล้ชิดเพื่อทำความเข้าใจวิธีสร้างผลลัพธ์:
ดังนั้นเพียงหลักเดียวในหน้ากากมีการแยกวิเคราะห์และถูกแทนที่ด้วยบิตของที่สอดคล้องกันตัวละครอื่น ๆ จะถูกทิ้งไว้ตามที่เป็นอยู่ เพิ่มเติมถ้าค่าของบิตที่นำมาเป็น 1 ก็จะปรากฏขึ้นในผลลัพธ์สุดท้ายเป็น "X" และถ้าเป็น 0 ก็จะปรากฏขึ้นเป็น "o" ในตัวอย่างข้างต้นบิตที่ถ่ายสี่บิตคือ "1" ดังนั้นเราจะเห็น "X" ในทุกช่อง
ถ้าจำนวนการป้อนข้อมูลที่เป็น 128 X foo bar ooo
แล้วเหตุผลการส่งออกจะเป็น อักขระในพารามิเตอร์ "ศูนย์" และ "คน": ตัวอักษร ASCII ที่พิมพ์ได้ใด ๆ ถือว่าพวกเขาอยู่ในแนวเดียวกันกับหน้ากาก
หมายเหตุ :
- บิตถูกทำดัชนี 0: บิตที่ 0 คือ MSB
- สมมติว่าตัวเลข 8,9 ไม่ได้รับอนุญาตในสตริงมาสก์
- อินพุตสตริงรวมถึงอักขระ ASCII ที่พิมพ์ได้
- 'ศูนย์' และ 'รายการ' ถูกจัดชิดกับหน้ากาก
- สำหรับอักขระพิเศษ / โมดิฟายเออร์ในภาษาของคุณ: เราสามารถสันนิษฐานได้ว่าพวกเขาจะไม่ปรากฏในสตริงอินพุต
สำหรับความคมชัดดูตัวอย่างเพิ่มเติม
อินพุต -> ตัวอย่างเอาต์พุต
เอาท์พุททั้งหมด 8 บิตในการสั่งซื้อร่วมกันด้วยตัวคั่นช่องว่างในสัญกรณ์วงรีและติดที่พบบ่อย:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
เอาท์พุทในลำดับที่ย้อนกลับในสัญกรณ์ dash-and-glyph:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
สัญกรณ์ที่หลากหลายในหนึ่งเอาต์พุตเช่นสำหรับข้อมูลที่บรรจุ:
mask = "0 | 123 4567"
zeros= " --- ----"
ones = "X kkk ssss"
A= 15 -> | --- ssss
A= 16 -> | --k ----
A= 32 -> | -k- ----
A= 128 -> X | --- ----
A= 255 -> X | kkk ssss
รูปแบบการทำซ้ำ:
mask = "| 7 66 555 4444 |"
zeros= " . .. ... .... "
ones = " 0 00 000 0000 "
A= 0 -> | . .. ... .... |
A= 1 -> | 0 .. ... .... |
A= 2 -> | . 00 ... .... |
A= 3 -> | 0 00 ... .... |
A= 4 -> | . .. 000 .... |
ปรับปรุง
กฎได้ง่ายขึ้นเล็กน้อย - โปรแกรมจะต้องพิมพ์หมายเลขหนึ่งเท่านั้น (ไม่ใช่อาร์เรย์ / รายการหมายเลขตามที่เสนอในตอนแรก)
A
ไม่เพราะมันจะเหมือนกันในทุกกรณีทดสอบ