ลองนึกภาพคุณมีอาร์เรย์ของจำนวนเต็มซึ่งมีค่าที่ไม่เป็นลบเป็นตัวชี้ไปยังตำแหน่งอื่นในอาร์เรย์เดียวกันเฉพาะค่าที่เป็นตัวแทนของอุโมงค์ดังนั้นถ้าค่าในตำแหน่ง A เป็นค่าบวกและชี้ไปที่ตำแหน่ง B ดังนั้นค่าในตำแหน่ง B จะต้องเป็นบวกและชี้ไปที่ตำแหน่ง A เพื่อแสดงปลายทั้งสองของอุโมงค์ ดังนั้น:
ท้าทาย
- ให้อาเรย์ของจำนวนเต็มตรวจสอบว่าอาเรย์นั้นสอดคล้องกับข้อ จำกัด ในการเป็นอาเรย์อุโมงค์และคืนค่าสองค่าที่ชัดเจนและสอดคล้องกันสำหรับความจริงและเท็จ
- ค่าในอาร์เรย์จะต่ำกว่าศูนย์สำหรับตำแหน่งที่ไม่ใช่ช่องสัญญาณและศูนย์หรือสูงกว่าสำหรับตำแหน่งช่องสัญญาณ หากอาร์เรย์ของคุณมีการจัดทำดัชนีไว้ 1 รายการค่าศูนย์จะแสดงถึงตำแหน่งที่ไม่ใช่ช่องสัญญาณ ไม่จำเป็นต้องตรวจสอบค่าที่ไม่ใช่ช่องสัญญาณ
- หากค่าบวกในเซลล์ชี้ไปที่ตัวเองนั่นเป็นความเท็จ ถ้า A ชี้ไปที่ B, B ถึง C และ C ถึง A นั่นเป็นความเท็จ หากค่าบวกคะแนนเกินขีด จำกัด ของอาร์เรย์นั่นเป็นเท็จ
ตัวอย่าง
ตัวอย่างต่อไปนี้เป็นดัชนี 0:
[-1, -1, -1, 6, -1, -1, 3, -1, -1] Truthy (position 3 points to position 6 and vice versa)
[1, 0] Truthy (position 0 points to position 1 and vice versa)
[0, 1] Falsey (positions 0 and 1 point to themselves)
[4, 2, 1, -1, 0, -1] Truthy
[2, 3, 0, 1] Truthy
[1, 2, 0] Falsey (no circular tunnels allowed)
[-1, 2, -1] Falsey (tunnel without end)
[] Truthy (no tunnels, that's OK)
[-1, -2, -3] Truthy (no tunnels, that's OK)
[1, 0, 3] Falsey (tunnel goes beyond limits)
[1] Falsey (tunnel goes beyond limits)
[1, 0, 3, 7] Falsey (tunnel goes beyond limits)
นี่คือรหัส - กอล์ฟดังนั้นอาจเป็นรหัสที่สั้นที่สุดสำหรับแต่ละภาษาที่ชนะ!
[0,1]
และกรณี[0,-1,2]
?
[0,1]
อยู่ในตัวอย่าง "ถ้าบวกค่าในจุดมือถือตัวเองว่าเป็น falsey"
[2,3,0,1]
[0]
?