ความต้องการทั่วไปในคลาสอัลกอริทึมและวิทยาการคอมพิวเตอร์โดยทั่วไปคือการทำซ้ำ 4 ทิศทางในตารางหรือเมทริกซ์ (เช่นใน BFS หรือ DFS) สิ่งนี้ดูเหมือนจะส่งผลให้เกิดรหัส clunky และ verbose จำนวนมากที่มีการคำนวณและการเปรียบเทียบจำนวนมากภายในลูป ฉันเห็นวิธีการต่าง ๆ มากมาย แต่ฉันไม่สามารถสั่นคลอนความรู้สึกว่ามีวิธีรัดกุมกว่านี้
ความท้าทายคือการเขียนฟังก์ชั่นบริสุทธิ์ที่กำหนดความกว้างและความสูงของระนาบ จำกัดn, m
ที่จุดกำเนิด(0,0)
และพิกัด(x,y)
ที่สามารถเป็นตัวแทนของจุดที่ถูกต้องภายในระนาบนั้นส่งคืนวัตถุที่ซ้ำได้ของทุกจุดภายในระนาบที่มีทิศทาง 4 (x,y)
เพื่อที่อยู่ติดกัน
เป้าหมายคือการกำหนดฟังก์ชั่นนี้ให้น้อยที่สุดเท่าที่จะเป็นไปได้
ตัวอย่างบางส่วนเพื่อช่วยแสดงให้เห็นถึงอินพุต / เอาต์พุตที่ถูกต้อง:
n = 5 (y-axis), m = 3 (x-axis) (zero-based)
matrix = [
[A, B, C],
[D, E, F],
[G, H, I],
[J, K, L],
[M, N, O],
]
(x, y) => [valid iterable points]
E: (1, 1) => [(1, 0), (2, 1), (1, 2), (0, 1)]
A: (0, 0) => [(1, 0), (0, 1)]
L: (2, 3) => [(2, 2), (2, 4), (1, 3)]
N: (1, 4) => [(1, 3), (2, 4), (0, 4)]
n = 1 (y-axis), m = 1 (x-axis) (zero-based)
matrix = [
[A],
]
(x, y) => [valid iterable points]
A: (0, 0) => []
n = 2 (y-axis), m = 1 (x-axis) (zero-based)
matrix = [
[A],
[B],
]
(x, y) => [valid iterable points]
A: (0, 0) => [(0, 1)]
B: (0, 1) => [(0, 0)]
และนี่คือตัวอย่าง (อันนี้ใน Python) ของฟังก์ชันที่ตรงตามเงื่อนไข:
def four_directions(x, y, n, m):
valid_coordinates = []
for xd, yd in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
nx, ny = x + xd, y + yd
if 0 <= nx < m and 0 <= ny < n:
valid_coordinates.append((nx, ny))
return valid_coordinates
ตัวอย่างข้างต้นกำหนดฟังก์ชั่นที่มีชื่อ แต่ฟังก์ชั่นที่ไม่ระบุชื่อก็เป็นที่ยอมรับ
อินพุตn, m, x, y
เป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงชื่อทั้งหมดภายในช่วงต่อไปนี้:
n > 0
m > 0
0 <= x < m
0 <= y < n
เอาต์พุตจะต้องอยู่ในรูปแบบของ iterable (อย่างไรก็ตามภาษาที่คุณเลือกกำหนดว่า) ของคู่ (x, y)
ชี้แจงเพิ่มเติม:
จำนวนเชิงซ้อน (และการแทน / การทำให้เป็นอนุกรมอื่น ๆ ) นั้นใช้ได้ตราบใดที่ผู้บริโภคของ iterable สามารถเข้าถึงได้x
และy
เป็นจำนวนเต็มที่รู้แค่ตำแหน่งที่ตั้ง
ดัชนีที่ไม่เป็นศูนย์จะยอมรับได้ แต่หากภาษาที่เลือกเป็นภาษาที่ไม่ได้จัดทำดัชนีไว้เท่านั้น หากภาษาใช้การผสมผสานของระบบการกำหนดหมายเลขเริ่มต้นกับระบบการกำหนดหมายเลขของโครงสร้างข้อมูลที่ใช้กันมากที่สุดเพื่อแสดงเมทริกซ์ หากสิ่งเหล่านี้ยังคงเป็นแนวคิดต่างประเทศทั้งหมดในภาษาที่กำหนดดัชนีเริ่มต้นใด ๆ ก็สามารถใช้ได้
(x,y)
ตัวเองอยู่ในรูปสี่เหลี่ยมผืนผ้าใช่มั้ย