FA-68266 / Traffic signal timing plans / Open access
Split failure detection: split failure requires strictly more than 80 percent · case 01
Split failure detection returns a wrong result when split failure requires strictly more than 80 percent.
ROOT CAUSE
Cycles at exactly 80 percent occupancy are not flagged.
VERIFIED REPAIR
Restore the failure thresholds rule so that the step reads `gor >= Fraction(4, 5) and ror >= Fraction(4, 5)`.
Unsuccessful approach: Flagging when either ratio is high reports ordinary heavy-demand cycles that did clear their queue.
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), 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': [0, 29], 'red_start': 32, 'occ': [[-6, -4], [1, 2], [7, 9], [17, 19], [22, 23], [31, 33], [34, 36], [42, 43]]}, {'green': [61, 71], 'red_start': 74, 'occ': [[57, 59], [61, 63], [65, 66], [72, 73], [75, 76], [81, 82]]}, {'green': [100, 111], 'red_start': 116, 'occ': [[91, 92], [93, 95], [101, 103], [104, 106], [112, 113], [121, 123]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 16], 'red_start': 19, 'occ': [[2, 4], [8, 10], [16, 18], [21, 22], [24, 25], [30, 31]]}, {'green': [49, 73], 'red_start': 77, 'occ': [[49, 51], [56, 57], [58, 59], [67, 68], [74, 75], [81, 82], [87, 89]]}, {'green': [107, 122], 'red_start': 126, 'occ': [[106, 108], [115, 117], [121, 123], [130, 131]]}]}, {'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': [2, 17], 'red_start': 22, 'occ': [[2, 3], [4, 6], [7, 8], [8, 12], [13, 18], [18, 22], [23, 26], [27, 31], [32, 38]]}, {'green': [51, 68], 'red_start': 73, 'occ': [[47, 48], [51, 53], [60, 61], [62, 63], [68, 69], [73, 75], [82, 83], [84, 86]]}, {'green': [97, 132], 'red_start': 137, 'occ': [[89, 94], [94, 95], [96, 97], [98, 102], [103, 107], [107, 109], [109, 110], [111, 116], [117, 123], [124, 127], [128, 133], [133, 137], [138, 139], [140, 143], [144, 146], [147, 149]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 26], 'red_start': 30, 'occ': [[-4, 0], [0, 6], [6, 8], [8, 10], [11, 14], [14, 18], [18, 22], [22, 24], [25, 27], [27, 31], [32, 35], [35, 37], [37, 43]]}, {'green': [53, 88], 'red_start': 93, 'occ': [[50, 52], [54, 56], [59, 60], [68, 69], [77, 78], [82, 84], [86, 88], [91, 92], [100, 101]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[0, 2], [7, 8], [13, 15], [21, 23], [26, 27], [33, 35], [42, 44], [47, 49]]}, {'green': [64, 74], 'red_start': 77, 'occ': [[55, 60], [61, 62], [62, 67], [67, 72], [72, 73], [73, 78], [78, 83], [84, 87], [87, 93]]}, {'green': [106, 124], 'red_start': 127, 'occ': [[100, 105], [106, 111], [111, 113], [113, 119], [119, 120], [120, 122], [122, 128], [129, 133], [133, 139]]}, {'green': [149, 173], 'red_start': 177, 'occ': [[139, 141], [141, 145], [146, 151], [152, 155], [156, 161], [162, 163], [164, 169], [170, 173], [174, 176], [177, 180], [181, 182], [183, 186], [186, 189]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[4, 6], [9, 11], [19, 21], [27, 28], [32, 34]]}, {'green': [57, 80], 'red_start': 84, 'occ': [[51, 56], [57, 59], [59, 63], [64, 70], [71, 74], [74, 76], [76, 82], [83, 88], [89, 95], [95, 97]]}, {'green': [107, 141], 'red_start': 146, 'occ': [[104, 109], [109, 114], [115, 119], [120, 126], [126, 132], [132, 136], [137, 143], [144, 147], [147, 149], [150, 153], [153, 158]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [9, 34], 'red_start': 37, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 25], [28, 30], [33, 35], [38, 39], [44, 45], [46, 48]]}, {'green': [61, 96], 'red_start': 99, 'occ': [[58, 59], [64, 65], [69, 70], [73, 75], [80, 82], [90, 92], [99, 100], [103, 104], [110, 112]]}, {'green': [125, 154], 'red_start': 157, 'occ': [[117, 119], [122, 124], [131, 133], [138, 139], [145, 146], [152, 153], [154, 156], [163, 164]]}, {'green': [180, 209], 'red_start': 213, 'occ': [[179, 181], [188, 189], [195, 196], [203, 205], [210, 211], [219, 220]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [2, 33], 'red_start': 36, 'occ': [[-7, -6], [-1, 1], [3, 4], [9, 11], [17, 19], [22, 23], [25, 27], [29, 30], [31, 32], [40, 41], [42, 43], [47, 48]]}, {'green': [64, 85], 'red_start': 88, 'occ': [[60, 62], [69, 70], [74, 76], [81, 82], [87, 88], [96, 97]]}, {'green': [110, 133], 'red_start': 137, 'occ': [[105, 107], [107, 110], [111, 116], [117, 120], [120, 122], [123, 128], [128, 131], [131, 136], [136, 140], [141, 146], [147, 150]]}, {'green': [165, 181], 'red_start': 185, 'occ': [[155, 157], [162, 164], [169, 170], [178, 180], [185, 186], [194, 196]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [10, 28], 'red_start': 31, 'occ': [[4, 5], [13, 15], [19, 21], [24, 26], [31, 33], [40, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[9, 10], [18, 19], [21, 22], [28, 29], [33, 34], [36, 37]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[46, 48], [53, 54], [57, 59], [67, 68], [73, 74], [80, 82]]}, {'green': [91, 117], 'red_start': 121, 'occ': [[86, 91], [92, 96], [96, 101], [101, 105], [105, 107], [107, 113], [113, 119], [119, 122], [122, 124], [124, 129], [130, 135]]}]}, {'fails': [2], 'pct': 33}), ({'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, 22], 'red_start': 25, 'occ': [[-4, -3], [-2, 4], [5, 6], [6, 12], [13, 19], [20, 21], [22, 23], [24, 26], [27, 30], [31, 34], [34, 39]]}, {'green': [46, 77], 'red_start': 81, 'occ': [[39, 41], [43, 44], [45, 46], [52, 53], [58, 59], [63, 64], [67, 69], [72, 73], [78, 79], [82, 84], [90, 92]]}, {'green': [108, 129], 'red_start': 132, 'occ': [[98, 102], [102, 107], [108, 111], [111, 112], [112, 113], [113, 119], [119, 125], [126, 127], [127, 131], [132, 137], [137, 138], [138, 139], [140, 143], [143, 149]]}, {'green': [153, 163], 'red_start': 168, 'occ': [[149, 155], [155, 156], [157, 159], [160, 162], [162, 165], [166, 169], [170, 171], [172, 175], [176, 182]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[-1, 1], [8, 10], [17, 19], [22, 23]]}, {'green': [43, 75], 'red_start': 80, 'occ': [[36, 38], [39, 41], [41, 44], [45, 49], [50, 56], [56, 62], [62, 67], [68, 70], [70, 73], [74, 80], [81, 86], [87, 93]]}, {'green': [109, 121], 'red_start': 126, 'occ': [[103, 106], [107, 113], [113, 119], [119, 121], [122, 128], [129, 135], [135, 139]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [10, 39], 'red_start': 44, 'occ': [[7, 9], [17, 19], [27, 28], [30, 31], [34, 35], [39, 41], [43, 44], [50, 51]]}, {'green': [66, 94], 'red_start': 97, 'occ': [[56, 57], [62, 64], [66, 68], [74, 76], [80, 82], [88, 89], [95, 97], [100, 101], [104, 105]]}, {'green': [126, 147], 'red_start': 152, 'occ': [[118, 119], [123, 124], [128, 129], [134, 135], [137, 139], [143, 145], [146, 148], [149, 151], [159, 161]]}, {'green': [179, 199], 'red_start': 202, 'occ': [[175, 177], [182, 183], [186, 187], [190, 191], [195, 197], [198, 200], [203, 205], [212, 214]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[3, 5], [13, 15], [18, 20], [22, 24], [26, 27], [28, 29], [36, 38]]}, {'green': [47, 66], 'red_start': 70, 'occ': [[42, 43], [50, 51], [59, 61], [62, 64], [65, 66], [70, 71], [73, 75], [81, 82]]}, {'green': [90, 112], 'red_start': 116, 'occ': [[87, 88], [91, 92], [95, 97], [99, 100], [105, 106], [114, 116], [117, 119], [122, 123], [124, 126]]}, {'green': [143, 174], 'red_start': 179, 'occ': [[142, 143], [144, 147], [148, 151], [152, 155], [155, 159], [159, 163], [164, 167], [168, 170], [171, 172], [173, 174], [175, 176], [176, 182], [183, 189], [189, 190], [190, 195]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [0, 16], 'red_start': 20, 'occ': [[-7, -6], [-5, 0], [1, 4], [5, 8], [9, 12], [13, 14], [15, 16], [17, 19], [19, 25], [26, 32]]}, {'green': [48, 68], 'red_start': 72, 'occ': [[44, 46], [49, 51], [52, 53], [59, 60], [62, 63], [69, 70], [78, 79]]}, {'green': [98, 119], 'red_start': 124, 'occ': [[97, 99], [104, 106], [110, 111], [113, 115], [121, 123], [124, 126], [133, 135]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 19], 'red_start': 22, 'occ': [[0, 2], [9, 11], [15, 17], [25, 27], [33, 34]]}, {'green': [49, 62], 'red_start': 67, 'occ': [[49, 50], [58, 60], [67, 68], [75, 76]]}, {'green': [89, 115], 'red_start': 118, 'occ': [[84, 87], [88, 90], [91, 95], [96, 100], [101, 102], [103, 106], [106, 111], [111, 114], [114, 116], [116, 118], [119, 123], [124, 126], [126, 130]]}, {'green': [144, 165], 'red_start': 170, 'occ': [[138, 140], [140, 141], [142, 147], [148, 154], [155, 156], [156, 159], [159, 161], [161, 162], [162, 168], [169, 170], [170, 172], [172, 175], [176, 180], [181, 187]]}, {'green': [197, 224], 'red_start': 228, 'occ': [[188, 193], [193, 197], [197, 202], [202, 203], [203, 207], [207, 210], [210, 213], [214, 215], [216, 217], [217, 221], [221, 225], [226, 228], [228, 231], [231, 234], [235, 238], [239, 240]]}]}, {'fails': [2, 3, 4], 'pct': 60}), ({'cycles': [{'green': [2, 12], 'red_start': 15, 'occ': [[1, 2], [4, 6], [10, 11], [14, 15], [21, 23]]}, {'green': [43, 60], 'red_start': 64, 'occ': [[39, 41], [44, 45], [52, 54], [58, 59], [66, 68]]}, {'green': [84, 118], 'red_start': 122, 'occ': [[75, 76], [79, 80], [88, 89], [96, 98], [106, 108], [113, 115], [120, 121], [126, 127], [129, 131]]}, {'green': [143, 183], 'red_start': 186, 'occ': [[143, 144], [146, 148], [152, 153], [161, 163], [164, 165], [166, 167], [175, 176], [181, 183], [187, 188], [194, 196]]}]}, {'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': [0, 16], 'red_start': 20, 'occ': [[-10, -8], [0, 2], [3, 5], [9, 11], [15, 17], [23, 24], [25, 27]]}, {'green': [49, 81], 'red_start': 86, 'occ': [[45, 47], [47, 52], [52, 53], [53, 54], [55, 57], [57, 62], [62, 65], [65, 70], [70, 76], [77, 80], [80, 84], [85, 91], [91, 94], [95, 98]]}, {'green': [108, 148], 'red_start': 151, 'occ': [[106, 107], [107, 110], [110, 111], [111, 113], [114, 115], [116, 120], [121, 126], [127, 131], [132, 136], [137, 138], [139, 141], [141, 143], [144, 146], [146, 148], [148, 154], [155, 159], [159, 164]]}, {'green': [179, 212], 'red_start': 217, 'occ': [[179, 181], [182, 184], [192, 194], [200, 202], [205, 207], [211, 212], [215, 216], [222, 224]]}, {'green': [241, 255], 'red_start': 259, 'occ': [[234, 237], [237, 238], [239, 243], [244, 248], [248, 253], [254, 259], [259, 265], [266, 269], [270, 273]]}]}, {'fails': [1, 2, 4], 'pct': 60}), ({'cycles': [{'green': [2, 37], 'red_start': 41, 'occ': [[-2, 0], [6, 8], [11, 13], [19, 20], [27, 28], [32, 33], [37, 39], [43, 45], [49, 51]]}, {'green': [65, 95], 'red_start': 99, 'occ': [[57, 58], [58, 62], [63, 68], [69, 70], [71, 77], [78, 82], [83, 86], [87, 88], [88, 94], [95, 97], [98, 101], [101, 102], [103, 108], [109, 114]]}, {'green': [124, 153], 'red_start': 158, 'occ': [[118, 119], [124, 126], [134, 136], [143, 145], [150, 151], [153, 154], [159, 161], [169, 170]]}, {'green': [186, 212], 'red_start': 216, 'occ': [[176, 177], [177, 183], [183, 184], [184, 188], [189, 192], [193, 198], [198, 200], [200, 205], [206, 212], [213, 215], [215, 217], [218, 220], [221, 225], [225, 229]]}, {'green': [246, 267], 'red_start': 272, 'occ': [[246, 250], [250, 254], [254, 259], [259, 260], [261, 264], [264, 267], [267, 271], [271, 276], [277, 280], [280, 283], [283, 288]]}]}, {'fails': [1, 4], 'pct': 40}), ({'cycles': [{'green': [3, 13], 'red_start': 16, 'occ': [[2, 3], [6, 8], [16, 17], [21, 23]]}, {'green': [41, 52], 'red_start': 56, 'occ': [[35, 37], [39, 41], [48, 50], [57, 58], [66, 67]]}, {'green': [77, 107], 'red_start': 111, 'occ': [[73, 74], [78, 79], [83, 85], [93, 94], [100, 101], [104, 105], [106, 108], [111, 113], [120, 121]]}, {'green': [137, 148], 'red_start': 153, 'occ': [[128, 130], [133, 135], [137, 138], [144, 146], [148, 150], [158, 160], [163, 164]]}, {'green': [179, 194], 'red_start': 197, 'occ': [[172, 174], [177, 179], [183, 185], [192, 194], [197, 198], [202, 203]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 24, 'occ': [[-1, 0], [5, 6], [8, 9], [11, 13], [17, 18], [21, 22], [23, 24], [25, 26], [27, 29]]}]}, {'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': [1, 40], 'red_start': 45, 'occ': [[-9, -8], [-6, -4], [3, 4], [6, 8], [13, 14], [16, 18], [25, 26], [29, 31], [35, 36], [37, 38], [41, 43], [51, 52]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 31], 'red_start': 35, 'occ': [[-1, 5], [6, 12], [12, 14], [14, 17], [18, 23], [23, 28], [28, 30], [30, 32], [32, 35], [35, 38], [39, 45], [46, 49]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [8, 30], 'red_start': 35, 'occ': [[-2, 3], [3, 8], [9, 15], [16, 22], [22, 24], [24, 28], [29, 31], [31, 33], [34, 36], [37, 39], [40, 42], [43, 44], [44, 49]]}, {'green': [56, 89], 'red_start': 94, 'occ': [[53, 54], [54, 60], [60, 61], [62, 67], [67, 73], [74, 77], [78, 81], [81, 82], [82, 87], [88, 92], [93, 97], [97, 100], [100, 102], [102, 107]]}, {'green': [124, 135], 'red_start': 138, 'occ': [[117, 118], [123, 125], [130, 131], [137, 139], [140, 141], [147, 149]]}, {'green': [158, 192], 'red_start': 195, 'occ': [[158, 159], [160, 163], [163, 165], [166, 172], [173, 175], [176, 180], [180, 182], [182, 183], [184, 186], [187, 190], [191, 193], [194, 195], [195, 196], [196, 198], [199, 205], [205, 209]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [3, 21], 'red_start': 25, 'occ': [[2, 4], [10, 12], [13, 14], [18, 19], [23, 24], [30, 31]]}, {'green': [52, 87], 'red_start': 90, 'occ': [[43, 44], [47, 49], [52, 54], [60, 61], [64, 66], [71, 72], [75, 77], [85, 86], [93, 95]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 35], 'red_start': 39, 'occ': [[1, 2], [6, 8], [10, 12], [13, 15], [16, 17], [22, 24], [29, 31], [36, 38], [42, 43], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 43], 'red_start': 47, 'occ': [[5, 11], [11, 14], [15, 16], [16, 18], [18, 24], [25, 27], [28, 32], [32, 34], [34, 38], [39, 42], [43, 47], [47, 49], [50, 51], [52, 58], [58, 64]]}, {'green': [75, 105], 'red_start': 109, 'occ': [[67, 68], [75, 77], [82, 84], [85, 86], [88, 89], [92, 93], [101, 102], [107, 108], [109, 110], [115, 117]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 22], 'red_start': 27, 'occ': [[6, 12], [13, 19], [20, 21], [21, 23], [24, 27], [27, 29], [30, 32], [33, 35], [36, 42]]}]}, {'fails': [0], 'pct': 100})], [({'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': [2, 15], 'red_start': 19, 'occ': [[-8, -7], [-1, 1], [5, 6], [11, 12], [15, 16], [17, 19], [26, 28], [30, 32]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 39], 'red_start': 42, 'occ': [[-1, 0], [7, 8], [13, 15], [20, 22], [30, 32], [38, 39], [42, 43], [46, 47], [52, 53]]}, {'green': [66, 98], 'red_start': 101, 'occ': [[57, 59], [65, 66], [72, 73], [80, 82], [86, 87], [94, 96], [99, 101], [108, 109]]}, {'green': [126, 143], 'red_start': 146, 'occ': [[119, 120], [125, 127], [134, 135], [137, 138], [146, 147], [152, 154]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 28, 'occ': [[-3, -1], [4, 6], [11, 12], [17, 19], [20, 22], [29, 31], [34, 36]]}, {'green': [56, 93], 'red_start': 96, 'occ': [[54, 56], [63, 64], [65, 67], [70, 72], [75, 77], [78, 79], [87, 88], [92, 93], [95, 97], [102, 104], [105, 107]]}, {'green': [126, 145], 'red_start': 149, 'occ': [[120, 121], [123, 125], [131, 133], [140, 142], [144, 145], [146, 148], [156, 158]]}, {'green': [175, 208], 'red_start': 212, 'occ': [[169, 173], [174, 179], [179, 184], [185, 189], [189, 195], [196, 199], [200, 201], [201, 202], [203, 204], [205, 206], [206, 209], [209, 213], [214, 215], [216, 217], [217, 218], [219, 225]]}, {'green': [241, 266], 'red_start': 270, 'occ': [[238, 242], [243, 246], [247, 251], [251, 257], [257, 262], [262, 263], [264, 266], [266, 270], [270, 276], [277, 281]]}]}, {'fails': [4], 'pct': 20}), ({'cycles': [{'green': [1, 15], 'red_start': 19, 'occ': [[-6, -5], [-4, 2], [2, 3], [3, 5], [6, 10], [11, 14], [15, 17], [18, 23], [24, 28], [29, 33]]}, {'green': [43, 68], 'red_start': 71, 'occ': [[36, 38], [46, 47], [48, 50], [53, 54], [62, 63], [65, 66], [67, 68], [69, 71], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 22, 'occ': [[3, 4], [6, 7], [11, 13], [19, 20], [25, 27], [33, 35]]}, {'green': [44, 58], 'red_start': 61, 'occ': [[38, 40], [41, 43], [47, 48], [49, 50], [51, 52], [54, 55], [57, 58], [65, 66], [70, 71]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -6], [-6, -2], [-2, -1], [-1, 3], [3, 6], [6, 12], [12, 14], [14, 19], [19, 20], [20, 21], [22, 23], [24, 28], [29, 33], [34, 39]]}, {'green': [50, 80], 'red_start': 83, 'occ': [[50, 52], [59, 61], [63, 64], [65, 66], [73, 75], [81, 82], [87, 88], [91, 93]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [8, 29], 'red_start': 33, 'occ': [[6, 8], [9, 14], [14, 18], [19, 24], [24, 28], [29, 35], [36, 39], [39, 43], [44, 48]]}, {'green': [60, 84], 'red_start': 89, 'occ': [[54, 55], [63, 64], [69, 70], [75, 76], [78, 79], [87, 88], [93, 95], [98, 99]]}]}, {'fails': [0], 'pct': 50})]]
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': [], 'pct': 0} | Passed |
| timing oracle 2 | {'fails': [2], 'pct': 33} | {'fails': [0, 1, 2], 'pct': 100} | Failed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 4 | {'fails': [], 'pct': 0} | {'fails': [0], 'pct': 50} | Failed |
| timing oracle 5 | {'fails': [1], 'pct': 25} | {'fails': [1, 2], 'pct': 50} | Failed |
| timing oracle 6 | {'fails': [], 'pct': 0} | {'fails': [1, 2], 'pct': 66} | Failed |
| timing oracle 7 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
SHA-256 / ade9713848cc66bfcd2e0a55dc662db5d8f2f9a2e68e5e01b7b3b71bf69bb0c2
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, ge), gl)
ror = Fraction(busy(rs, rs + 5), 5)
if gor >= Fraction(4, 5) or 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': [0, 29], 'red_start': 32, 'occ': [[-6, -4], [1, 2], [7, 9], [17, 19], [22, 23], [31, 33], [34, 36], [42, 43]]}, {'green': [61, 71], 'red_start': 74, 'occ': [[57, 59], [61, 63], [65, 66], [72, 73], [75, 76], [81, 82]]}, {'green': [100, 111], 'red_start': 116, 'occ': [[91, 92], [93, 95], [101, 103], [104, 106], [112, 113], [121, 123]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 16], 'red_start': 19, 'occ': [[2, 4], [8, 10], [16, 18], [21, 22], [24, 25], [30, 31]]}, {'green': [49, 73], 'red_start': 77, 'occ': [[49, 51], [56, 57], [58, 59], [67, 68], [74, 75], [81, 82], [87, 89]]}, {'green': [107, 122], 'red_start': 126, 'occ': [[106, 108], [115, 117], [121, 123], [130, 131]]}]}, {'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': [2, 17], 'red_start': 22, 'occ': [[2, 3], [4, 6], [7, 8], [8, 12], [13, 18], [18, 22], [23, 26], [27, 31], [32, 38]]}, {'green': [51, 68], 'red_start': 73, 'occ': [[47, 48], [51, 53], [60, 61], [62, 63], [68, 69], [73, 75], [82, 83], [84, 86]]}, {'green': [97, 132], 'red_start': 137, 'occ': [[89, 94], [94, 95], [96, 97], [98, 102], [103, 107], [107, 109], [109, 110], [111, 116], [117, 123], [124, 127], [128, 133], [133, 137], [138, 139], [140, 143], [144, 146], [147, 149]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 26], 'red_start': 30, 'occ': [[-4, 0], [0, 6], [6, 8], [8, 10], [11, 14], [14, 18], [18, 22], [22, 24], [25, 27], [27, 31], [32, 35], [35, 37], [37, 43]]}, {'green': [53, 88], 'red_start': 93, 'occ': [[50, 52], [54, 56], [59, 60], [68, 69], [77, 78], [82, 84], [86, 88], [91, 92], [100, 101]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[0, 2], [7, 8], [13, 15], [21, 23], [26, 27], [33, 35], [42, 44], [47, 49]]}, {'green': [64, 74], 'red_start': 77, 'occ': [[55, 60], [61, 62], [62, 67], [67, 72], [72, 73], [73, 78], [78, 83], [84, 87], [87, 93]]}, {'green': [106, 124], 'red_start': 127, 'occ': [[100, 105], [106, 111], [111, 113], [113, 119], [119, 120], [120, 122], [122, 128], [129, 133], [133, 139]]}, {'green': [149, 173], 'red_start': 177, 'occ': [[139, 141], [141, 145], [146, 151], [152, 155], [156, 161], [162, 163], [164, 169], [170, 173], [174, 176], [177, 180], [181, 182], [183, 186], [186, 189]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[4, 6], [9, 11], [19, 21], [27, 28], [32, 34]]}, {'green': [57, 80], 'red_start': 84, 'occ': [[51, 56], [57, 59], [59, 63], [64, 70], [71, 74], [74, 76], [76, 82], [83, 88], [89, 95], [95, 97]]}, {'green': [107, 141], 'red_start': 146, 'occ': [[104, 109], [109, 114], [115, 119], [120, 126], [126, 132], [132, 136], [137, 143], [144, 147], [147, 149], [150, 153], [153, 158]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [9, 34], 'red_start': 37, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 25], [28, 30], [33, 35], [38, 39], [44, 45], [46, 48]]}, {'green': [61, 96], 'red_start': 99, 'occ': [[58, 59], [64, 65], [69, 70], [73, 75], [80, 82], [90, 92], [99, 100], [103, 104], [110, 112]]}, {'green': [125, 154], 'red_start': 157, 'occ': [[117, 119], [122, 124], [131, 133], [138, 139], [145, 146], [152, 153], [154, 156], [163, 164]]}, {'green': [180, 209], 'red_start': 213, 'occ': [[179, 181], [188, 189], [195, 196], [203, 205], [210, 211], [219, 220]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [2, 33], 'red_start': 36, 'occ': [[-7, -6], [-1, 1], [3, 4], [9, 11], [17, 19], [22, 23], [25, 27], [29, 30], [31, 32], [40, 41], [42, 43], [47, 48]]}, {'green': [64, 85], 'red_start': 88, 'occ': [[60, 62], [69, 70], [74, 76], [81, 82], [87, 88], [96, 97]]}, {'green': [110, 133], 'red_start': 137, 'occ': [[105, 107], [107, 110], [111, 116], [117, 120], [120, 122], [123, 128], [128, 131], [131, 136], [136, 140], [141, 146], [147, 150]]}, {'green': [165, 181], 'red_start': 185, 'occ': [[155, 157], [162, 164], [169, 170], [178, 180], [185, 186], [194, 196]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [10, 28], 'red_start': 31, 'occ': [[4, 5], [13, 15], [19, 21], [24, 26], [31, 33], [40, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[9, 10], [18, 19], [21, 22], [28, 29], [33, 34], [36, 37]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[46, 48], [53, 54], [57, 59], [67, 68], [73, 74], [80, 82]]}, {'green': [91, 117], 'red_start': 121, 'occ': [[86, 91], [92, 96], [96, 101], [101, 105], [105, 107], [107, 113], [113, 119], [119, 122], [122, 124], [124, 129], [130, 135]]}]}, {'fails': [2], 'pct': 33}), ({'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, 22], 'red_start': 25, 'occ': [[-4, -3], [-2, 4], [5, 6], [6, 12], [13, 19], [20, 21], [22, 23], [24, 26], [27, 30], [31, 34], [34, 39]]}, {'green': [46, 77], 'red_start': 81, 'occ': [[39, 41], [43, 44], [45, 46], [52, 53], [58, 59], [63, 64], [67, 69], [72, 73], [78, 79], [82, 84], [90, 92]]}, {'green': [108, 129], 'red_start': 132, 'occ': [[98, 102], [102, 107], [108, 111], [111, 112], [112, 113], [113, 119], [119, 125], [126, 127], [127, 131], [132, 137], [137, 138], [138, 139], [140, 143], [143, 149]]}, {'green': [153, 163], 'red_start': 168, 'occ': [[149, 155], [155, 156], [157, 159], [160, 162], [162, 165], [166, 169], [170, 171], [172, 175], [176, 182]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[-1, 1], [8, 10], [17, 19], [22, 23]]}, {'green': [43, 75], 'red_start': 80, 'occ': [[36, 38], [39, 41], [41, 44], [45, 49], [50, 56], [56, 62], [62, 67], [68, 70], [70, 73], [74, 80], [81, 86], [87, 93]]}, {'green': [109, 121], 'red_start': 126, 'occ': [[103, 106], [107, 113], [113, 119], [119, 121], [122, 128], [129, 135], [135, 139]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [10, 39], 'red_start': 44, 'occ': [[7, 9], [17, 19], [27, 28], [30, 31], [34, 35], [39, 41], [43, 44], [50, 51]]}, {'green': [66, 94], 'red_start': 97, 'occ': [[56, 57], [62, 64], [66, 68], [74, 76], [80, 82], [88, 89], [95, 97], [100, 101], [104, 105]]}, {'green': [126, 147], 'red_start': 152, 'occ': [[118, 119], [123, 124], [128, 129], [134, 135], [137, 139], [143, 145], [146, 148], [149, 151], [159, 161]]}, {'green': [179, 199], 'red_start': 202, 'occ': [[175, 177], [182, 183], [186, 187], [190, 191], [195, 197], [198, 200], [203, 205], [212, 214]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[3, 5], [13, 15], [18, 20], [22, 24], [26, 27], [28, 29], [36, 38]]}, {'green': [47, 66], 'red_start': 70, 'occ': [[42, 43], [50, 51], [59, 61], [62, 64], [65, 66], [70, 71], [73, 75], [81, 82]]}, {'green': [90, 112], 'red_start': 116, 'occ': [[87, 88], [91, 92], [95, 97], [99, 100], [105, 106], [114, 116], [117, 119], [122, 123], [124, 126]]}, {'green': [143, 174], 'red_start': 179, 'occ': [[142, 143], [144, 147], [148, 151], [152, 155], [155, 159], [159, 163], [164, 167], [168, 170], [171, 172], [173, 174], [175, 176], [176, 182], [183, 189], [189, 190], [190, 195]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [0, 16], 'red_start': 20, 'occ': [[-7, -6], [-5, 0], [1, 4], [5, 8], [9, 12], [13, 14], [15, 16], [17, 19], [19, 25], [26, 32]]}, {'green': [48, 68], 'red_start': 72, 'occ': [[44, 46], [49, 51], [52, 53], [59, 60], [62, 63], [69, 70], [78, 79]]}, {'green': [98, 119], 'red_start': 124, 'occ': [[97, 99], [104, 106], [110, 111], [113, 115], [121, 123], [124, 126], [133, 135]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 19], 'red_start': 22, 'occ': [[0, 2], [9, 11], [15, 17], [25, 27], [33, 34]]}, {'green': [49, 62], 'red_start': 67, 'occ': [[49, 50], [58, 60], [67, 68], [75, 76]]}, {'green': [89, 115], 'red_start': 118, 'occ': [[84, 87], [88, 90], [91, 95], [96, 100], [101, 102], [103, 106], [106, 111], [111, 114], [114, 116], [116, 118], [119, 123], [124, 126], [126, 130]]}, {'green': [144, 165], 'red_start': 170, 'occ': [[138, 140], [140, 141], [142, 147], [148, 154], [155, 156], [156, 159], [159, 161], [161, 162], [162, 168], [169, 170], [170, 172], [172, 175], [176, 180], [181, 187]]}, {'green': [197, 224], 'red_start': 228, 'occ': [[188, 193], [193, 197], [197, 202], [202, 203], [203, 207], [207, 210], [210, 213], [214, 215], [216, 217], [217, 221], [221, 225], [226, 228], [228, 231], [231, 234], [235, 238], [239, 240]]}]}, {'fails': [2, 3, 4], 'pct': 60}), ({'cycles': [{'green': [2, 12], 'red_start': 15, 'occ': [[1, 2], [4, 6], [10, 11], [14, 15], [21, 23]]}, {'green': [43, 60], 'red_start': 64, 'occ': [[39, 41], [44, 45], [52, 54], [58, 59], [66, 68]]}, {'green': [84, 118], 'red_start': 122, 'occ': [[75, 76], [79, 80], [88, 89], [96, 98], [106, 108], [113, 115], [120, 121], [126, 127], [129, 131]]}, {'green': [143, 183], 'red_start': 186, 'occ': [[143, 144], [146, 148], [152, 153], [161, 163], [164, 165], [166, 167], [175, 176], [181, 183], [187, 188], [194, 196]]}]}, {'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': [0, 16], 'red_start': 20, 'occ': [[-10, -8], [0, 2], [3, 5], [9, 11], [15, 17], [23, 24], [25, 27]]}, {'green': [49, 81], 'red_start': 86, 'occ': [[45, 47], [47, 52], [52, 53], [53, 54], [55, 57], [57, 62], [62, 65], [65, 70], [70, 76], [77, 80], [80, 84], [85, 91], [91, 94], [95, 98]]}, {'green': [108, 148], 'red_start': 151, 'occ': [[106, 107], [107, 110], [110, 111], [111, 113], [114, 115], [116, 120], [121, 126], [127, 131], [132, 136], [137, 138], [139, 141], [141, 143], [144, 146], [146, 148], [148, 154], [155, 159], [159, 164]]}, {'green': [179, 212], 'red_start': 217, 'occ': [[179, 181], [182, 184], [192, 194], [200, 202], [205, 207], [211, 212], [215, 216], [222, 224]]}, {'green': [241, 255], 'red_start': 259, 'occ': [[234, 237], [237, 238], [239, 243], [244, 248], [248, 253], [254, 259], [259, 265], [266, 269], [270, 273]]}]}, {'fails': [1, 2, 4], 'pct': 60}), ({'cycles': [{'green': [2, 37], 'red_start': 41, 'occ': [[-2, 0], [6, 8], [11, 13], [19, 20], [27, 28], [32, 33], [37, 39], [43, 45], [49, 51]]}, {'green': [65, 95], 'red_start': 99, 'occ': [[57, 58], [58, 62], [63, 68], [69, 70], [71, 77], [78, 82], [83, 86], [87, 88], [88, 94], [95, 97], [98, 101], [101, 102], [103, 108], [109, 114]]}, {'green': [124, 153], 'red_start': 158, 'occ': [[118, 119], [124, 126], [134, 136], [143, 145], [150, 151], [153, 154], [159, 161], [169, 170]]}, {'green': [186, 212], 'red_start': 216, 'occ': [[176, 177], [177, 183], [183, 184], [184, 188], [189, 192], [193, 198], [198, 200], [200, 205], [206, 212], [213, 215], [215, 217], [218, 220], [221, 225], [225, 229]]}, {'green': [246, 267], 'red_start': 272, 'occ': [[246, 250], [250, 254], [254, 259], [259, 260], [261, 264], [264, 267], [267, 271], [271, 276], [277, 280], [280, 283], [283, 288]]}]}, {'fails': [1, 4], 'pct': 40}), ({'cycles': [{'green': [3, 13], 'red_start': 16, 'occ': [[2, 3], [6, 8], [16, 17], [21, 23]]}, {'green': [41, 52], 'red_start': 56, 'occ': [[35, 37], [39, 41], [48, 50], [57, 58], [66, 67]]}, {'green': [77, 107], 'red_start': 111, 'occ': [[73, 74], [78, 79], [83, 85], [93, 94], [100, 101], [104, 105], [106, 108], [111, 113], [120, 121]]}, {'green': [137, 148], 'red_start': 153, 'occ': [[128, 130], [133, 135], [137, 138], [144, 146], [148, 150], [158, 160], [163, 164]]}, {'green': [179, 194], 'red_start': 197, 'occ': [[172, 174], [177, 179], [183, 185], [192, 194], [197, 198], [202, 203]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 24, 'occ': [[-1, 0], [5, 6], [8, 9], [11, 13], [17, 18], [21, 22], [23, 24], [25, 26], [27, 29]]}]}, {'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': [1, 40], 'red_start': 45, 'occ': [[-9, -8], [-6, -4], [3, 4], [6, 8], [13, 14], [16, 18], [25, 26], [29, 31], [35, 36], [37, 38], [41, 43], [51, 52]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 31], 'red_start': 35, 'occ': [[-1, 5], [6, 12], [12, 14], [14, 17], [18, 23], [23, 28], [28, 30], [30, 32], [32, 35], [35, 38], [39, 45], [46, 49]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [8, 30], 'red_start': 35, 'occ': [[-2, 3], [3, 8], [9, 15], [16, 22], [22, 24], [24, 28], [29, 31], [31, 33], [34, 36], [37, 39], [40, 42], [43, 44], [44, 49]]}, {'green': [56, 89], 'red_start': 94, 'occ': [[53, 54], [54, 60], [60, 61], [62, 67], [67, 73], [74, 77], [78, 81], [81, 82], [82, 87], [88, 92], [93, 97], [97, 100], [100, 102], [102, 107]]}, {'green': [124, 135], 'red_start': 138, 'occ': [[117, 118], [123, 125], [130, 131], [137, 139], [140, 141], [147, 149]]}, {'green': [158, 192], 'red_start': 195, 'occ': [[158, 159], [160, 163], [163, 165], [166, 172], [173, 175], [176, 180], [180, 182], [182, 183], [184, 186], [187, 190], [191, 193], [194, 195], [195, 196], [196, 198], [199, 205], [205, 209]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [3, 21], 'red_start': 25, 'occ': [[2, 4], [10, 12], [13, 14], [18, 19], [23, 24], [30, 31]]}, {'green': [52, 87], 'red_start': 90, 'occ': [[43, 44], [47, 49], [52, 54], [60, 61], [64, 66], [71, 72], [75, 77], [85, 86], [93, 95]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 35], 'red_start': 39, 'occ': [[1, 2], [6, 8], [10, 12], [13, 15], [16, 17], [22, 24], [29, 31], [36, 38], [42, 43], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 43], 'red_start': 47, 'occ': [[5, 11], [11, 14], [15, 16], [16, 18], [18, 24], [25, 27], [28, 32], [32, 34], [34, 38], [39, 42], [43, 47], [47, 49], [50, 51], [52, 58], [58, 64]]}, {'green': [75, 105], 'red_start': 109, 'occ': [[67, 68], [75, 77], [82, 84], [85, 86], [88, 89], [92, 93], [101, 102], [107, 108], [109, 110], [115, 117]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 22], 'red_start': 27, 'occ': [[6, 12], [13, 19], [20, 21], [21, 23], [24, 27], [27, 29], [30, 32], [33, 35], [36, 42]]}]}, {'fails': [0], 'pct': 100})], [({'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': [2, 15], 'red_start': 19, 'occ': [[-8, -7], [-1, 1], [5, 6], [11, 12], [15, 16], [17, 19], [26, 28], [30, 32]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 39], 'red_start': 42, 'occ': [[-1, 0], [7, 8], [13, 15], [20, 22], [30, 32], [38, 39], [42, 43], [46, 47], [52, 53]]}, {'green': [66, 98], 'red_start': 101, 'occ': [[57, 59], [65, 66], [72, 73], [80, 82], [86, 87], [94, 96], [99, 101], [108, 109]]}, {'green': [126, 143], 'red_start': 146, 'occ': [[119, 120], [125, 127], [134, 135], [137, 138], [146, 147], [152, 154]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 28, 'occ': [[-3, -1], [4, 6], [11, 12], [17, 19], [20, 22], [29, 31], [34, 36]]}, {'green': [56, 93], 'red_start': 96, 'occ': [[54, 56], [63, 64], [65, 67], [70, 72], [75, 77], [78, 79], [87, 88], [92, 93], [95, 97], [102, 104], [105, 107]]}, {'green': [126, 145], 'red_start': 149, 'occ': [[120, 121], [123, 125], [131, 133], [140, 142], [144, 145], [146, 148], [156, 158]]}, {'green': [175, 208], 'red_start': 212, 'occ': [[169, 173], [174, 179], [179, 184], [185, 189], [189, 195], [196, 199], [200, 201], [201, 202], [203, 204], [205, 206], [206, 209], [209, 213], [214, 215], [216, 217], [217, 218], [219, 225]]}, {'green': [241, 266], 'red_start': 270, 'occ': [[238, 242], [243, 246], [247, 251], [251, 257], [257, 262], [262, 263], [264, 266], [266, 270], [270, 276], [277, 281]]}]}, {'fails': [4], 'pct': 20}), ({'cycles': [{'green': [1, 15], 'red_start': 19, 'occ': [[-6, -5], [-4, 2], [2, 3], [3, 5], [6, 10], [11, 14], [15, 17], [18, 23], [24, 28], [29, 33]]}, {'green': [43, 68], 'red_start': 71, 'occ': [[36, 38], [46, 47], [48, 50], [53, 54], [62, 63], [65, 66], [67, 68], [69, 71], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 22, 'occ': [[3, 4], [6, 7], [11, 13], [19, 20], [25, 27], [33, 35]]}, {'green': [44, 58], 'red_start': 61, 'occ': [[38, 40], [41, 43], [47, 48], [49, 50], [51, 52], [54, 55], [57, 58], [65, 66], [70, 71]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -6], [-6, -2], [-2, -1], [-1, 3], [3, 6], [6, 12], [12, 14], [14, 19], [19, 20], [20, 21], [22, 23], [24, 28], [29, 33], [34, 39]]}, {'green': [50, 80], 'red_start': 83, 'occ': [[50, 52], [59, 61], [63, 64], [65, 66], [73, 75], [81, 82], [87, 88], [91, 93]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [8, 29], 'red_start': 33, 'occ': [[6, 8], [9, 14], [14, 18], [19, 24], [24, 28], [29, 35], [36, 39], [39, 43], [44, 48]]}, {'green': [60, 84], 'red_start': 89, 'occ': [[54, 55], [63, 64], [69, 70], [75, 76], [78, 79], [87, 88], [93, 95], [98, 99]]}]}, {'fails': [0], 'pct': 50})]]
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': [], 'pct': 0} | Passed |
| timing oracle 2 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 3 | {'fails': [0, 2], 'pct': 66} | {'fails': [], 'pct': 0} | Failed |
| timing oracle 4 | {'fails': [0], 'pct': 50} | {'fails': [0], 'pct': 50} | Passed |
| timing oracle 5 | {'fails': [1, 2, 3], 'pct': 75} | {'fails': [1, 2], 'pct': 50} | Failed |
| timing oracle 6 | {'fails': [1, 2], 'pct': 66} | {'fails': [1, 2], 'pct': 66} | Passed |
| timing oracle 7 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
SHA-256 / 7fdd123ce6c416cb8361c3e61be2efb598c891322dc12f67acd28193a0c8feea
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': [0, 29], 'red_start': 32, 'occ': [[-6, -4], [1, 2], [7, 9], [17, 19], [22, 23], [31, 33], [34, 36], [42, 43]]}, {'green': [61, 71], 'red_start': 74, 'occ': [[57, 59], [61, 63], [65, 66], [72, 73], [75, 76], [81, 82]]}, {'green': [100, 111], 'red_start': 116, 'occ': [[91, 92], [93, 95], [101, 103], [104, 106], [112, 113], [121, 123]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 16], 'red_start': 19, 'occ': [[2, 4], [8, 10], [16, 18], [21, 22], [24, 25], [30, 31]]}, {'green': [49, 73], 'red_start': 77, 'occ': [[49, 51], [56, 57], [58, 59], [67, 68], [74, 75], [81, 82], [87, 89]]}, {'green': [107, 122], 'red_start': 126, 'occ': [[106, 108], [115, 117], [121, 123], [130, 131]]}]}, {'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': [2, 17], 'red_start': 22, 'occ': [[2, 3], [4, 6], [7, 8], [8, 12], [13, 18], [18, 22], [23, 26], [27, 31], [32, 38]]}, {'green': [51, 68], 'red_start': 73, 'occ': [[47, 48], [51, 53], [60, 61], [62, 63], [68, 69], [73, 75], [82, 83], [84, 86]]}, {'green': [97, 132], 'red_start': 137, 'occ': [[89, 94], [94, 95], [96, 97], [98, 102], [103, 107], [107, 109], [109, 110], [111, 116], [117, 123], [124, 127], [128, 133], [133, 137], [138, 139], [140, 143], [144, 146], [147, 149]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 26], 'red_start': 30, 'occ': [[-4, 0], [0, 6], [6, 8], [8, 10], [11, 14], [14, 18], [18, 22], [22, 24], [25, 27], [27, 31], [32, 35], [35, 37], [37, 43]]}, {'green': [53, 88], 'red_start': 93, 'occ': [[50, 52], [54, 56], [59, 60], [68, 69], [77, 78], [82, 84], [86, 88], [91, 92], [100, 101]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[0, 2], [7, 8], [13, 15], [21, 23], [26, 27], [33, 35], [42, 44], [47, 49]]}, {'green': [64, 74], 'red_start': 77, 'occ': [[55, 60], [61, 62], [62, 67], [67, 72], [72, 73], [73, 78], [78, 83], [84, 87], [87, 93]]}, {'green': [106, 124], 'red_start': 127, 'occ': [[100, 105], [106, 111], [111, 113], [113, 119], [119, 120], [120, 122], [122, 128], [129, 133], [133, 139]]}, {'green': [149, 173], 'red_start': 177, 'occ': [[139, 141], [141, 145], [146, 151], [152, 155], [156, 161], [162, 163], [164, 169], [170, 173], [174, 176], [177, 180], [181, 182], [183, 186], [186, 189]]}]}, {'fails': [1, 2], 'pct': 50}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[4, 6], [9, 11], [19, 21], [27, 28], [32, 34]]}, {'green': [57, 80], 'red_start': 84, 'occ': [[51, 56], [57, 59], [59, 63], [64, 70], [71, 74], [74, 76], [76, 82], [83, 88], [89, 95], [95, 97]]}, {'green': [107, 141], 'red_start': 146, 'occ': [[104, 109], [109, 114], [115, 119], [120, 126], [126, 132], [132, 136], [137, 143], [144, 147], [147, 149], [150, 153], [153, 158]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [9, 34], 'red_start': 37, 'occ': [[3, 4], [10, 11], [15, 16], [17, 19], [23, 25], [28, 30], [33, 35], [38, 39], [44, 45], [46, 48]]}, {'green': [61, 96], 'red_start': 99, 'occ': [[58, 59], [64, 65], [69, 70], [73, 75], [80, 82], [90, 92], [99, 100], [103, 104], [110, 112]]}, {'green': [125, 154], 'red_start': 157, 'occ': [[117, 119], [122, 124], [131, 133], [138, 139], [145, 146], [152, 153], [154, 156], [163, 164]]}, {'green': [180, 209], 'red_start': 213, 'occ': [[179, 181], [188, 189], [195, 196], [203, 205], [210, 211], [219, 220]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [2, 33], 'red_start': 36, 'occ': [[-7, -6], [-1, 1], [3, 4], [9, 11], [17, 19], [22, 23], [25, 27], [29, 30], [31, 32], [40, 41], [42, 43], [47, 48]]}, {'green': [64, 85], 'red_start': 88, 'occ': [[60, 62], [69, 70], [74, 76], [81, 82], [87, 88], [96, 97]]}, {'green': [110, 133], 'red_start': 137, 'occ': [[105, 107], [107, 110], [111, 116], [117, 120], [120, 122], [123, 128], [128, 131], [131, 136], [136, 140], [141, 146], [147, 150]]}, {'green': [165, 181], 'red_start': 185, 'occ': [[155, 157], [162, 164], [169, 170], [178, 180], [185, 186], [194, 196]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [10, 28], 'red_start': 31, 'occ': [[4, 5], [13, 15], [19, 21], [24, 26], [31, 33], [40, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 25], 'red_start': 30, 'occ': [[9, 10], [18, 19], [21, 22], [28, 29], [33, 34], [36, 37]]}, {'green': [56, 67], 'red_start': 70, 'occ': [[46, 48], [53, 54], [57, 59], [67, 68], [73, 74], [80, 82]]}, {'green': [91, 117], 'red_start': 121, 'occ': [[86, 91], [92, 96], [96, 101], [101, 105], [105, 107], [107, 113], [113, 119], [119, 122], [122, 124], [124, 129], [130, 135]]}]}, {'fails': [2], 'pct': 33}), ({'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, 22], 'red_start': 25, 'occ': [[-4, -3], [-2, 4], [5, 6], [6, 12], [13, 19], [20, 21], [22, 23], [24, 26], [27, 30], [31, 34], [34, 39]]}, {'green': [46, 77], 'red_start': 81, 'occ': [[39, 41], [43, 44], [45, 46], [52, 53], [58, 59], [63, 64], [67, 69], [72, 73], [78, 79], [82, 84], [90, 92]]}, {'green': [108, 129], 'red_start': 132, 'occ': [[98, 102], [102, 107], [108, 111], [111, 112], [112, 113], [113, 119], [119, 125], [126, 127], [127, 131], [132, 137], [137, 138], [138, 139], [140, 143], [143, 149]]}, {'green': [153, 163], 'red_start': 168, 'occ': [[149, 155], [155, 156], [157, 159], [160, 162], [162, 165], [166, 169], [170, 171], [172, 175], [176, 182]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[-1, 1], [8, 10], [17, 19], [22, 23]]}, {'green': [43, 75], 'red_start': 80, 'occ': [[36, 38], [39, 41], [41, 44], [45, 49], [50, 56], [56, 62], [62, 67], [68, 70], [70, 73], [74, 80], [81, 86], [87, 93]]}, {'green': [109, 121], 'red_start': 126, 'occ': [[103, 106], [107, 113], [113, 119], [119, 121], [122, 128], [129, 135], [135, 139]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [10, 39], 'red_start': 44, 'occ': [[7, 9], [17, 19], [27, 28], [30, 31], [34, 35], [39, 41], [43, 44], [50, 51]]}, {'green': [66, 94], 'red_start': 97, 'occ': [[56, 57], [62, 64], [66, 68], [74, 76], [80, 82], [88, 89], [95, 97], [100, 101], [104, 105]]}, {'green': [126, 147], 'red_start': 152, 'occ': [[118, 119], [123, 124], [128, 129], [134, 135], [137, 139], [143, 145], [146, 148], [149, 151], [159, 161]]}, {'green': [179, 199], 'red_start': 202, 'occ': [[175, 177], [182, 183], [186, 187], [190, 191], [195, 197], [198, 200], [203, 205], [212, 214]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[3, 5], [13, 15], [18, 20], [22, 24], [26, 27], [28, 29], [36, 38]]}, {'green': [47, 66], 'red_start': 70, 'occ': [[42, 43], [50, 51], [59, 61], [62, 64], [65, 66], [70, 71], [73, 75], [81, 82]]}, {'green': [90, 112], 'red_start': 116, 'occ': [[87, 88], [91, 92], [95, 97], [99, 100], [105, 106], [114, 116], [117, 119], [122, 123], [124, 126]]}, {'green': [143, 174], 'red_start': 179, 'occ': [[142, 143], [144, 147], [148, 151], [152, 155], [155, 159], [159, 163], [164, 167], [168, 170], [171, 172], [173, 174], [175, 176], [176, 182], [183, 189], [189, 190], [190, 195]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [0, 16], 'red_start': 20, 'occ': [[-7, -6], [-5, 0], [1, 4], [5, 8], [9, 12], [13, 14], [15, 16], [17, 19], [19, 25], [26, 32]]}, {'green': [48, 68], 'red_start': 72, 'occ': [[44, 46], [49, 51], [52, 53], [59, 60], [62, 63], [69, 70], [78, 79]]}, {'green': [98, 119], 'red_start': 124, 'occ': [[97, 99], [104, 106], [110, 111], [113, 115], [121, 123], [124, 126], [133, 135]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [1, 19], 'red_start': 22, 'occ': [[0, 2], [9, 11], [15, 17], [25, 27], [33, 34]]}, {'green': [49, 62], 'red_start': 67, 'occ': [[49, 50], [58, 60], [67, 68], [75, 76]]}, {'green': [89, 115], 'red_start': 118, 'occ': [[84, 87], [88, 90], [91, 95], [96, 100], [101, 102], [103, 106], [106, 111], [111, 114], [114, 116], [116, 118], [119, 123], [124, 126], [126, 130]]}, {'green': [144, 165], 'red_start': 170, 'occ': [[138, 140], [140, 141], [142, 147], [148, 154], [155, 156], [156, 159], [159, 161], [161, 162], [162, 168], [169, 170], [170, 172], [172, 175], [176, 180], [181, 187]]}, {'green': [197, 224], 'red_start': 228, 'occ': [[188, 193], [193, 197], [197, 202], [202, 203], [203, 207], [207, 210], [210, 213], [214, 215], [216, 217], [217, 221], [221, 225], [226, 228], [228, 231], [231, 234], [235, 238], [239, 240]]}]}, {'fails': [2, 3, 4], 'pct': 60}), ({'cycles': [{'green': [2, 12], 'red_start': 15, 'occ': [[1, 2], [4, 6], [10, 11], [14, 15], [21, 23]]}, {'green': [43, 60], 'red_start': 64, 'occ': [[39, 41], [44, 45], [52, 54], [58, 59], [66, 68]]}, {'green': [84, 118], 'red_start': 122, 'occ': [[75, 76], [79, 80], [88, 89], [96, 98], [106, 108], [113, 115], [120, 121], [126, 127], [129, 131]]}, {'green': [143, 183], 'red_start': 186, 'occ': [[143, 144], [146, 148], [152, 153], [161, 163], [164, 165], [166, 167], [175, 176], [181, 183], [187, 188], [194, 196]]}]}, {'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': [0, 16], 'red_start': 20, 'occ': [[-10, -8], [0, 2], [3, 5], [9, 11], [15, 17], [23, 24], [25, 27]]}, {'green': [49, 81], 'red_start': 86, 'occ': [[45, 47], [47, 52], [52, 53], [53, 54], [55, 57], [57, 62], [62, 65], [65, 70], [70, 76], [77, 80], [80, 84], [85, 91], [91, 94], [95, 98]]}, {'green': [108, 148], 'red_start': 151, 'occ': [[106, 107], [107, 110], [110, 111], [111, 113], [114, 115], [116, 120], [121, 126], [127, 131], [132, 136], [137, 138], [139, 141], [141, 143], [144, 146], [146, 148], [148, 154], [155, 159], [159, 164]]}, {'green': [179, 212], 'red_start': 217, 'occ': [[179, 181], [182, 184], [192, 194], [200, 202], [205, 207], [211, 212], [215, 216], [222, 224]]}, {'green': [241, 255], 'red_start': 259, 'occ': [[234, 237], [237, 238], [239, 243], [244, 248], [248, 253], [254, 259], [259, 265], [266, 269], [270, 273]]}]}, {'fails': [1, 2, 4], 'pct': 60}), ({'cycles': [{'green': [2, 37], 'red_start': 41, 'occ': [[-2, 0], [6, 8], [11, 13], [19, 20], [27, 28], [32, 33], [37, 39], [43, 45], [49, 51]]}, {'green': [65, 95], 'red_start': 99, 'occ': [[57, 58], [58, 62], [63, 68], [69, 70], [71, 77], [78, 82], [83, 86], [87, 88], [88, 94], [95, 97], [98, 101], [101, 102], [103, 108], [109, 114]]}, {'green': [124, 153], 'red_start': 158, 'occ': [[118, 119], [124, 126], [134, 136], [143, 145], [150, 151], [153, 154], [159, 161], [169, 170]]}, {'green': [186, 212], 'red_start': 216, 'occ': [[176, 177], [177, 183], [183, 184], [184, 188], [189, 192], [193, 198], [198, 200], [200, 205], [206, 212], [213, 215], [215, 217], [218, 220], [221, 225], [225, 229]]}, {'green': [246, 267], 'red_start': 272, 'occ': [[246, 250], [250, 254], [254, 259], [259, 260], [261, 264], [264, 267], [267, 271], [271, 276], [277, 280], [280, 283], [283, 288]]}]}, {'fails': [1, 4], 'pct': 40}), ({'cycles': [{'green': [3, 13], 'red_start': 16, 'occ': [[2, 3], [6, 8], [16, 17], [21, 23]]}, {'green': [41, 52], 'red_start': 56, 'occ': [[35, 37], [39, 41], [48, 50], [57, 58], [66, 67]]}, {'green': [77, 107], 'red_start': 111, 'occ': [[73, 74], [78, 79], [83, 85], [93, 94], [100, 101], [104, 105], [106, 108], [111, 113], [120, 121]]}, {'green': [137, 148], 'red_start': 153, 'occ': [[128, 130], [133, 135], [137, 138], [144, 146], [148, 150], [158, 160], [163, 164]]}, {'green': [179, 194], 'red_start': 197, 'occ': [[172, 174], [177, 179], [183, 185], [192, 194], [197, 198], [202, 203]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 24, 'occ': [[-1, 0], [5, 6], [8, 9], [11, 13], [17, 18], [21, 22], [23, 24], [25, 26], [27, 29]]}]}, {'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': [1, 40], 'red_start': 45, 'occ': [[-9, -8], [-6, -4], [3, 4], [6, 8], [13, 14], [16, 18], [25, 26], [29, 31], [35, 36], [37, 38], [41, 43], [51, 52]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 31], 'red_start': 35, 'occ': [[-1, 5], [6, 12], [12, 14], [14, 17], [18, 23], [23, 28], [28, 30], [30, 32], [32, 35], [35, 38], [39, 45], [46, 49]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [8, 30], 'red_start': 35, 'occ': [[-2, 3], [3, 8], [9, 15], [16, 22], [22, 24], [24, 28], [29, 31], [31, 33], [34, 36], [37, 39], [40, 42], [43, 44], [44, 49]]}, {'green': [56, 89], 'red_start': 94, 'occ': [[53, 54], [54, 60], [60, 61], [62, 67], [67, 73], [74, 77], [78, 81], [81, 82], [82, 87], [88, 92], [93, 97], [97, 100], [100, 102], [102, 107]]}, {'green': [124, 135], 'red_start': 138, 'occ': [[117, 118], [123, 125], [130, 131], [137, 139], [140, 141], [147, 149]]}, {'green': [158, 192], 'red_start': 195, 'occ': [[158, 159], [160, 163], [163, 165], [166, 172], [173, 175], [176, 180], [180, 182], [182, 183], [184, 186], [187, 190], [191, 193], [194, 195], [195, 196], [196, 198], [199, 205], [205, 209]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [3, 21], 'red_start': 25, 'occ': [[2, 4], [10, 12], [13, 14], [18, 19], [23, 24], [30, 31]]}, {'green': [52, 87], 'red_start': 90, 'occ': [[43, 44], [47, 49], [52, 54], [60, 61], [64, 66], [71, 72], [75, 77], [85, 86], [93, 95]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 35], 'red_start': 39, 'occ': [[1, 2], [6, 8], [10, 12], [13, 15], [16, 17], [22, 24], [29, 31], [36, 38], [42, 43], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 43], 'red_start': 47, 'occ': [[5, 11], [11, 14], [15, 16], [16, 18], [18, 24], [25, 27], [28, 32], [32, 34], [34, 38], [39, 42], [43, 47], [47, 49], [50, 51], [52, 58], [58, 64]]}, {'green': [75, 105], 'red_start': 109, 'occ': [[67, 68], [75, 77], [82, 84], [85, 86], [88, 89], [92, 93], [101, 102], [107, 108], [109, 110], [115, 117]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 22], 'red_start': 27, 'occ': [[6, 12], [13, 19], [20, 21], [21, 23], [24, 27], [27, 29], [30, 32], [33, 35], [36, 42]]}]}, {'fails': [0], 'pct': 100})], [({'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': [2, 15], 'red_start': 19, 'occ': [[-8, -7], [-1, 1], [5, 6], [11, 12], [15, 16], [17, 19], [26, 28], [30, 32]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 39], 'red_start': 42, 'occ': [[-1, 0], [7, 8], [13, 15], [20, 22], [30, 32], [38, 39], [42, 43], [46, 47], [52, 53]]}, {'green': [66, 98], 'red_start': 101, 'occ': [[57, 59], [65, 66], [72, 73], [80, 82], [86, 87], [94, 96], [99, 101], [108, 109]]}, {'green': [126, 143], 'red_start': 146, 'occ': [[119, 120], [125, 127], [134, 135], [137, 138], [146, 147], [152, 154]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 23], 'red_start': 28, 'occ': [[-3, -1], [4, 6], [11, 12], [17, 19], [20, 22], [29, 31], [34, 36]]}, {'green': [56, 93], 'red_start': 96, 'occ': [[54, 56], [63, 64], [65, 67], [70, 72], [75, 77], [78, 79], [87, 88], [92, 93], [95, 97], [102, 104], [105, 107]]}, {'green': [126, 145], 'red_start': 149, 'occ': [[120, 121], [123, 125], [131, 133], [140, 142], [144, 145], [146, 148], [156, 158]]}, {'green': [175, 208], 'red_start': 212, 'occ': [[169, 173], [174, 179], [179, 184], [185, 189], [189, 195], [196, 199], [200, 201], [201, 202], [203, 204], [205, 206], [206, 209], [209, 213], [214, 215], [216, 217], [217, 218], [219, 225]]}, {'green': [241, 266], 'red_start': 270, 'occ': [[238, 242], [243, 246], [247, 251], [251, 257], [257, 262], [262, 263], [264, 266], [266, 270], [270, 276], [277, 281]]}]}, {'fails': [4], 'pct': 20}), ({'cycles': [{'green': [1, 15], 'red_start': 19, 'occ': [[-6, -5], [-4, 2], [2, 3], [3, 5], [6, 10], [11, 14], [15, 17], [18, 23], [24, 28], [29, 33]]}, {'green': [43, 68], 'red_start': 71, 'occ': [[36, 38], [46, 47], [48, 50], [53, 54], [62, 63], [65, 66], [67, 68], [69, 71], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 19], 'red_start': 22, 'occ': [[3, 4], [6, 7], [11, 13], [19, 20], [25, 27], [33, 35]]}, {'green': [44, 58], 'red_start': 61, 'occ': [[38, 40], [41, 43], [47, 48], [49, 50], [51, 52], [54, 55], [57, 58], [65, 66], [70, 71]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 22], 'red_start': 27, 'occ': [[-7, -6], [-6, -2], [-2, -1], [-1, 3], [3, 6], [6, 12], [12, 14], [14, 19], [19, 20], [20, 21], [22, 23], [24, 28], [29, 33], [34, 39]]}, {'green': [50, 80], 'red_start': 83, 'occ': [[50, 52], [59, 61], [63, 64], [65, 66], [73, 75], [81, 82], [87, 88], [91, 93]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [8, 29], 'red_start': 33, 'occ': [[6, 8], [9, 14], [14, 18], [19, 24], [24, 28], [29, 35], [36, 39], [39, 43], [44, 48]]}, {'green': [60, 84], 'red_start': 89, 'occ': [[54, 55], [63, 64], [69, 70], [75, 76], [78, 79], [87, 88], [93, 95], [98, 99]]}]}, {'fails': [0], 'pct': 50})]]
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': [], 'pct': 0} | Passed |
| timing oracle 2 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 4 | {'fails': [0], 'pct': 50} | {'fails': [0], 'pct': 50} | Passed |
| timing oracle 5 | {'fails': [1, 2], 'pct': 50} | {'fails': [1, 2], 'pct': 50} | Passed |
| timing oracle 6 | {'fails': [1, 2], 'pct': 66} | {'fails': [1, 2], 'pct': 66} | Passed |
| timing oracle 7 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
SHA-256 / 7aeccf44991c631fe2a8b1eb484dc4865d3e6d72d4f5af4a0db744767654872f
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.524501+00:00.
Case digest / 96a7fdcb3f8bbda23017d3c0254d51351202322081fc3936254ff66a8046e51c