FA-68276 / Traffic signal timing plans / Open access
Split failure detection: green occupancy includes the yellow interval · case 01
Split failure detection returns a wrong result when green occupancy includes the yellow interval.
ROOT CAUSE
Dividing by green plus yellow understates GOR.
VERIFIED REPAIR
Restore the green occupancy span rule so that the step reads `Fraction(busy(gs, ge), gl)`.
Unsuccessful approach: Counting yellow occupancy against green length overstates GOR.
Case contract
Input {cycles: [{green: [start, end), red_start, occ: [[on, off]]}]} with at least one cycle. Green occupancy ratio GOR = occupied seconds in green / green length; red occupancy ratio ROR5 = occupied seconds in the first 5 s after red start / 5. A cycle is a split failure when GOR >= 0.8 and ROR5 >= 0.8. Return {fails: indices, pct: floor(100*fails/cycles)}.
Why this case matters
Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
fails = []
for i, cy in enumerate(x['cycles']):
gs, ge = cy['green']
rs = cy['red_start']
def busy(lo, hi):
return sum(max(0, min(off, hi) - max(on, lo)) for on, off in cy['occ'])
gl = ge - gs
gor = Fraction(busy(gs, ge), rs - gs)
ror = Fraction(busy(rs, rs + 5), 5)
if gor >= Fraction(4, 5) and ror >= Fraction(4, 5):
fails.append(i)
return {'fails': fails, 'pct': len(fails) * 100 // len(x['cycles'])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycles': [{'green': [8, 41], 'red_start': 45, 'occ': [[7, 9], [15, 17], [18, 19], [27, 29], [34, 36], [38, 40], [45, 47], [48, 49], [56, 57]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 36], 'red_start': 39, 'occ': [[-2, 4], [5, 6], [6, 7], [7, 8], [8, 13], [13, 15], [16, 20], [21, 22], [22, 24], [24, 27], [28, 33], [33, 35], [36, 42], [43, 45], [45, 47], [47, 48], [49, 54]]}, {'green': [59, 79], 'red_start': 82, 'occ': [[58, 59], [62, 63], [69, 70], [73, 75], [81, 82], [83, 85], [89, 91]]}, {'green': [111, 142], 'red_start': 147, 'occ': [[102, 107], [107, 112], [112, 113], [114, 116], [117, 120], [121, 126], [126, 128], [129, 134], [134, 139], [139, 142], [143, 149], [150, 152], [153, 158], [158, 163]]}, {'green': [167, 187], 'red_start': 192, 'occ': [[164, 169], [170, 171], [172, 174], [175, 177], [178, 182], [183, 186], [186, 190], [190, 193], [193, 194], [195, 196], [196, 197], [198, 200], [201, 202], [202, 207]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [7, 21], 'red_start': 25, 'occ': [[7, 9], [13, 15], [19, 21], [25, 27], [34, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 30], 'red_start': 35, 'occ': [[2, 7], [7, 13], [14, 18], [19, 22], [23, 25], [26, 28], [29, 35], [35, 37], [37, 40], [40, 42], [42, 45], [46, 49]]}, {'green': [60, 100], 'red_start': 105, 'occ': [[58, 59], [67, 68], [70, 72], [78, 79], [80, 81], [85, 86], [90, 92], [97, 98], [103, 104], [106, 108], [114, 116]]}, {'green': [127, 138], 'red_start': 143, 'occ': [[119, 123], [123, 128], [129, 130], [130, 133], [133, 139], [140, 144], [145, 146], [147, 148], [149, 151], [152, 158]]}, {'green': [170, 186], 'red_start': 190, 'occ': [[167, 172], [172, 174], [175, 178], [178, 182], [183, 189], [189, 194], [195, 197], [197, 203]]}, {'green': [214, 224], 'red_start': 227, 'occ': [[214, 215], [219, 220], [221, 223], [225, 226], [229, 230], [234, 236], [237, 239]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [7, 23], 'red_start': 26, 'occ': [[-2, 3], [4, 9], [9, 14], [15, 20], [20, 26], [27, 30], [31, 33], [33, 38]]}, {'green': [52, 71], 'red_start': 75, 'occ': [[48, 50], [51, 52], [54, 55], [62, 63], [71, 73], [77, 78], [83, 85]]}, {'green': [98, 112], 'red_start': 117, 'occ': [[91, 93], [94, 95], [97, 99], [104, 105], [107, 109], [117, 118], [121, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 43], 'red_start': 46, 'occ': [[3, 5], [5, 7], [8, 9], [9, 12], [13, 14], [15, 17], [18, 24], [25, 31], [32, 36], [37, 42], [42, 44], [44, 46], [46, 47], [48, 51], [52, 54], [54, 56], [57, 61]]}, {'green': [71, 83], 'red_start': 87, 'occ': [[62, 63], [64, 69], [69, 73], [74, 78], [78, 80], [81, 86], [86, 90], [91, 95], [95, 99]]}, {'green': [116, 131], 'red_start': 136, 'occ': [[111, 113], [115, 116], [117, 119], [127, 128], [129, 131], [136, 137], [143, 145], [147, 148]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 46, 'occ': [[0, 1], [7, 8], [10, 12], [17, 18], [22, 23], [28, 30], [31, 33], [40, 41], [44, 45], [48, 50], [57, 59]]}, {'green': [66, 97], 'red_start': 100, 'occ': [[56, 59], [60, 63], [63, 68], [68, 72], [73, 79], [80, 82], [82, 84], [85, 90], [90, 94], [94, 97], [98, 104], [105, 111], [111, 112]]}, {'green': [121, 146], 'red_start': 151, 'occ': [[113, 114], [114, 120], [121, 125], [125, 130], [130, 132], [133, 138], [138, 144], [144, 148], [149, 151], [152, 156], [157, 159], [160, 165]]}, {'green': [179, 190], 'red_start': 194, 'occ': [[173, 175], [181, 182], [187, 189], [197, 199], [205, 207]]}, {'green': [223, 240], 'red_start': 243, 'occ': [[214, 215], [223, 224], [227, 228], [231, 232], [240, 241], [242, 244], [251, 253]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [1, 21], 'red_start': 25, 'occ': [[-8, -6], [1, 3], [5, 6], [7, 9], [11, 13], [19, 20], [23, 24], [32, 34], [36, 37]]}, {'green': [48, 83], 'red_start': 87, 'occ': [[48, 50], [54, 55], [60, 62], [65, 66], [67, 69], [74, 76], [80, 82], [90, 92], [96, 98]]}, {'green': [117, 129], 'red_start': 133, 'occ': [[110, 111], [118, 119], [124, 125], [126, 128], [134, 135], [136, 138], [140, 142]]}, {'green': [157, 193], 'red_start': 196, 'occ': [[148, 149], [150, 155], [156, 160], [161, 163], [163, 167], [168, 174], [174, 180], [180, 181], [181, 183], [183, 184], [185, 190], [190, 195], [195, 198], [199, 205], [205, 209]]}, {'green': [224, 243], 'red_start': 246, 'occ': [[216, 221], [221, 222], [222, 225], [226, 232], [233, 238], [239, 240], [241, 244], [244, 245], [245, 249], [250, 255], [255, 256], [257, 259]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [10, 20], 'red_start': 25, 'occ': [[9, 10], [18, 19], [20, 22], [27, 28], [35, 37]]}, {'green': [51, 91], 'red_start': 94, 'occ': [[46, 50], [51, 53], [54, 60], [60, 62], [62, 68], [69, 74], [74, 77], [77, 80], [80, 81], [82, 83], [84, 86], [86, 87], [87, 88], [89, 95], [95, 99], [99, 100], [101, 106]]}, {'green': [119, 132], 'red_start': 137, 'occ': [[109, 110], [115, 117], [120, 121], [128, 130], [136, 138], [139, 141], [146, 147]]}, {'green': [166, 190], 'red_start': 194, 'occ': [[160, 161], [168, 169], [177, 178], [186, 187], [190, 192], [196, 198], [199, 201]]}, {'green': [223, 238], 'red_start': 243, 'occ': [[223, 224], [227, 229], [231, 233], [236, 237], [244, 245], [247, 248], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [9, 29], 'red_start': 34, 'occ': [[-1, 0], [2, 4], [11, 12], [19, 20], [21, 23], [29, 30], [33, 34], [42, 44]]}, {'green': [61, 77], 'red_start': 80, 'occ': [[53, 54], [58, 59], [61, 62], [66, 67], [68, 69], [77, 79], [87, 89]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 22], 'red_start': 25, 'occ': [[5, 6], [7, 9], [10, 12], [12, 15], [16, 17], [17, 21], [22, 24], [25, 29], [30, 36], [36, 39]]}, {'green': [45, 69], 'red_start': 74, 'occ': [[40, 42], [47, 48], [52, 54], [59, 60], [63, 64], [69, 71], [74, 76], [84, 85]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 45], 'red_start': 50, 'occ': [[3, 5], [6, 8], [9, 10], [11, 12], [18, 19], [24, 26], [32, 34], [40, 41], [48, 49], [52, 54], [57, 59]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 35], 'red_start': 40, 'occ': [[2, 3], [4, 7], [7, 12], [12, 13], [13, 18], [18, 22], [23, 25], [26, 31], [32, 36], [37, 43], [43, 48], [48, 53]]}, {'green': [70, 110], 'red_start': 115, 'occ': [[63, 64], [69, 71], [75, 76], [80, 82], [85, 87], [94, 95], [103, 105], [107, 109], [114, 116], [122, 124]]}, {'green': [139, 154], 'red_start': 157, 'occ': [[129, 131], [137, 139], [146, 147], [151, 153], [161, 163]]}, {'green': [185, 203], 'red_start': 208, 'occ': [[176, 177], [177, 179], [179, 182], [182, 186], [187, 192], [193, 198], [199, 202], [202, 207], [208, 213], [213, 214], [215, 221]]}]}, {'fails': [0, 3], 'pct': 50}), ({'cycles': [{'green': [4, 31], 'red_start': 35, 'occ': [[-5, -3], [-1, 0], [4, 6], [7, 8], [15, 17], [24, 26], [32, 34], [41, 42]]}, {'green': [61, 73], 'red_start': 77, 'occ': [[58, 59], [61, 62], [70, 72], [80, 81], [85, 86]]}, {'green': [102, 121], 'red_start': 126, 'occ': [[100, 101], [101, 105], [105, 109], [110, 116], [117, 120], [120, 124], [125, 129], [130, 132], [132, 136], [136, 140]]}, {'green': [150, 186], 'red_start': 190, 'occ': [[142, 143], [151, 153], [155, 157], [164, 166], [172, 174], [178, 179], [184, 185], [193, 194], [197, 198]]}, {'green': [212, 245], 'red_start': 250, 'occ': [[208, 213], [214, 215], [215, 220], [220, 222], [222, 224], [224, 228], [229, 234], [235, 237], [237, 240], [240, 245], [245, 247], [248, 252], [252, 255], [256, 262]]}]}, {'fails': [2, 4], 'pct': 40})], [({'cycles': [{'green': [9, 38], 'red_start': 43, 'occ': [[4, 6], [13, 14], [21, 23], [28, 30], [34, 35], [36, 37], [38, 40], [41, 43], [44, 45], [52, 54]]}, {'green': [69, 105], 'red_start': 108, 'occ': [[61, 62], [70, 72], [79, 80], [87, 89], [94, 95], [101, 103], [104, 105], [110, 112], [114, 115]]}, {'green': [134, 168], 'red_start': 172, 'occ': [[128, 134], [135, 140], [141, 144], [145, 151], [151, 157], [158, 163], [164, 165], [165, 171], [172, 177], [178, 181], [182, 184]]}, {'green': [201, 226], 'red_start': 230, 'occ': [[199, 201], [202, 203], [204, 207], [207, 212], [213, 219], [220, 224], [224, 225], [226, 228], [229, 233], [233, 236], [236, 238], [239, 243]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -3], [-2, 0], [1, 5], [6, 9], [10, 12], [12, 16], [17, 20], [21, 27], [28, 34], [34, 40]]}, {'green': [52, 63], 'red_start': 66, 'occ': [[44, 50], [51, 56], [57, 62], [63, 65], [66, 72], [72, 78]]}, {'green': [87, 118], 'red_start': 121, 'occ': [[84, 90], [90, 95], [95, 100], [101, 106], [107, 110], [110, 111], [112, 117], [117, 122], [122, 127], [128, 130], [131, 134]]}, {'green': [144, 171], 'red_start': 175, 'occ': [[135, 137], [143, 144], [151, 153], [161, 163], [164, 165], [166, 167], [171, 173], [178, 180], [183, 184]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [7, 29], 'red_start': 32, 'occ': [[2, 4], [6, 8], [11, 12], [14, 15], [22, 24], [31, 33], [36, 37], [38, 39], [43, 44]]}, {'green': [52, 69], 'red_start': 74, 'occ': [[47, 51], [51, 53], [53, 56], [57, 62], [62, 67], [67, 71], [72, 74], [74, 79], [79, 85]]}, {'green': [94, 114], 'red_start': 119, 'occ': [[93, 98], [98, 101], [102, 104], [105, 110], [110, 114], [114, 116], [116, 120], [121, 122], [122, 125], [126, 130], [130, 132]]}, {'green': [141, 170], 'red_start': 175, 'occ': [[138, 141], [141, 146], [146, 152], [153, 157], [158, 163], [164, 168], [168, 172], [173, 177], [177, 183], [183, 186], [186, 187]]}, {'green': [204, 237], 'red_start': 240, 'occ': [[196, 201], [202, 204], [204, 210], [210, 212], [212, 214], [214, 218], [218, 221], [221, 224], [225, 230], [231, 233], [234, 235], [235, 238], [238, 240], [241, 245], [246, 251]]}]}, {'fails': [1, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [6, 16], 'red_start': 21, 'occ': [[1, 2], [6, 7], [9, 10], [17, 18], [26, 27], [32, 33]]}, {'green': [44, 64], 'red_start': 69, 'occ': [[44, 46], [47, 48], [54, 55], [57, 58], [64, 65], [72, 74]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 18], 'red_start': 21, 'occ': [[-3, 1], [2, 6], [7, 10], [10, 16], [17, 21], [22, 23], [24, 29], [30, 31], [32, 34]]}, {'green': [43, 78], 'red_start': 83, 'occ': [[34, 35], [36, 37], [42, 43], [47, 49], [55, 56], [61, 62], [69, 71], [79, 80], [87, 88]]}, {'green': [107, 127], 'red_start': 132, 'occ': [[102, 104], [110, 111], [119, 120], [126, 128], [132, 134], [138, 140]]}, {'green': [159, 170], 'red_start': 175, 'occ': [[157, 159], [160, 162], [163, 166], [167, 168], [169, 170], [170, 174], [175, 181], [182, 183], [183, 185], [186, 191]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 35], 'red_start': 40, 'occ': [[3, 5], [11, 12], [14, 16], [22, 24], [30, 31], [35, 37], [41, 43], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 26, 'occ': [[4, 6], [11, 12], [20, 22], [28, 30], [35, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})], [({'cycles': [{'green': [8, 18], 'red_start': 22, 'occ': [[-2, -1], [4, 5], [6, 8], [9, 11], [16, 17], [25, 26], [28, 30]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 43], 'red_start': 47, 'occ': [[2, 7], [7, 11], [12, 16], [16, 19], [20, 23], [24, 30], [30, 34], [35, 38], [38, 44], [44, 45], [45, 48], [49, 53], [53, 58]]}, {'green': [73, 108], 'red_start': 112, 'occ': [[70, 72], [72, 76], [77, 80], [80, 86], [86, 90], [91, 97], [97, 101], [102, 108], [108, 112], [112, 117], [117, 120], [121, 127]]}, {'green': [137, 160], 'red_start': 165, 'occ': [[131, 132], [136, 138], [139, 141], [146, 148], [153, 154], [162, 163], [167, 169], [172, 174]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 45, 'occ': [[1, 3], [7, 8], [10, 11], [14, 15], [22, 23], [29, 31], [34, 35], [39, 40], [46, 48], [54, 56]]}, {'green': [75, 98], 'red_start': 101, 'occ': [[69, 73], [74, 78], [79, 85], [85, 88], [89, 95], [96, 98], [99, 101], [102, 108], [108, 111], [112, 114]]}, {'green': [131, 145], 'red_start': 150, 'occ': [[127, 132], [133, 135], [135, 140], [141, 142], [142, 146], [147, 151], [152, 157], [158, 161], [161, 166]]}, {'green': [178, 195], 'red_start': 200, 'occ': [[173, 174], [175, 179], [179, 182], [183, 187], [188, 189], [189, 193], [194, 196], [196, 202], [202, 208], [208, 209], [209, 210], [211, 217]]}, {'green': [228, 260], 'red_start': 264, 'occ': [[223, 224], [224, 228], [229, 232], [232, 235], [235, 237], [238, 239], [240, 242], [243, 245], [246, 248], [249, 255], [255, 258], [258, 259], [260, 261], [262, 263], [263, 269], [269, 270], [271, 274], [275, 279]]}]}, {'fails': [1, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[-4, -2], [-1, 5], [6, 12], [13, 16], [17, 18], [19, 23], [24, 25], [25, 31], [32, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 31], 'red_start': 36, 'occ': [[-3, 3], [3, 8], [8, 9], [10, 12], [13, 14], [15, 17], [17, 21], [22, 23], [24, 30], [30, 35], [36, 40], [40, 42], [42, 48]]}, {'green': [59, 81], 'red_start': 85, 'occ': [[53, 55], [61, 63], [70, 72], [79, 80], [87, 88], [91, 92], [96, 98]]}, {'green': [110, 126], 'red_start': 129, 'occ': [[109, 111], [111, 117], [118, 119], [120, 124], [125, 129], [130, 131], [131, 136], [137, 138], [138, 142]]}, {'green': [154, 167], 'red_start': 170, 'occ': [[149, 150], [157, 159], [161, 162], [166, 168], [175, 177], [180, 181]]}, {'green': [190, 217], 'red_start': 221, 'occ': [[190, 195], [195, 200], [200, 206], [206, 207], [208, 213], [213, 215], [216, 222], [223, 229], [229, 233]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 43], 'red_start': 47, 'occ': [[1, 3], [6, 8], [12, 14], [15, 16], [22, 23], [28, 30], [35, 36], [39, 40], [43, 45], [48, 49], [54, 55]]}, {'green': [73, 111], 'red_start': 115, 'occ': [[71, 73], [81, 82], [89, 90], [94, 96], [99, 100], [102, 104], [107, 109], [110, 112], [113, 115], [120, 122], [126, 127]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 25], 'red_start': 30, 'occ': [[1, 3], [8, 10], [11, 12], [20, 21], [25, 27], [31, 33], [39, 41]]}, {'green': [51, 61], 'red_start': 64, 'occ': [[51, 53], [60, 61], [64, 66], [70, 72]]}, {'green': [92, 107], 'red_start': 111, 'occ': [[90, 91], [94, 95], [99, 100], [107, 108], [109, 110], [117, 118]]}, {'green': [137, 162], 'red_start': 166, 'occ': [[135, 136], [141, 143], [148, 150], [152, 153], [159, 161], [163, 165], [169, 171], [176, 177]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [4, 18], 'red_start': 23, 'occ': [[-3, -1], [5, 7], [10, 12], [20, 22], [28, 30], [32, 34]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 47], 'red_start': 50, 'occ': [[8, 10], [10, 13], [14, 16], [17, 21], [22, 28], [29, 31], [31, 33], [33, 37], [37, 43], [43, 49], [49, 54], [54, 60], [61, 63]]}, {'green': [80, 93], 'red_start': 96, 'occ': [[72, 74], [76, 78], [86, 87], [90, 91], [99, 101], [103, 104], [105, 106]]}, {'green': [116, 156], 'red_start': 159, 'occ': [[112, 114], [122, 124], [125, 127], [128, 130], [135, 137], [140, 141], [149, 150], [158, 159], [161, 163]]}, {'green': [181, 192], 'red_start': 196, 'occ': [[181, 183], [184, 186], [193, 194], [195, 197], [201, 202]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [2, 28], 'red_start': 31, 'occ': [[-8, -3], [-2, -1], [-1, 5], [5, 7], [8, 13], [13, 15], [15, 20], [20, 26], [27, 30], [30, 34], [35, 37], [38, 39], [40, 46]]}, {'green': [53, 83], 'red_start': 87, 'occ': [[50, 51], [57, 58], [59, 61], [66, 68], [70, 71], [73, 74], [82, 84], [91, 93], [96, 98]]}, {'green': [116, 135], 'red_start': 138, 'occ': [[116, 120], [120, 122], [122, 127], [127, 133], [134, 137], [138, 144], [144, 150]]}, {'green': [160, 181], 'red_start': 185, 'occ': [[160, 161], [161, 162], [163, 169], [170, 174], [174, 177], [178, 180], [181, 183], [184, 186], [187, 189], [190, 194], [195, 197]]}, {'green': [208, 233], 'red_start': 236, 'occ': [[199, 202], [203, 208], [209, 214], [215, 219], [219, 220], [221, 223], [223, 229], [229, 230], [231, 236], [236, 241], [241, 245], [246, 252]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[1, 2], [2, 7], [7, 11], [12, 14], [15, 17], [18, 22], [23, 26], [26, 30], [30, 36], [37, 38], [38, 39], [39, 40], [40, 41], [41, 46]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[55, 56], [56, 59], [59, 60], [61, 64], [65, 70], [70, 75], [76, 80], [80, 85]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 24], [28, 29], [32, 34]]}, {'green': [52, 63], 'red_start': 68, 'occ': [[52, 54], [58, 60], [65, 66], [67, 69], [72, 73], [79, 80]]}, {'green': [91, 120], 'red_start': 123, 'occ': [[83, 85], [86, 87], [90, 92], [100, 101], [109, 111], [113, 114], [117, 118], [121, 122], [124, 126], [127, 128], [134, 136]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 45], 'red_start': 50, 'occ': [[2, 3], [9, 10], [15, 17], [22, 23], [24, 26], [28, 29], [32, 33], [40, 42], [49, 51], [59, 60]]}, {'green': [75, 90], 'red_start': 94, 'occ': [[71, 72], [77, 78], [81, 82], [85, 86], [93, 94], [96, 97], [102, 104]]}, {'green': [118, 137], 'red_start': 142, 'occ': [[114, 117], [117, 118], [119, 122], [123, 127], [127, 131], [131, 132], [133, 134], [135, 141], [141, 142], [143, 147], [147, 152], [152, 158]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[165, 167], [174, 175], [180, 182], [187, 188], [190, 192], [200, 202], [208, 210], [211, 213], [218, 219]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[-2, 0], [1, 2], [6, 7], [13, 15], [22, 23], [28, 29], [32, 33], [36, 37], [39, 41]]}, {'green': [60, 92], 'red_start': 97, 'occ': [[58, 63], [63, 68], [68, 70], [71, 77], [77, 83], [84, 85], [86, 90], [90, 96], [96, 97], [98, 103], [104, 108], [108, 111]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 1 | {'fails': [], 'pct': 0} | {'fails': [0, 2], 'pct': 50} | Failed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [3], 'pct': 20} | Failed |
| timing oracle 4 | {'fails': [2], 'pct': 33} | {'fails': [0, 1, 2], 'pct': 100} | Failed |
| timing oracle 5 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 6 | {'fails': [], 'pct': 0} | {'fails': [0, 1], 'pct': 66} | Failed |
| timing oracle 7 | {'fails': [1, 2], 'pct': 40} | {'fails': [1, 2], 'pct': 40} | Passed |
SHA-256 / bfaed54314d30bf74640bafed5265cb44a82777f5b34b5e0f9739dab5438170e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
fails = []
for i, cy in enumerate(x['cycles']):
gs, ge = cy['green']
rs = cy['red_start']
def busy(lo, hi):
return sum(max(0, min(off, hi) - max(on, lo)) for on, off in cy['occ'])
gl = ge - gs
gor = Fraction(busy(gs, rs), gl)
ror = Fraction(busy(rs, rs + 5), 5)
if gor >= Fraction(4, 5) and ror >= Fraction(4, 5):
fails.append(i)
return {'fails': fails, 'pct': len(fails) * 100 // len(x['cycles'])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycles': [{'green': [8, 41], 'red_start': 45, 'occ': [[7, 9], [15, 17], [18, 19], [27, 29], [34, 36], [38, 40], [45, 47], [48, 49], [56, 57]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 36], 'red_start': 39, 'occ': [[-2, 4], [5, 6], [6, 7], [7, 8], [8, 13], [13, 15], [16, 20], [21, 22], [22, 24], [24, 27], [28, 33], [33, 35], [36, 42], [43, 45], [45, 47], [47, 48], [49, 54]]}, {'green': [59, 79], 'red_start': 82, 'occ': [[58, 59], [62, 63], [69, 70], [73, 75], [81, 82], [83, 85], [89, 91]]}, {'green': [111, 142], 'red_start': 147, 'occ': [[102, 107], [107, 112], [112, 113], [114, 116], [117, 120], [121, 126], [126, 128], [129, 134], [134, 139], [139, 142], [143, 149], [150, 152], [153, 158], [158, 163]]}, {'green': [167, 187], 'red_start': 192, 'occ': [[164, 169], [170, 171], [172, 174], [175, 177], [178, 182], [183, 186], [186, 190], [190, 193], [193, 194], [195, 196], [196, 197], [198, 200], [201, 202], [202, 207]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [7, 21], 'red_start': 25, 'occ': [[7, 9], [13, 15], [19, 21], [25, 27], [34, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 30], 'red_start': 35, 'occ': [[2, 7], [7, 13], [14, 18], [19, 22], [23, 25], [26, 28], [29, 35], [35, 37], [37, 40], [40, 42], [42, 45], [46, 49]]}, {'green': [60, 100], 'red_start': 105, 'occ': [[58, 59], [67, 68], [70, 72], [78, 79], [80, 81], [85, 86], [90, 92], [97, 98], [103, 104], [106, 108], [114, 116]]}, {'green': [127, 138], 'red_start': 143, 'occ': [[119, 123], [123, 128], [129, 130], [130, 133], [133, 139], [140, 144], [145, 146], [147, 148], [149, 151], [152, 158]]}, {'green': [170, 186], 'red_start': 190, 'occ': [[167, 172], [172, 174], [175, 178], [178, 182], [183, 189], [189, 194], [195, 197], [197, 203]]}, {'green': [214, 224], 'red_start': 227, 'occ': [[214, 215], [219, 220], [221, 223], [225, 226], [229, 230], [234, 236], [237, 239]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [7, 23], 'red_start': 26, 'occ': [[-2, 3], [4, 9], [9, 14], [15, 20], [20, 26], [27, 30], [31, 33], [33, 38]]}, {'green': [52, 71], 'red_start': 75, 'occ': [[48, 50], [51, 52], [54, 55], [62, 63], [71, 73], [77, 78], [83, 85]]}, {'green': [98, 112], 'red_start': 117, 'occ': [[91, 93], [94, 95], [97, 99], [104, 105], [107, 109], [117, 118], [121, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 43], 'red_start': 46, 'occ': [[3, 5], [5, 7], [8, 9], [9, 12], [13, 14], [15, 17], [18, 24], [25, 31], [32, 36], [37, 42], [42, 44], [44, 46], [46, 47], [48, 51], [52, 54], [54, 56], [57, 61]]}, {'green': [71, 83], 'red_start': 87, 'occ': [[62, 63], [64, 69], [69, 73], [74, 78], [78, 80], [81, 86], [86, 90], [91, 95], [95, 99]]}, {'green': [116, 131], 'red_start': 136, 'occ': [[111, 113], [115, 116], [117, 119], [127, 128], [129, 131], [136, 137], [143, 145], [147, 148]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 46, 'occ': [[0, 1], [7, 8], [10, 12], [17, 18], [22, 23], [28, 30], [31, 33], [40, 41], [44, 45], [48, 50], [57, 59]]}, {'green': [66, 97], 'red_start': 100, 'occ': [[56, 59], [60, 63], [63, 68], [68, 72], [73, 79], [80, 82], [82, 84], [85, 90], [90, 94], [94, 97], [98, 104], [105, 111], [111, 112]]}, {'green': [121, 146], 'red_start': 151, 'occ': [[113, 114], [114, 120], [121, 125], [125, 130], [130, 132], [133, 138], [138, 144], [144, 148], [149, 151], [152, 156], [157, 159], [160, 165]]}, {'green': [179, 190], 'red_start': 194, 'occ': [[173, 175], [181, 182], [187, 189], [197, 199], [205, 207]]}, {'green': [223, 240], 'red_start': 243, 'occ': [[214, 215], [223, 224], [227, 228], [231, 232], [240, 241], [242, 244], [251, 253]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [1, 21], 'red_start': 25, 'occ': [[-8, -6], [1, 3], [5, 6], [7, 9], [11, 13], [19, 20], [23, 24], [32, 34], [36, 37]]}, {'green': [48, 83], 'red_start': 87, 'occ': [[48, 50], [54, 55], [60, 62], [65, 66], [67, 69], [74, 76], [80, 82], [90, 92], [96, 98]]}, {'green': [117, 129], 'red_start': 133, 'occ': [[110, 111], [118, 119], [124, 125], [126, 128], [134, 135], [136, 138], [140, 142]]}, {'green': [157, 193], 'red_start': 196, 'occ': [[148, 149], [150, 155], [156, 160], [161, 163], [163, 167], [168, 174], [174, 180], [180, 181], [181, 183], [183, 184], [185, 190], [190, 195], [195, 198], [199, 205], [205, 209]]}, {'green': [224, 243], 'red_start': 246, 'occ': [[216, 221], [221, 222], [222, 225], [226, 232], [233, 238], [239, 240], [241, 244], [244, 245], [245, 249], [250, 255], [255, 256], [257, 259]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [10, 20], 'red_start': 25, 'occ': [[9, 10], [18, 19], [20, 22], [27, 28], [35, 37]]}, {'green': [51, 91], 'red_start': 94, 'occ': [[46, 50], [51, 53], [54, 60], [60, 62], [62, 68], [69, 74], [74, 77], [77, 80], [80, 81], [82, 83], [84, 86], [86, 87], [87, 88], [89, 95], [95, 99], [99, 100], [101, 106]]}, {'green': [119, 132], 'red_start': 137, 'occ': [[109, 110], [115, 117], [120, 121], [128, 130], [136, 138], [139, 141], [146, 147]]}, {'green': [166, 190], 'red_start': 194, 'occ': [[160, 161], [168, 169], [177, 178], [186, 187], [190, 192], [196, 198], [199, 201]]}, {'green': [223, 238], 'red_start': 243, 'occ': [[223, 224], [227, 229], [231, 233], [236, 237], [244, 245], [247, 248], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [9, 29], 'red_start': 34, 'occ': [[-1, 0], [2, 4], [11, 12], [19, 20], [21, 23], [29, 30], [33, 34], [42, 44]]}, {'green': [61, 77], 'red_start': 80, 'occ': [[53, 54], [58, 59], [61, 62], [66, 67], [68, 69], [77, 79], [87, 89]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 22], 'red_start': 25, 'occ': [[5, 6], [7, 9], [10, 12], [12, 15], [16, 17], [17, 21], [22, 24], [25, 29], [30, 36], [36, 39]]}, {'green': [45, 69], 'red_start': 74, 'occ': [[40, 42], [47, 48], [52, 54], [59, 60], [63, 64], [69, 71], [74, 76], [84, 85]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 45], 'red_start': 50, 'occ': [[3, 5], [6, 8], [9, 10], [11, 12], [18, 19], [24, 26], [32, 34], [40, 41], [48, 49], [52, 54], [57, 59]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 35], 'red_start': 40, 'occ': [[2, 3], [4, 7], [7, 12], [12, 13], [13, 18], [18, 22], [23, 25], [26, 31], [32, 36], [37, 43], [43, 48], [48, 53]]}, {'green': [70, 110], 'red_start': 115, 'occ': [[63, 64], [69, 71], [75, 76], [80, 82], [85, 87], [94, 95], [103, 105], [107, 109], [114, 116], [122, 124]]}, {'green': [139, 154], 'red_start': 157, 'occ': [[129, 131], [137, 139], [146, 147], [151, 153], [161, 163]]}, {'green': [185, 203], 'red_start': 208, 'occ': [[176, 177], [177, 179], [179, 182], [182, 186], [187, 192], [193, 198], [199, 202], [202, 207], [208, 213], [213, 214], [215, 221]]}]}, {'fails': [0, 3], 'pct': 50}), ({'cycles': [{'green': [4, 31], 'red_start': 35, 'occ': [[-5, -3], [-1, 0], [4, 6], [7, 8], [15, 17], [24, 26], [32, 34], [41, 42]]}, {'green': [61, 73], 'red_start': 77, 'occ': [[58, 59], [61, 62], [70, 72], [80, 81], [85, 86]]}, {'green': [102, 121], 'red_start': 126, 'occ': [[100, 101], [101, 105], [105, 109], [110, 116], [117, 120], [120, 124], [125, 129], [130, 132], [132, 136], [136, 140]]}, {'green': [150, 186], 'red_start': 190, 'occ': [[142, 143], [151, 153], [155, 157], [164, 166], [172, 174], [178, 179], [184, 185], [193, 194], [197, 198]]}, {'green': [212, 245], 'red_start': 250, 'occ': [[208, 213], [214, 215], [215, 220], [220, 222], [222, 224], [224, 228], [229, 234], [235, 237], [237, 240], [240, 245], [245, 247], [248, 252], [252, 255], [256, 262]]}]}, {'fails': [2, 4], 'pct': 40})], [({'cycles': [{'green': [9, 38], 'red_start': 43, 'occ': [[4, 6], [13, 14], [21, 23], [28, 30], [34, 35], [36, 37], [38, 40], [41, 43], [44, 45], [52, 54]]}, {'green': [69, 105], 'red_start': 108, 'occ': [[61, 62], [70, 72], [79, 80], [87, 89], [94, 95], [101, 103], [104, 105], [110, 112], [114, 115]]}, {'green': [134, 168], 'red_start': 172, 'occ': [[128, 134], [135, 140], [141, 144], [145, 151], [151, 157], [158, 163], [164, 165], [165, 171], [172, 177], [178, 181], [182, 184]]}, {'green': [201, 226], 'red_start': 230, 'occ': [[199, 201], [202, 203], [204, 207], [207, 212], [213, 219], [220, 224], [224, 225], [226, 228], [229, 233], [233, 236], [236, 238], [239, 243]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -3], [-2, 0], [1, 5], [6, 9], [10, 12], [12, 16], [17, 20], [21, 27], [28, 34], [34, 40]]}, {'green': [52, 63], 'red_start': 66, 'occ': [[44, 50], [51, 56], [57, 62], [63, 65], [66, 72], [72, 78]]}, {'green': [87, 118], 'red_start': 121, 'occ': [[84, 90], [90, 95], [95, 100], [101, 106], [107, 110], [110, 111], [112, 117], [117, 122], [122, 127], [128, 130], [131, 134]]}, {'green': [144, 171], 'red_start': 175, 'occ': [[135, 137], [143, 144], [151, 153], [161, 163], [164, 165], [166, 167], [171, 173], [178, 180], [183, 184]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [7, 29], 'red_start': 32, 'occ': [[2, 4], [6, 8], [11, 12], [14, 15], [22, 24], [31, 33], [36, 37], [38, 39], [43, 44]]}, {'green': [52, 69], 'red_start': 74, 'occ': [[47, 51], [51, 53], [53, 56], [57, 62], [62, 67], [67, 71], [72, 74], [74, 79], [79, 85]]}, {'green': [94, 114], 'red_start': 119, 'occ': [[93, 98], [98, 101], [102, 104], [105, 110], [110, 114], [114, 116], [116, 120], [121, 122], [122, 125], [126, 130], [130, 132]]}, {'green': [141, 170], 'red_start': 175, 'occ': [[138, 141], [141, 146], [146, 152], [153, 157], [158, 163], [164, 168], [168, 172], [173, 177], [177, 183], [183, 186], [186, 187]]}, {'green': [204, 237], 'red_start': 240, 'occ': [[196, 201], [202, 204], [204, 210], [210, 212], [212, 214], [214, 218], [218, 221], [221, 224], [225, 230], [231, 233], [234, 235], [235, 238], [238, 240], [241, 245], [246, 251]]}]}, {'fails': [1, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [6, 16], 'red_start': 21, 'occ': [[1, 2], [6, 7], [9, 10], [17, 18], [26, 27], [32, 33]]}, {'green': [44, 64], 'red_start': 69, 'occ': [[44, 46], [47, 48], [54, 55], [57, 58], [64, 65], [72, 74]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 18], 'red_start': 21, 'occ': [[-3, 1], [2, 6], [7, 10], [10, 16], [17, 21], [22, 23], [24, 29], [30, 31], [32, 34]]}, {'green': [43, 78], 'red_start': 83, 'occ': [[34, 35], [36, 37], [42, 43], [47, 49], [55, 56], [61, 62], [69, 71], [79, 80], [87, 88]]}, {'green': [107, 127], 'red_start': 132, 'occ': [[102, 104], [110, 111], [119, 120], [126, 128], [132, 134], [138, 140]]}, {'green': [159, 170], 'red_start': 175, 'occ': [[157, 159], [160, 162], [163, 166], [167, 168], [169, 170], [170, 174], [175, 181], [182, 183], [183, 185], [186, 191]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 35], 'red_start': 40, 'occ': [[3, 5], [11, 12], [14, 16], [22, 24], [30, 31], [35, 37], [41, 43], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 26, 'occ': [[4, 6], [11, 12], [20, 22], [28, 30], [35, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})], [({'cycles': [{'green': [8, 18], 'red_start': 22, 'occ': [[-2, -1], [4, 5], [6, 8], [9, 11], [16, 17], [25, 26], [28, 30]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 43], 'red_start': 47, 'occ': [[2, 7], [7, 11], [12, 16], [16, 19], [20, 23], [24, 30], [30, 34], [35, 38], [38, 44], [44, 45], [45, 48], [49, 53], [53, 58]]}, {'green': [73, 108], 'red_start': 112, 'occ': [[70, 72], [72, 76], [77, 80], [80, 86], [86, 90], [91, 97], [97, 101], [102, 108], [108, 112], [112, 117], [117, 120], [121, 127]]}, {'green': [137, 160], 'red_start': 165, 'occ': [[131, 132], [136, 138], [139, 141], [146, 148], [153, 154], [162, 163], [167, 169], [172, 174]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 45, 'occ': [[1, 3], [7, 8], [10, 11], [14, 15], [22, 23], [29, 31], [34, 35], [39, 40], [46, 48], [54, 56]]}, {'green': [75, 98], 'red_start': 101, 'occ': [[69, 73], [74, 78], [79, 85], [85, 88], [89, 95], [96, 98], [99, 101], [102, 108], [108, 111], [112, 114]]}, {'green': [131, 145], 'red_start': 150, 'occ': [[127, 132], [133, 135], [135, 140], [141, 142], [142, 146], [147, 151], [152, 157], [158, 161], [161, 166]]}, {'green': [178, 195], 'red_start': 200, 'occ': [[173, 174], [175, 179], [179, 182], [183, 187], [188, 189], [189, 193], [194, 196], [196, 202], [202, 208], [208, 209], [209, 210], [211, 217]]}, {'green': [228, 260], 'red_start': 264, 'occ': [[223, 224], [224, 228], [229, 232], [232, 235], [235, 237], [238, 239], [240, 242], [243, 245], [246, 248], [249, 255], [255, 258], [258, 259], [260, 261], [262, 263], [263, 269], [269, 270], [271, 274], [275, 279]]}]}, {'fails': [1, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[-4, -2], [-1, 5], [6, 12], [13, 16], [17, 18], [19, 23], [24, 25], [25, 31], [32, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 31], 'red_start': 36, 'occ': [[-3, 3], [3, 8], [8, 9], [10, 12], [13, 14], [15, 17], [17, 21], [22, 23], [24, 30], [30, 35], [36, 40], [40, 42], [42, 48]]}, {'green': [59, 81], 'red_start': 85, 'occ': [[53, 55], [61, 63], [70, 72], [79, 80], [87, 88], [91, 92], [96, 98]]}, {'green': [110, 126], 'red_start': 129, 'occ': [[109, 111], [111, 117], [118, 119], [120, 124], [125, 129], [130, 131], [131, 136], [137, 138], [138, 142]]}, {'green': [154, 167], 'red_start': 170, 'occ': [[149, 150], [157, 159], [161, 162], [166, 168], [175, 177], [180, 181]]}, {'green': [190, 217], 'red_start': 221, 'occ': [[190, 195], [195, 200], [200, 206], [206, 207], [208, 213], [213, 215], [216, 222], [223, 229], [229, 233]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 43], 'red_start': 47, 'occ': [[1, 3], [6, 8], [12, 14], [15, 16], [22, 23], [28, 30], [35, 36], [39, 40], [43, 45], [48, 49], [54, 55]]}, {'green': [73, 111], 'red_start': 115, 'occ': [[71, 73], [81, 82], [89, 90], [94, 96], [99, 100], [102, 104], [107, 109], [110, 112], [113, 115], [120, 122], [126, 127]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 25], 'red_start': 30, 'occ': [[1, 3], [8, 10], [11, 12], [20, 21], [25, 27], [31, 33], [39, 41]]}, {'green': [51, 61], 'red_start': 64, 'occ': [[51, 53], [60, 61], [64, 66], [70, 72]]}, {'green': [92, 107], 'red_start': 111, 'occ': [[90, 91], [94, 95], [99, 100], [107, 108], [109, 110], [117, 118]]}, {'green': [137, 162], 'red_start': 166, 'occ': [[135, 136], [141, 143], [148, 150], [152, 153], [159, 161], [163, 165], [169, 171], [176, 177]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [4, 18], 'red_start': 23, 'occ': [[-3, -1], [5, 7], [10, 12], [20, 22], [28, 30], [32, 34]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 47], 'red_start': 50, 'occ': [[8, 10], [10, 13], [14, 16], [17, 21], [22, 28], [29, 31], [31, 33], [33, 37], [37, 43], [43, 49], [49, 54], [54, 60], [61, 63]]}, {'green': [80, 93], 'red_start': 96, 'occ': [[72, 74], [76, 78], [86, 87], [90, 91], [99, 101], [103, 104], [105, 106]]}, {'green': [116, 156], 'red_start': 159, 'occ': [[112, 114], [122, 124], [125, 127], [128, 130], [135, 137], [140, 141], [149, 150], [158, 159], [161, 163]]}, {'green': [181, 192], 'red_start': 196, 'occ': [[181, 183], [184, 186], [193, 194], [195, 197], [201, 202]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [2, 28], 'red_start': 31, 'occ': [[-8, -3], [-2, -1], [-1, 5], [5, 7], [8, 13], [13, 15], [15, 20], [20, 26], [27, 30], [30, 34], [35, 37], [38, 39], [40, 46]]}, {'green': [53, 83], 'red_start': 87, 'occ': [[50, 51], [57, 58], [59, 61], [66, 68], [70, 71], [73, 74], [82, 84], [91, 93], [96, 98]]}, {'green': [116, 135], 'red_start': 138, 'occ': [[116, 120], [120, 122], [122, 127], [127, 133], [134, 137], [138, 144], [144, 150]]}, {'green': [160, 181], 'red_start': 185, 'occ': [[160, 161], [161, 162], [163, 169], [170, 174], [174, 177], [178, 180], [181, 183], [184, 186], [187, 189], [190, 194], [195, 197]]}, {'green': [208, 233], 'red_start': 236, 'occ': [[199, 202], [203, 208], [209, 214], [215, 219], [219, 220], [221, 223], [223, 229], [229, 230], [231, 236], [236, 241], [241, 245], [246, 252]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[1, 2], [2, 7], [7, 11], [12, 14], [15, 17], [18, 22], [23, 26], [26, 30], [30, 36], [37, 38], [38, 39], [39, 40], [40, 41], [41, 46]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[55, 56], [56, 59], [59, 60], [61, 64], [65, 70], [70, 75], [76, 80], [80, 85]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 24], [28, 29], [32, 34]]}, {'green': [52, 63], 'red_start': 68, 'occ': [[52, 54], [58, 60], [65, 66], [67, 69], [72, 73], [79, 80]]}, {'green': [91, 120], 'red_start': 123, 'occ': [[83, 85], [86, 87], [90, 92], [100, 101], [109, 111], [113, 114], [117, 118], [121, 122], [124, 126], [127, 128], [134, 136]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 45], 'red_start': 50, 'occ': [[2, 3], [9, 10], [15, 17], [22, 23], [24, 26], [28, 29], [32, 33], [40, 42], [49, 51], [59, 60]]}, {'green': [75, 90], 'red_start': 94, 'occ': [[71, 72], [77, 78], [81, 82], [85, 86], [93, 94], [96, 97], [102, 104]]}, {'green': [118, 137], 'red_start': 142, 'occ': [[114, 117], [117, 118], [119, 122], [123, 127], [127, 131], [131, 132], [133, 134], [135, 141], [141, 142], [143, 147], [147, 152], [152, 158]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[165, 167], [174, 175], [180, 182], [187, 188], [190, 192], [200, 202], [208, 210], [211, 213], [218, 219]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[-2, 0], [1, 2], [6, 7], [13, 15], [22, 23], [28, 29], [32, 33], [36, 37], [39, 41]]}, {'green': [60, 92], 'red_start': 97, 'occ': [[58, 63], [63, 68], [68, 70], [71, 77], [77, 83], [84, 85], [86, 90], [90, 96], [96, 97], [98, 103], [104, 108], [108, 111]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 1 | {'fails': [0, 2, 3], 'pct': 75} | {'fails': [0, 2], 'pct': 50} | Failed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [0, 3], 'pct': 40} | {'fails': [3], 'pct': 20} | Failed |
| timing oracle 4 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 5 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 6 | {'fails': [0, 1], 'pct': 66} | {'fails': [0, 1], 'pct': 66} | Passed |
| timing oracle 7 | {'fails': [1, 2], 'pct': 40} | {'fails': [1, 2], 'pct': 40} | Passed |
SHA-256 / a10e6b3dda49f9f9a2da9f0e25fd120d550ee97b1191115f989620749adb3449
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
fails = []
for i, cy in enumerate(x['cycles']):
gs, ge = cy['green']
rs = cy['red_start']
def busy(lo, hi):
return sum(max(0, min(off, hi) - max(on, lo)) for on, off in cy['occ'])
gl = ge - gs
gor = Fraction(busy(gs, ge), gl)
ror = Fraction(busy(rs, rs + 5), 5)
if gor >= Fraction(4, 5) and ror >= Fraction(4, 5):
fails.append(i)
return {'fails': fails, 'pct': len(fails) * 100 // len(x['cycles'])}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycles': [{'green': [8, 41], 'red_start': 45, 'occ': [[7, 9], [15, 17], [18, 19], [27, 29], [34, 36], [38, 40], [45, 47], [48, 49], [56, 57]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 36], 'red_start': 39, 'occ': [[-2, 4], [5, 6], [6, 7], [7, 8], [8, 13], [13, 15], [16, 20], [21, 22], [22, 24], [24, 27], [28, 33], [33, 35], [36, 42], [43, 45], [45, 47], [47, 48], [49, 54]]}, {'green': [59, 79], 'red_start': 82, 'occ': [[58, 59], [62, 63], [69, 70], [73, 75], [81, 82], [83, 85], [89, 91]]}, {'green': [111, 142], 'red_start': 147, 'occ': [[102, 107], [107, 112], [112, 113], [114, 116], [117, 120], [121, 126], [126, 128], [129, 134], [134, 139], [139, 142], [143, 149], [150, 152], [153, 158], [158, 163]]}, {'green': [167, 187], 'red_start': 192, 'occ': [[164, 169], [170, 171], [172, 174], [175, 177], [178, 182], [183, 186], [186, 190], [190, 193], [193, 194], [195, 196], [196, 197], [198, 200], [201, 202], [202, 207]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [7, 21], 'red_start': 25, 'occ': [[7, 9], [13, 15], [19, 21], [25, 27], [34, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 30], 'red_start': 35, 'occ': [[2, 7], [7, 13], [14, 18], [19, 22], [23, 25], [26, 28], [29, 35], [35, 37], [37, 40], [40, 42], [42, 45], [46, 49]]}, {'green': [60, 100], 'red_start': 105, 'occ': [[58, 59], [67, 68], [70, 72], [78, 79], [80, 81], [85, 86], [90, 92], [97, 98], [103, 104], [106, 108], [114, 116]]}, {'green': [127, 138], 'red_start': 143, 'occ': [[119, 123], [123, 128], [129, 130], [130, 133], [133, 139], [140, 144], [145, 146], [147, 148], [149, 151], [152, 158]]}, {'green': [170, 186], 'red_start': 190, 'occ': [[167, 172], [172, 174], [175, 178], [178, 182], [183, 189], [189, 194], [195, 197], [197, 203]]}, {'green': [214, 224], 'red_start': 227, 'occ': [[214, 215], [219, 220], [221, 223], [225, 226], [229, 230], [234, 236], [237, 239]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [7, 23], 'red_start': 26, 'occ': [[-2, 3], [4, 9], [9, 14], [15, 20], [20, 26], [27, 30], [31, 33], [33, 38]]}, {'green': [52, 71], 'red_start': 75, 'occ': [[48, 50], [51, 52], [54, 55], [62, 63], [71, 73], [77, 78], [83, 85]]}, {'green': [98, 112], 'red_start': 117, 'occ': [[91, 93], [94, 95], [97, 99], [104, 105], [107, 109], [117, 118], [121, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 43], 'red_start': 46, 'occ': [[3, 5], [5, 7], [8, 9], [9, 12], [13, 14], [15, 17], [18, 24], [25, 31], [32, 36], [37, 42], [42, 44], [44, 46], [46, 47], [48, 51], [52, 54], [54, 56], [57, 61]]}, {'green': [71, 83], 'red_start': 87, 'occ': [[62, 63], [64, 69], [69, 73], [74, 78], [78, 80], [81, 86], [86, 90], [91, 95], [95, 99]]}, {'green': [116, 131], 'red_start': 136, 'occ': [[111, 113], [115, 116], [117, 119], [127, 128], [129, 131], [136, 137], [143, 145], [147, 148]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 46, 'occ': [[0, 1], [7, 8], [10, 12], [17, 18], [22, 23], [28, 30], [31, 33], [40, 41], [44, 45], [48, 50], [57, 59]]}, {'green': [66, 97], 'red_start': 100, 'occ': [[56, 59], [60, 63], [63, 68], [68, 72], [73, 79], [80, 82], [82, 84], [85, 90], [90, 94], [94, 97], [98, 104], [105, 111], [111, 112]]}, {'green': [121, 146], 'red_start': 151, 'occ': [[113, 114], [114, 120], [121, 125], [125, 130], [130, 132], [133, 138], [138, 144], [144, 148], [149, 151], [152, 156], [157, 159], [160, 165]]}, {'green': [179, 190], 'red_start': 194, 'occ': [[173, 175], [181, 182], [187, 189], [197, 199], [205, 207]]}, {'green': [223, 240], 'red_start': 243, 'occ': [[214, 215], [223, 224], [227, 228], [231, 232], [240, 241], [242, 244], [251, 253]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [1, 21], 'red_start': 25, 'occ': [[-8, -6], [1, 3], [5, 6], [7, 9], [11, 13], [19, 20], [23, 24], [32, 34], [36, 37]]}, {'green': [48, 83], 'red_start': 87, 'occ': [[48, 50], [54, 55], [60, 62], [65, 66], [67, 69], [74, 76], [80, 82], [90, 92], [96, 98]]}, {'green': [117, 129], 'red_start': 133, 'occ': [[110, 111], [118, 119], [124, 125], [126, 128], [134, 135], [136, 138], [140, 142]]}, {'green': [157, 193], 'red_start': 196, 'occ': [[148, 149], [150, 155], [156, 160], [161, 163], [163, 167], [168, 174], [174, 180], [180, 181], [181, 183], [183, 184], [185, 190], [190, 195], [195, 198], [199, 205], [205, 209]]}, {'green': [224, 243], 'red_start': 246, 'occ': [[216, 221], [221, 222], [222, 225], [226, 232], [233, 238], [239, 240], [241, 244], [244, 245], [245, 249], [250, 255], [255, 256], [257, 259]]}]}, {'fails': [3], 'pct': 20}), ({'cycles': [{'green': [10, 20], 'red_start': 25, 'occ': [[9, 10], [18, 19], [20, 22], [27, 28], [35, 37]]}, {'green': [51, 91], 'red_start': 94, 'occ': [[46, 50], [51, 53], [54, 60], [60, 62], [62, 68], [69, 74], [74, 77], [77, 80], [80, 81], [82, 83], [84, 86], [86, 87], [87, 88], [89, 95], [95, 99], [99, 100], [101, 106]]}, {'green': [119, 132], 'red_start': 137, 'occ': [[109, 110], [115, 117], [120, 121], [128, 130], [136, 138], [139, 141], [146, 147]]}, {'green': [166, 190], 'red_start': 194, 'occ': [[160, 161], [168, 169], [177, 178], [186, 187], [190, 192], [196, 198], [199, 201]]}, {'green': [223, 238], 'red_start': 243, 'occ': [[223, 224], [227, 229], [231, 233], [236, 237], [244, 245], [247, 248], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [9, 29], 'red_start': 34, 'occ': [[-1, 0], [2, 4], [11, 12], [19, 20], [21, 23], [29, 30], [33, 34], [42, 44]]}, {'green': [61, 77], 'red_start': 80, 'occ': [[53, 54], [58, 59], [61, 62], [66, 67], [68, 69], [77, 79], [87, 89]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 22], 'red_start': 25, 'occ': [[5, 6], [7, 9], [10, 12], [12, 15], [16, 17], [17, 21], [22, 24], [25, 29], [30, 36], [36, 39]]}, {'green': [45, 69], 'red_start': 74, 'occ': [[40, 42], [47, 48], [52, 54], [59, 60], [63, 64], [69, 71], [74, 76], [84, 85]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 45], 'red_start': 50, 'occ': [[3, 5], [6, 8], [9, 10], [11, 12], [18, 19], [24, 26], [32, 34], [40, 41], [48, 49], [52, 54], [57, 59]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 35], 'red_start': 40, 'occ': [[2, 3], [4, 7], [7, 12], [12, 13], [13, 18], [18, 22], [23, 25], [26, 31], [32, 36], [37, 43], [43, 48], [48, 53]]}, {'green': [70, 110], 'red_start': 115, 'occ': [[63, 64], [69, 71], [75, 76], [80, 82], [85, 87], [94, 95], [103, 105], [107, 109], [114, 116], [122, 124]]}, {'green': [139, 154], 'red_start': 157, 'occ': [[129, 131], [137, 139], [146, 147], [151, 153], [161, 163]]}, {'green': [185, 203], 'red_start': 208, 'occ': [[176, 177], [177, 179], [179, 182], [182, 186], [187, 192], [193, 198], [199, 202], [202, 207], [208, 213], [213, 214], [215, 221]]}]}, {'fails': [0, 3], 'pct': 50}), ({'cycles': [{'green': [4, 31], 'red_start': 35, 'occ': [[-5, -3], [-1, 0], [4, 6], [7, 8], [15, 17], [24, 26], [32, 34], [41, 42]]}, {'green': [61, 73], 'red_start': 77, 'occ': [[58, 59], [61, 62], [70, 72], [80, 81], [85, 86]]}, {'green': [102, 121], 'red_start': 126, 'occ': [[100, 101], [101, 105], [105, 109], [110, 116], [117, 120], [120, 124], [125, 129], [130, 132], [132, 136], [136, 140]]}, {'green': [150, 186], 'red_start': 190, 'occ': [[142, 143], [151, 153], [155, 157], [164, 166], [172, 174], [178, 179], [184, 185], [193, 194], [197, 198]]}, {'green': [212, 245], 'red_start': 250, 'occ': [[208, 213], [214, 215], [215, 220], [220, 222], [222, 224], [224, 228], [229, 234], [235, 237], [237, 240], [240, 245], [245, 247], [248, 252], [252, 255], [256, 262]]}]}, {'fails': [2, 4], 'pct': 40})], [({'cycles': [{'green': [9, 38], 'red_start': 43, 'occ': [[4, 6], [13, 14], [21, 23], [28, 30], [34, 35], [36, 37], [38, 40], [41, 43], [44, 45], [52, 54]]}, {'green': [69, 105], 'red_start': 108, 'occ': [[61, 62], [70, 72], [79, 80], [87, 89], [94, 95], [101, 103], [104, 105], [110, 112], [114, 115]]}, {'green': [134, 168], 'red_start': 172, 'occ': [[128, 134], [135, 140], [141, 144], [145, 151], [151, 157], [158, 163], [164, 165], [165, 171], [172, 177], [178, 181], [182, 184]]}, {'green': [201, 226], 'red_start': 230, 'occ': [[199, 201], [202, 203], [204, 207], [207, 212], [213, 219], [220, 224], [224, 225], [226, 228], [229, 233], [233, 236], [236, 238], [239, 243]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -3], [-2, 0], [1, 5], [6, 9], [10, 12], [12, 16], [17, 20], [21, 27], [28, 34], [34, 40]]}, {'green': [52, 63], 'red_start': 66, 'occ': [[44, 50], [51, 56], [57, 62], [63, 65], [66, 72], [72, 78]]}, {'green': [87, 118], 'red_start': 121, 'occ': [[84, 90], [90, 95], [95, 100], [101, 106], [107, 110], [110, 111], [112, 117], [117, 122], [122, 127], [128, 130], [131, 134]]}, {'green': [144, 171], 'red_start': 175, 'occ': [[135, 137], [143, 144], [151, 153], [161, 163], [164, 165], [166, 167], [171, 173], [178, 180], [183, 184]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [7, 29], 'red_start': 32, 'occ': [[2, 4], [6, 8], [11, 12], [14, 15], [22, 24], [31, 33], [36, 37], [38, 39], [43, 44]]}, {'green': [52, 69], 'red_start': 74, 'occ': [[47, 51], [51, 53], [53, 56], [57, 62], [62, 67], [67, 71], [72, 74], [74, 79], [79, 85]]}, {'green': [94, 114], 'red_start': 119, 'occ': [[93, 98], [98, 101], [102, 104], [105, 110], [110, 114], [114, 116], [116, 120], [121, 122], [122, 125], [126, 130], [130, 132]]}, {'green': [141, 170], 'red_start': 175, 'occ': [[138, 141], [141, 146], [146, 152], [153, 157], [158, 163], [164, 168], [168, 172], [173, 177], [177, 183], [183, 186], [186, 187]]}, {'green': [204, 237], 'red_start': 240, 'occ': [[196, 201], [202, 204], [204, 210], [210, 212], [212, 214], [214, 218], [218, 221], [221, 224], [225, 230], [231, 233], [234, 235], [235, 238], [238, 240], [241, 245], [246, 251]]}]}, {'fails': [1, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [6, 16], 'red_start': 21, 'occ': [[1, 2], [6, 7], [9, 10], [17, 18], [26, 27], [32, 33]]}, {'green': [44, 64], 'red_start': 69, 'occ': [[44, 46], [47, 48], [54, 55], [57, 58], [64, 65], [72, 74]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 18], 'red_start': 21, 'occ': [[-3, 1], [2, 6], [7, 10], [10, 16], [17, 21], [22, 23], [24, 29], [30, 31], [32, 34]]}, {'green': [43, 78], 'red_start': 83, 'occ': [[34, 35], [36, 37], [42, 43], [47, 49], [55, 56], [61, 62], [69, 71], [79, 80], [87, 88]]}, {'green': [107, 127], 'red_start': 132, 'occ': [[102, 104], [110, 111], [119, 120], [126, 128], [132, 134], [138, 140]]}, {'green': [159, 170], 'red_start': 175, 'occ': [[157, 159], [160, 162], [163, 166], [167, 168], [169, 170], [170, 174], [175, 181], [182, 183], [183, 185], [186, 191]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 35], 'red_start': 40, 'occ': [[3, 5], [11, 12], [14, 16], [22, 24], [30, 31], [35, 37], [41, 43], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 26, 'occ': [[4, 6], [11, 12], [20, 22], [28, 30], [35, 36]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})], [({'cycles': [{'green': [8, 18], 'red_start': 22, 'occ': [[-2, -1], [4, 5], [6, 8], [9, 11], [16, 17], [25, 26], [28, 30]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 43], 'red_start': 47, 'occ': [[2, 7], [7, 11], [12, 16], [16, 19], [20, 23], [24, 30], [30, 34], [35, 38], [38, 44], [44, 45], [45, 48], [49, 53], [53, 58]]}, {'green': [73, 108], 'red_start': 112, 'occ': [[70, 72], [72, 76], [77, 80], [80, 86], [86, 90], [91, 97], [97, 101], [102, 108], [108, 112], [112, 117], [117, 120], [121, 127]]}, {'green': [137, 160], 'red_start': 165, 'occ': [[131, 132], [136, 138], [139, 141], [146, 148], [153, 154], [162, 163], [167, 169], [172, 174]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 41], 'red_start': 45, 'occ': [[1, 3], [7, 8], [10, 11], [14, 15], [22, 23], [29, 31], [34, 35], [39, 40], [46, 48], [54, 56]]}, {'green': [75, 98], 'red_start': 101, 'occ': [[69, 73], [74, 78], [79, 85], [85, 88], [89, 95], [96, 98], [99, 101], [102, 108], [108, 111], [112, 114]]}, {'green': [131, 145], 'red_start': 150, 'occ': [[127, 132], [133, 135], [135, 140], [141, 142], [142, 146], [147, 151], [152, 157], [158, 161], [161, 166]]}, {'green': [178, 195], 'red_start': 200, 'occ': [[173, 174], [175, 179], [179, 182], [183, 187], [188, 189], [189, 193], [194, 196], [196, 202], [202, 208], [208, 209], [209, 210], [211, 217]]}, {'green': [228, 260], 'red_start': 264, 'occ': [[223, 224], [224, 228], [229, 232], [232, 235], [235, 237], [238, 239], [240, 242], [243, 245], [246, 248], [249, 255], [255, 258], [258, 259], [260, 261], [262, 263], [263, 269], [269, 270], [271, 274], [275, 279]]}]}, {'fails': [1, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[-4, -2], [-1, 5], [6, 12], [13, 16], [17, 18], [19, 23], [24, 25], [25, 31], [32, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 31], 'red_start': 36, 'occ': [[-3, 3], [3, 8], [8, 9], [10, 12], [13, 14], [15, 17], [17, 21], [22, 23], [24, 30], [30, 35], [36, 40], [40, 42], [42, 48]]}, {'green': [59, 81], 'red_start': 85, 'occ': [[53, 55], [61, 63], [70, 72], [79, 80], [87, 88], [91, 92], [96, 98]]}, {'green': [110, 126], 'red_start': 129, 'occ': [[109, 111], [111, 117], [118, 119], [120, 124], [125, 129], [130, 131], [131, 136], [137, 138], [138, 142]]}, {'green': [154, 167], 'red_start': 170, 'occ': [[149, 150], [157, 159], [161, 162], [166, 168], [175, 177], [180, 181]]}, {'green': [190, 217], 'red_start': 221, 'occ': [[190, 195], [195, 200], [200, 206], [206, 207], [208, 213], [213, 215], [216, 222], [223, 229], [229, 233]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 43], 'red_start': 47, 'occ': [[1, 3], [6, 8], [12, 14], [15, 16], [22, 23], [28, 30], [35, 36], [39, 40], [43, 45], [48, 49], [54, 55]]}, {'green': [73, 111], 'red_start': 115, 'occ': [[71, 73], [81, 82], [89, 90], [94, 96], [99, 100], [102, 104], [107, 109], [110, 112], [113, 115], [120, 122], [126, 127]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 25], 'red_start': 30, 'occ': [[1, 3], [8, 10], [11, 12], [20, 21], [25, 27], [31, 33], [39, 41]]}, {'green': [51, 61], 'red_start': 64, 'occ': [[51, 53], [60, 61], [64, 66], [70, 72]]}, {'green': [92, 107], 'red_start': 111, 'occ': [[90, 91], [94, 95], [99, 100], [107, 108], [109, 110], [117, 118]]}, {'green': [137, 162], 'red_start': 166, 'occ': [[135, 136], [141, 143], [148, 150], [152, 153], [159, 161], [163, 165], [169, 171], [176, 177]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [4, 18], 'red_start': 23, 'occ': [[-3, -1], [5, 7], [10, 12], [20, 22], [28, 30], [32, 34]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 47], 'red_start': 50, 'occ': [[8, 10], [10, 13], [14, 16], [17, 21], [22, 28], [29, 31], [31, 33], [33, 37], [37, 43], [43, 49], [49, 54], [54, 60], [61, 63]]}, {'green': [80, 93], 'red_start': 96, 'occ': [[72, 74], [76, 78], [86, 87], [90, 91], [99, 101], [103, 104], [105, 106]]}, {'green': [116, 156], 'red_start': 159, 'occ': [[112, 114], [122, 124], [125, 127], [128, 130], [135, 137], [140, 141], [149, 150], [158, 159], [161, 163]]}, {'green': [181, 192], 'red_start': 196, 'occ': [[181, 183], [184, 186], [193, 194], [195, 197], [201, 202]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [2, 28], 'red_start': 31, 'occ': [[-8, -3], [-2, -1], [-1, 5], [5, 7], [8, 13], [13, 15], [15, 20], [20, 26], [27, 30], [30, 34], [35, 37], [38, 39], [40, 46]]}, {'green': [53, 83], 'red_start': 87, 'occ': [[50, 51], [57, 58], [59, 61], [66, 68], [70, 71], [73, 74], [82, 84], [91, 93], [96, 98]]}, {'green': [116, 135], 'red_start': 138, 'occ': [[116, 120], [120, 122], [122, 127], [127, 133], [134, 137], [138, 144], [144, 150]]}, {'green': [160, 181], 'red_start': 185, 'occ': [[160, 161], [161, 162], [163, 169], [170, 174], [174, 177], [178, 180], [181, 183], [184, 186], [187, 189], [190, 194], [195, 197]]}, {'green': [208, 233], 'red_start': 236, 'occ': [[199, 202], [203, 208], [209, 214], [215, 219], [219, 220], [221, 223], [223, 229], [229, 230], [231, 236], [236, 241], [241, 245], [246, 252]]}]}, {'fails': [0, 2, 4], 'pct': 60}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[1, 2], [2, 7], [7, 11], [12, 14], [15, 17], [18, 22], [23, 26], [26, 30], [30, 36], [37, 38], [38, 39], [39, 40], [40, 41], [41, 46]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[55, 56], [56, 59], [59, 60], [61, 64], [65, 70], [70, 75], [76, 80], [80, 85]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [3, 21], 'red_start': 24, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 24], [28, 29], [32, 34]]}, {'green': [52, 63], 'red_start': 68, 'occ': [[52, 54], [58, 60], [65, 66], [67, 69], [72, 73], [79, 80]]}, {'green': [91, 120], 'red_start': 123, 'occ': [[83, 85], [86, 87], [90, 92], [100, 101], [109, 111], [113, 114], [117, 118], [121, 122], [124, 126], [127, 128], [134, 136]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 45], 'red_start': 50, 'occ': [[2, 3], [9, 10], [15, 17], [22, 23], [24, 26], [28, 29], [32, 33], [40, 42], [49, 51], [59, 60]]}, {'green': [75, 90], 'red_start': 94, 'occ': [[71, 72], [77, 78], [81, 82], [85, 86], [93, 94], [96, 97], [102, 104]]}, {'green': [118, 137], 'red_start': 142, 'occ': [[114, 117], [117, 118], [119, 122], [123, 127], [127, 131], [131, 132], [133, 134], [135, 141], [141, 142], [143, 147], [147, 152], [152, 158]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[165, 167], [174, 175], [180, 182], [187, 188], [190, 192], [200, 202], [208, 210], [211, 213], [218, 219]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[-2, 0], [1, 2], [6, 7], [13, 15], [22, 23], [28, 29], [32, 33], [36, 37], [39, 41]]}, {'green': [60, 92], 'red_start': 97, 'occ': [[58, 63], [63, 68], [68, 70], [71, 77], [77, 83], [84, 85], [86, 90], [90, 96], [96, 97], [98, 103], [104, 108], [108, 111]]}]}, {'fails': [1], 'pct': 50}), ({'cycles': [{'green': [0, 20], 'red_start': 24, 'occ': [[0, 16], [23, 28]]}, {'green': [50, 70], 'red_start': 74, 'occ': [[50, 67], [74, 78]]}, {'green': [100, 120], 'red_start': 124, 'occ': [[100, 130]]}]}, {'fails': [0, 1, 2], 'pct': 100})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 1 | {'fails': [0, 2], 'pct': 50} | {'fails': [0, 2], 'pct': 50} | Passed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [3], 'pct': 20} | {'fails': [3], 'pct': 20} | Passed |
| timing oracle 4 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 5 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 6 | {'fails': [0, 1], 'pct': 66} | {'fails': [0, 1], 'pct': 66} | Passed |
| timing oracle 7 | {'fails': [1, 2], 'pct': 40} | {'fails': [1, 2], 'pct': 40} | Passed |
SHA-256 / 36241f507993bb7cf451abf4e36f2538939882db8964f9fb2c5f1ee3a1a0bf22
Verification & scope
A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:00.670828+00:00.
Case digest / e9d580fd3d57510cee5b4587bcbe499e3a05dbb877ac8beccfa75e4dc60f2a30