ท้าทาย
รับไบนารีเมทริกซ์และสตริงไบนารีพิจารณาว่าสตริงไบนารีนั้นสามารถพบได้เริ่มต้นที่จุดใด ๆ ในเมทริกซ์และเคลื่อนที่ไปในทิศทางใดก็ได้ ณ จุดใด ๆ ถัดมาเพื่อสร้างสตริงไบนารี นั่นคือสตริงสามารถถูกพับเก็บได้ แต่ภายในเมทริกซ์หรือไม่?
สตริงสามารถพับที่ 90 องศาหรือ 180 องศา (การเชื่อมต่อขอบ; ระยะทางแมนฮัตตัน 1) และไม่สามารถทับซ้อนกันได้ทุกจุด
ตัวอย่าง
ลองมาตัวอย่างต่อไปนี้:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
นี่เป็นกรณีทดสอบจริง เราสามารถเห็นงูถูกพับในตำแหน่งต่อไปนี้:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
กฎระเบียบ
- ช่องโหว่มาตรฐานใช้
- คุณอาจใช้ความยาวของสตริงและความกว้างและความสูงของเมทริกซ์เป็นอินพุตหากคุณต้องการ
- คุณอาจใช้เมทริกซ์ไบนารีและสตริงไบนารีเป็นสตริงหลายเส้น / อาร์เรย์ของสตริง / สตริงเข้าร่วมใหม่ / สิ่งอื่นเข้าร่วมสตริงและสตริง
- คุณอาจใช้มิติเป็นอาร์เรย์แบนแทนที่จะใช้อาร์กิวเมนต์หลายข้อ
- โปรแกรมของคุณจะต้องเสร็จสิ้นสำหรับเมทริกซ์ 5 x 5 ใด ๆ ที่มีสตริงที่มีความยาวสูงสุด 10 ในเวลาไม่ถึงนาที
ข้อ จำกัด
- เมทริกซ์ไม่จำเป็นต้องเป็นกำลังสอง
- สตริงจะไม่ว่างเปล่า
- สตริงสามารถมีความยาว -1
- สตริงจะไม่มีสี่เหลี่ยมมากกว่าที่มีอยู่ (นั่นคือ
len(string) <= width(matrix) * height(matrix)
กรณีทดสอบ
Truthy
01010
10101
01010
10101
01010
0101010101010101010101010
01110
01100
10010
10110
01101
011111000110100
0
0
10
01
1010
100
010
001
100010001
Falsy
00000
00000
00000
00000
00000
1
10101
01010
10101
01010
10101
11
100
010
001
111
10001
01010
00100
01010
10001
1000100010001000101010100