คุณล็อคจักรยานของคุณด้วยรหัสล็อค 3 หลัก ตอนนี้คุณต้องการไปนั่งและต้องปลดล็อคด้วยความช่วยเหลือของโปรแกรมต่อไปนี้
อินพุต
พารามิเตอร์ที่ 1
การรวมกันของล็อคของคุณอยู่ในสถานะล็อค มันจะต้องแตกต่างจากพารามิเตอร์ที่ 2 (= การรวมกันของสถานะปลดล็อค ) (หรืออาจถูกขโมยจักรยานของคุณ!)
ช่วง 000..999 ต้องไม่ละเว้นศูนย์นำหน้า
พารามิเตอร์ที่ 2
การรวมกันของล็อคของคุณอยู่ในสถานะปลดล็อค ค่านี้เป็นเป้าหมายของคุณ
ช่วง 000..999 ต้องไม่ละเว้นศูนย์นำหน้า
เอาท์พุต
รายการของแต่ละรัฐของการรวมกันล็อคหลังจากแต่ละ "การหมุน" รวมถึงสถานะเริ่มต้น (ซึ่งมักจะเป็นพารามิเตอร์ที่ 1) และขั้นตอนสุดท้าย (ซึ่งมักจะเป็นพารามิเตอร์ที่ 2)
ขั้นตอนวิธี
คุณเริ่ม "หมุน" หลักแรกทีละหนึ่งจนกว่าคุณจะถึงตัวเลขที่ถูกต้องในสถานะปลดล็อค แต่เพราะคุณอยู่ในความรู้เกี่ยวกับการปลดล็อครหัสทั้งคุณหมุนหลักในทิศทางที่คุณต้องมีจำนวนน้อยที่สุดของการหมุนไปถึงหลักในการปลดล็อครัฐ ในกรณีที่เสมอกันคุณสามารถเลือกทิศทางใดก็ได้ที่คุณต้องการ
เมื่อคุณถึงหลักแรกที่ถูกต้องคุณจะเริ่มขั้นตอนเดียวกันกับที่ 2 และจากนั้นด้วย 3
ลำดับของตัวเลขคือการเข้าใจว่าเป็นวงกลม:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
ซึ่งหมายความว่าปริมาณการหมุนที่น้อยที่สุดจาก 1 ถึง 9 ไม่ใช่
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
แต่
1 -> 0 -> 9
= 2
หมายเหตุ
- คุณสามารถพึ่งพากฎ I / O เริ่มต้น
- คุณสามารถเปลี่ยนลำดับของพารามิเตอร์
ตัวอย่าง
ตัวอย่างที่ 1 ถูกต้อง
Input: 999 001
Output:
999
099
009
000
001
ตัวอย่างที่ 2 ถูกต้อง
Input: 000 292
Output:
000
100
200
290
291
292
ตัวอย่างที่ 3 ผิดพลาด
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
ตัวอย่างที่ 4 การป้อนข้อมูลผิด
Input: 1 212 // Wrong because no leading zeros.
นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดชนะ