func isSelfCrossing(x []int) bool { // 3 situations for self crossing: // 1. _____ 0 intersects 3, x[2] <= x[0] && x[1] <= x[3] // | 1 | // 2| |0 // `-----+- // 3 | // // 2. _____ 0 intersects (and coincides) 4, // | 1 | x[1] == x[3] && x[2] <= x[0] + x[4] // 2| |0 // | | // |_____^4 // 3 // // 3. ___ 0 intersects 5, // | 1 | 5 x[4] <= x[2] && x[1] <= x[3] && x[2] <= x[0] + x[4] && x[3] <= x[1] + x[5] // | <-+---. // 2| |0 |4 // |_______| // 3 // n := len(x) if n < 4 { return false } for i := 3; i < n; i++ { if x[i-1] <= x[i-3] && x[i-2] <= x[i] { return true } if 4 <= i && x[i-3] == x[i-1] && x[i-2] <= x[i-4]+x[i] { return true } if 5 <= i && x[i-1] <= x[i-3] && x[i-4] <= x[i-2] && x[i-3] <= x[i-5]+x[i-1] && x[i-2] <= x[i-4]+x[i] { return true } } return false }