ระยะแมนฮัตตันบนตารางปกติเป็นจำนวนขั้นตอนฉากหนึ่งที่ต้องใช้เวลาในการเข้าถึงเซลล์หนึ่งจากที่อื่น ขั้นตอนมุมฉากเป็นขั้นตอนที่ผ่านขอบของเซลล์กริด (ตรงข้ามกับมุมซึ่งจะทำให้เราระยะทาง Chebyshev )
เราสามารถกำหนดระยะทางที่ใกล้เคียงกันบนกริดอื่น ๆ เช่นตารางสามเหลี่ยม เราสามารถระบุที่อยู่ของแต่ละเซลล์ในตารางด้วยชุดรูปแบบการทำดัชนีต่อไปนี้โดยที่แต่ละเซลล์มีx,y
คู่:
____________________________________...
/\ /\ /\ /\ /\
/ \ 1,0/ \ 3,0/ \ 5,0/ \ 7,0/ \
/ 0,0\ / 2,0\ / 4,0\ / 6,0\ / 8,0\
/______\/______\/______\/______\/______\...
\ /\ /\ /\ /\ /
\ 0,1/ \ 2,1/ \ 4,1/ \ 6,1/ \ 8,1/
\ / 1,1\ / 3,1\ / 5,1\ / 7,1\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
/ \ 1,2/ \ 3,2/ \ 5,2/ \ 7,2/ \
/ 0,2\ / 2,2\ / 4,2\ / 6,2\ / 8,2\
/______\/______\/______\/______\/______\...
\ /\ /\ /\ /\ /
\ 0,3/ \ 2,3/ \ 4,3/ \ 6,3/ \ 8,3/
\ / 1,3\ / 3,3\ / 5,3\ / 7,3\ /
\/______\/______\/______\/______\/___...
/\ /\ /\ /\ /\
. . . . . . . . . .
. . . . . . . . . .
ทีนี้ระยะทางแมนฮัตตันบนกริดนี้เป็นจำนวนก้าวเล็ก ๆ ข้ามขอบเพื่อรับจากเซลล์หนึ่งไปอีกเซลล์หนึ่ง ดังนั้นคุณจึงสามารถย้ายจาก3,1
ไป2,1
, 4,1
หรือ3,2
แต่ไม่ถึงสามเหลี่ยมอื่น ๆ เนื่องจากผู้ที่จะข้ามจุดมากกว่าขอบ
ตัวอย่างเช่นระยะห่างจาก2,1
ถึง5,2
คือ4
เป็นโดยทั่วไปเส้นทางที่สั้นที่สุดนั้นไม่ซ้ำกัน แต่วิธีหนึ่งที่จะทำให้ระยะทางใน 4 ขั้นตอนคือ:
2,1 --> 3,1 --> 3,2 --> 4,2 --> 5,2
ความท้าทาย
รับสองคู่ประสานงานและx1,y1
x2,y2
จากโครงการที่อยู่ข้างต้นกลับระยะทางแมนฮัตตันระหว่างพวกเขา
คุณอาจสันนิษฐานว่าอินพุตทั้งสี่นั้นเป็นจำนวนเต็มไม่เป็นลบแต่ละตัวมีค่าน้อยกว่า 128 คุณสามารถรับได้ในลำดับใด ๆ และจัดกลุ่มตามอำเภอใจ (สี่อาร์กิวเมนต์แยกต่างหากรายการสี่จำนวนเต็มสองคู่จำนวนเต็ม 2x2 เมทริกซ์ .. .)
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและใช้วิธีการมาตรฐานใด ๆรับอินพุตและจัดเตรียมเอาต์พุต
คุณอาจใช้ภาษาการเขียนโปรแกรมใด ๆแต่โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ
กรณีทดสอบ
กรณีทดสอบแต่ละคนจะได้รับเป็นx1,y1 x2,y2 => result
1,2 1,2 => 0
0,1 1,1 => 1
1,0 1,1 => 3
2,1 5,2 => 4
0,0 0,127 => 253
0,0 127,0 => 127
0,0 127,127 => 254
0,127 127,0 => 254
0,127 127,127 => 127
127,0 127,127 => 255
75,7 69,2 => 11
47,58 36,79 => 42
77,9 111,23 => 48
123,100 111,60 => 80
120,23 55,41 => 83
28,20 91,68 => 111
85,107 69,46 => 123
16,25 100,100 => 159
62,85 22,5 => 160
92,26 59,113 => 174
62,22 35,125 => 206
(a,b,x,y)->c(a,b,x,y,0)
(เรียกวิธีการแยกc
ด้วยสี่ข้อโต้แย้งและข้อโต้แย้ง0
ที่ห้า) ในคำตอบของฉัน