ในเกมซูเปอร์มาริโอที่หลากหลายเปลือกหอยสีเขียวและสีแดงของ Koopa Troopaสามารถเลื่อนลงบนพื้นผิวเรียบได้อย่างไม่น่าเชื่อและทำลายบล็อกอิฐที่ขวางทาง เมื่อกระสุนกระทบกับบล็อกอิฐบล็อกจะแตกตัวกลายเป็นพื้นที่ว่างเปล่าและกระสุน Koopa กลับทิศทาง เป็นตัวอย่างที่ดูเปลือกสีแดงที่นี่
สมมติว่าระดับซูเปอร์มาริโอนั้นสูงเพียงหนึ่งบล็อกและเซลล์กริดทุกเซลล์เป็นอิฐหรือพื้นที่ว่างยกเว้นเซลล์ที่อยู่ด้านซ้ายสุดที่มีกระสุนเคลื่อนที่ไปทางขวา ระดับยังเป็นระยะดังนั้นหากเชลล์ออกจากขอบขวาหรือซ้ายของระดับมันจะกลับเข้าสู่ฝั่งตรงข้าม ในสถานการณ์เช่นนี้เปลือกจะยังคงกระเด็นและทำลายบล็อกอิฐทั้งหมดในระดับจนกว่าจะไม่มีอีกต่อไป เปลือกจะเดินทางไกลแค่ไหนหลังจากที่บล็อกอิฐก้อนสุดท้ายแตก?
ท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในจำนวนเต็มทศนิยมที่ไม่เป็นลบ หมายเลขนี้ซึ่งแสดงในรูปแบบไบนารีโดยไม่มีศูนย์นำหน้า (ข้อยกเว้นเพียงอย่างเดียวคือ 0 เอง) เข้ารหัสเค้าโครงเลย์เอาต์ระดับสูงหนึ่งบล็อก A 1
คือบล็อกอิฐและ a 0
คือพื้นที่ว่าง
Koopa Shell ถูกแทรกที่ขอบด้านซ้ายของระดับและเริ่มขยับไปทางขวา ตัวอย่างเช่นระดับที่เกี่ยวข้องกับการป้อนข้อมูล39
คือ
>100111
เพราะ100111
เป็น 39 ในไบนารี่และ>
และ<
เป็นตัวแทนของเชลล์ที่เคลื่อนที่ทั้งซ้ายและขวาตามลำดับ
คุณต้องพิมพ์หรือคืนค่าระยะทางทั้งหมดที่กระสุนเดินทางเมื่อเปลือกอิฐก้อนสุดท้าย (อาคา1
) แตกหัก
ผลลัพธ์สำหรับ39
คือ7
และการเปลี่ยนแปลงในระดับมีลักษณะดังนี้:
Level Cumulative Distance
>100111 0
<000111 0
>000110 0
0>00110 1
00>0110 2
000>110 3
000<010 3
00<0010 4
0<00010 5
<000010 6
000001< 7
000000> 7 <-- output
ในทำนองเดียวกันผลลัพธ์สำหรับ6
คือ1
:
Level Cumulative Distance
>110 0
<010 0
001< 1
000> 1 <-- output
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
สำหรับการอ้างอิงต่อไปนี้เป็นผลลัพธ์สำหรับอินพุต0
ไปยัง20
:
0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 0
9 0
10 1
11 2
12 2
13 1
14 3
15 3
16 0
17 0
18 1
19 3
20 2