FA-68281 / Traffic signal timing plans / Open access
Split failure detection: the failure percentage divides before scaling · case 01
Split failure detection returns a wrong result when the failure percentage divides before scaling.
ROOT CAUSE
Integer division first makes every partial failure rate zero.
VERIFIED REPAIR
Restore the failure percentage rule so that the step reads `len(fails) * 100 // len(x['cycles'])`.
Unsuccessful approach: Rounding up disagrees with the stipulated floor.
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) // len(x['cycles']) * 100}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycles': [{'green': [6, 31], 'red_start': 34, 'occ': [[-3, -2], [1, 2], [7, 9], [10, 11], [16, 18], [22, 23], [29, 31], [33, 35], [40, 42], [45, 46]]}, {'green': [60, 96], 'red_start': 99, 'occ': [[51, 53], [53, 54], [55, 57], [57, 62], [63, 65], [66, 68], [68, 74], [74, 78], [79, 85], [85, 88], [88, 91], [91, 95], [95, 101], [101, 106], [107, 108], [109, 113]]}, {'green': [124, 135], 'red_start': 139, 'occ': [[123, 128], [128, 134], [134, 139], [140, 146], [147, 150]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [1, 22], 'red_start': 27, 'occ': [[0, 1], [5, 7], [10, 11], [13, 14], [17, 18], [21, 22], [27, 28], [34, 36]]}, {'green': [47, 75], 'red_start': 80, 'occ': [[45, 49], [49, 52], [53, 57], [58, 64], [65, 68], [68, 70], [71, 73], [74, 80], [80, 81], [81, 85], [86, 88], [89, 93]]}, {'green': [109, 148], 'red_start': 152, 'occ': [[104, 106], [113, 114], [116, 118], [125, 126], [133, 134], [141, 143], [146, 148], [154, 156], [163, 165]]}, {'green': [172, 187], 'red_start': 192, 'occ': [[166, 167], [173, 174], [178, 179], [187, 188], [189, 191], [196, 197], [201, 203]]}, {'green': [220, 239], 'red_start': 244, 'occ': [[216, 218], [219, 221], [226, 228], [230, 231], [238, 239], [242, 243], [245, 246], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [1, 34], 'red_start': 39, 'occ': [[-4, -2], [5, 6], [7, 9], [17, 19], [21, 22], [27, 29], [30, 32], [34, 35], [42, 44], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 25], 'red_start': 29, 'occ': [[-2, -1], [3, 4], [5, 7], [11, 13], [20, 21], [26, 28], [30, 31], [35, 37]]}, {'green': [49, 71], 'red_start': 74, 'occ': [[49, 50], [51, 54], [55, 60], [61, 66], [66, 69], [70, 72], [73, 79], [79, 80], [80, 82], [83, 86]]}, {'green': [97, 133], 'red_start': 136, 'occ': [[93, 95], [99, 100], [108, 110], [118, 119], [121, 122], [124, 126], [128, 129], [131, 132], [133, 134], [136, 137], [141, 142], [143, 145], [146, 148]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[5, 8], [9, 12], [12, 14], [14, 19], [19, 21], [22, 23], [23, 26], [26, 27], [27, 28], [28, 33], [34, 36], [37, 39], [39, 42], [42, 44], [44, 48], [48, 50]]}, {'green': [58, 75], 'red_start': 78, 'occ': [[57, 60], [61, 62], [63, 67], [68, 74], [74, 78], [79, 84], [85, 88], [89, 95]]}, {'green': [105, 131], 'red_start': 136, 'occ': [[103, 109], [109, 110], [111, 114], [115, 119], [119, 121], [122, 123], [123, 128], [128, 129], [129, 130], [131, 137], [138, 141], [142, 147], [147, 153]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 25], 'red_start': 28, 'occ': [[-2, 1], [2, 4], [4, 7], [7, 11], [11, 15], [16, 18], [18, 24], [24, 27], [28, 31], [32, 33], [34, 37], [38, 39], [39, 44]]}, {'green': [50, 87], 'red_start': 92, 'occ': [[44, 46], [54, 56], [58, 59], [61, 63], [67, 68], [71, 73], [76, 77], [79, 81], [82, 83], [88, 89], [97, 98], [101, 103]]}, {'green': [113, 130], 'red_start': 135, 'occ': [[106, 112], [113, 115], [115, 117], [117, 119], [119, 124], [124, 130], [131, 134], [134, 140], [141, 146]]}, {'green': [155, 193], 'red_start': 197, 'occ': [[145, 148], [148, 151], [152, 156], [157, 161], [162, 168], [169, 175], [176, 181], [181, 185], [186, 189], [189, 192], [193, 196], [196, 198], [199, 204], [205, 207], [208, 210]]}, {'green': [221, 261], 'red_start': 264, 'occ': [[218, 219], [227, 229], [235, 236], [237, 238], [244, 246], [247, 248], [255, 257], [260, 261], [265, 267], [271, 272]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 15], 'red_start': 18, 'occ': [[-2, -1], [3, 4], [7, 9], [12, 14], [20, 22], [23, 24], [26, 27]]}, {'green': [41, 63], 'red_start': 67, 'occ': [[38, 40], [48, 50], [52, 54], [58, 59], [67, 68], [76, 77]]}, {'green': [91, 122], 'red_start': 126, 'occ': [[85, 87], [94, 95], [97, 98], [100, 101], [108, 109], [114, 115], [121, 123], [124, 125], [126, 127], [129, 131], [134, 136]]}, {'green': [146, 183], 'red_start': 186, 'occ': [[140, 145], [145, 146], [147, 153], [154, 156], [156, 162], [163, 169], [170, 172], [173, 175], [175, 177], [177, 181], [181, 187], [187, 191], [192, 195], [196, 201]]}, {'green': [206, 223], 'red_start': 227, 'occ': [[205, 206], [207, 212], [213, 218], [219, 225], [225, 228], [229, 231], [232, 235], [236, 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, 28], 'red_start': 31, 'occ': [[-1, 5], [6, 9], [10, 15], [15, 18], [19, 21], [22, 26], [26, 31], [31, 36], [37, 43]]}, {'green': [58, 88], 'red_start': 93, 'occ': [[50, 54], [54, 60], [61, 62], [63, 68], [69, 73], [73, 74], [74, 80], [80, 84], [85, 88], [89, 91], [92, 96], [97, 100], [100, 102], [103, 106]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [10, 39], 'red_start': 42, 'occ': [[8, 10], [11, 17], [18, 20], [20, 25], [26, 32], [32, 35], [35, 38], [39, 44], [44, 45], [45, 47], [48, 52], [53, 55]]}, {'green': [72, 98], 'red_start': 101, 'occ': [[64, 65], [65, 69], [69, 75], [75, 77], [78, 82], [83, 84], [85, 87], [87, 88], [88, 90], [90, 94], [94, 100], [100, 102], [102, 107], [107, 112]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [6, 31], 'red_start': 34, 'occ': [[3, 5], [13, 15], [21, 22], [25, 27], [33, 35], [41, 42]]}, {'green': [59, 75], 'red_start': 79, 'occ': [[55, 57], [62, 64], [68, 69], [70, 71], [75, 76], [77, 78], [85, 86]]}, {'green': [100, 115], 'red_start': 120, 'occ': [[90, 91], [92, 96], [97, 101], [102, 104], [105, 107], [108, 110], [110, 113], [113, 119], [119, 122], [122, 124], [124, 130], [130, 134]]}, {'green': [149, 177], 'red_start': 181, 'occ': [[144, 145], [150, 152], [156, 158], [165, 167], [175, 177], [178, 180], [186, 188], [189, 190], [192, 194]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [5, 42], 'red_start': 45, 'occ': [[1, 4], [4, 6], [7, 11], [11, 12], [12, 15], [16, 21], [21, 26], [27, 32], [33, 38], [39, 44], [45, 49], [50, 52], [52, 55], [56, 62]]}, {'green': [70, 107], 'red_start': 112, 'occ': [[63, 65], [65, 69], [70, 75], [76, 79], [80, 85], [85, 90], [91, 95], [96, 102], [102, 103], [103, 109], [110, 113], [113, 116], [117, 122], [122, 125]]}, {'green': [140, 176], 'red_start': 180, 'occ': [[139, 140], [144, 145], [148, 149], [152, 153], [159, 160], [168, 169], [174, 176], [177, 178], [183, 185], [189, 191]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [4, 33], 'red_start': 38, 'occ': [[0, 6], [6, 12], [12, 14], [14, 20], [20, 24], [25, 26], [26, 27], [28, 32], [32, 38], [38, 43], [44, 48], [49, 53]]}, {'green': [67, 94], 'red_start': 98, 'occ': [[61, 63], [71, 73], [75, 76], [77, 79], [87, 89], [94, 95], [97, 99], [101, 102], [109, 110]]}, {'green': [118, 154], 'red_start': 158, 'occ': [[111, 112], [113, 117], [118, 122], [123, 129], [130, 134], [135, 136], [137, 142], [143, 149], [150, 156], [156, 158], [158, 164], [164, 170]]}, {'green': [181, 198], 'red_start': 203, 'occ': [[176, 182], [183, 187], [188, 194], [195, 198], [199, 202], [202, 205], [205, 208], [209, 210], [211, 214]]}, {'green': [233, 243], 'red_start': 248, 'occ': [[224, 225], [228, 230], [234, 235], [240, 242], [248, 250], [257, 259]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[-6, -4], [4, 5], [7, 9], [11, 13], [16, 17], [23, 24], [29, 31], [36, 38], [46, 48], [49, 51]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 25], 'red_start': 28, 'occ': [[-1, 1], [6, 7], [15, 17], [25, 27], [31, 33], [36, 38]]}, {'green': [49, 64], 'red_start': 67, 'occ': [[47, 52], [53, 58], [58, 63], [63, 69], [69, 75], [75, 80]]}, {'green': [96, 117], 'red_start': 122, 'occ': [[93, 95], [99, 100], [105, 106], [111, 113], [117, 119], [122, 123], [126, 128], [132, 134]]}]}, {'fails': [1], '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': [6, 16], 'red_start': 21, 'occ': [[-3, 2], [2, 7], [7, 10], [10, 13], [14, 18], [19, 20], [20, 22], [23, 26], [27, 29], [30, 33]]}, {'green': [49, 66], 'red_start': 70, 'occ': [[41, 43], [50, 51], [56, 57], [65, 67], [73, 75]]}, {'green': [93, 114], 'red_start': 119, 'occ': [[83, 88], [88, 93], [94, 100], [101, 102], [103, 105], [105, 111], [112, 116], [117, 118], [119, 123], [123, 125], [125, 127], [128, 134]]}, {'green': [142, 155], 'red_start': 160, 'occ': [[132, 134], [134, 136], [137, 138], [138, 141], [141, 143], [144, 146], [147, 149], [150, 152], [153, 159], [160, 163], [163, 167], [167, 171]]}, {'green': [190, 204], 'red_start': 208, 'occ': [[189, 190], [197, 199], [204, 205], [209, 211], [218, 219]]}]}, {'fails': [0, 2], 'pct': 40}), ({'cycles': [{'green': [3, 28], 'red_start': 32, 'occ': [[-2, -1], [0, 4], [5, 10], [11, 12], [12, 17], [17, 23], [24, 28], [29, 35], [35, 40], [41, 44]]}, {'green': [62, 88], 'red_start': 91, 'occ': [[56, 59], [59, 63], [63, 65], [66, 72], [72, 78], [79, 83], [83, 87], [87, 93], [94, 97], [97, 99], [99, 104]]}, {'green': [112, 132], 'red_start': 135, 'occ': [[102, 103], [110, 111], [119, 121], [126, 127], [129, 131], [138, 139]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 38], 'red_start': 41, 'occ': [[0, 2], [2, 8], [9, 12], [12, 13], [13, 19], [20, 23], [23, 28], [29, 35], [35, 37], [37, 41], [42, 46], [47, 51], [52, 56]]}, {'green': [61, 84], 'red_start': 89, 'occ': [[51, 52], [58, 60], [63, 65], [67, 69], [76, 77], [81, 82], [87, 89], [90, 92], [100, 102]]}, {'green': [119, 150], 'red_start': 153, 'occ': [[109, 111], [112, 113], [114, 115], [117, 118], [122, 123], [126, 128], [136, 138], [139, 141], [143, 145], [147, 148], [155, 156], [163, 165]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [9, 31], 'red_start': 34, 'occ': [[3, 5], [13, 14], [16, 17], [23, 24], [32, 33], [38, 40], [43, 45]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 20], 'red_start': 25, 'occ': [[-4, 2], [3, 4], [4, 7], [8, 13], [14, 16], [17, 18], [18, 21], [22, 26], [27, 32], [32, 36]]}]}, {'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': [8, 28], 'red_start': 31, 'occ': [[7, 12], [12, 14], [15, 19], [20, 21], [21, 25], [25, 29], [30, 31], [31, 34], [34, 36], [37, 39], [39, 40], [41, 42], [42, 48]]}, {'green': [55, 89], 'red_start': 93, 'occ': [[51, 52], [53, 56], [57, 61], [61, 64], [64, 65], [66, 72], [72, 74], [74, 75], [75, 77], [77, 79], [79, 80], [80, 84], [84, 85], [85, 91], [91, 97], [97, 100], [100, 101], [102, 104], [104, 106]]}, {'green': [122, 157], 'red_start': 162, 'occ': [[122, 126], [126, 127], [128, 133], [134, 140], [140, 142], [142, 148], [149, 151], [152, 154], [155, 160], [161, 162], [163, 167], [168, 170], [170, 173], [173, 174]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [8, 19], 'red_start': 24, 'occ': [[1, 3], [9, 10], [16, 18], [21, 23], [30, 32]]}, {'green': [44, 59], 'red_start': 64, 'occ': [[38, 44], [44, 49], [50, 54], [54, 55], [56, 60], [61, 63], [64, 66], [67, 68], [68, 69], [69, 75], [75, 80]]}, {'green': [89, 125], 'red_start': 129, 'occ': [[87, 88], [96, 98], [99, 100], [105, 107], [108, 109], [115, 116], [120, 122], [129, 130], [131, 133], [135, 136], [139, 141]]}, {'green': [155, 169], 'red_start': 173, 'occ': [[151, 153], [155, 157], [160, 161], [167, 169], [177, 179], [183, 184]]}, {'green': [198, 234], 'red_start': 238, 'occ': [[190, 192], [200, 201], [202, 204], [210, 211], [215, 217], [220, 222], [224, 226], [233, 235], [236, 238], [244, 246]]}]}, {'fails': [1], 'pct': 20})], [({'cycles': [{'green': [3, 13], 'red_start': 18, 'occ': [[-2, 0], [6, 7], [14, 15], [21, 23], [25, 26], [27, 28]]}, {'green': [48, 75], 'red_start': 78, 'occ': [[44, 49], [50, 53], [53, 57], [58, 60], [60, 64], [65, 70], [70, 74], [75, 77], [77, 82], [83, 86], [87, 88], [89, 95]]}, {'green': [98, 131], 'red_start': 136, 'occ': [[96, 98], [104, 106], [107, 109], [116, 117], [119, 120], [126, 127], [135, 137], [141, 143], [144, 145]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [5, 31], 'red_start': 35, 'occ': [[-1, 4], [5, 8], [9, 14], [14, 20], [21, 22], [22, 28], [29, 32], [33, 35], [36, 41], [41, 45], [45, 46], [46, 47]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [6, 34], 'red_start': 37, 'occ': [[-2, 2], [2, 7], [8, 10], [10, 15], [16, 18], [18, 21], [21, 24], [25, 27], [27, 28], [28, 33], [33, 38], [38, 41], [41, 47], [47, 50]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [9, 45], 'red_start': 50, 'occ': [[8, 10], [12, 14], [19, 20], [22, 24], [26, 27], [30, 31], [33, 35], [41, 42], [48, 50], [54, 55], [57, 58]]}, {'green': [72, 92], 'red_start': 95, 'occ': [[72, 77], [78, 80], [80, 83], [84, 86], [86, 91], [92, 93], [94, 99], [100, 104], [104, 108]]}, {'green': [122, 154], 'red_start': 157, 'occ': [[113, 116], [116, 117], [117, 120], [121, 123], [124, 130], [131, 135], [135, 139], [140, 142], [142, 143], [144, 146], [147, 149], [150, 153], [153, 159], [160, 165], [166, 168]]}, {'green': [183, 216], 'red_start': 219, 'occ': [[179, 181], [181, 183], [183, 187], [187, 191], [191, 197], [198, 202], [202, 203], [204, 205], [206, 208], [208, 213], [214, 218], [219, 221], [222, 224], [224, 229], [230, 232]]}]}, {'fails': [1, 2, 3], 'pct': 75}), ({'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, 29], 'red_start': 32, 'occ': [[-3, 1], [1, 2], [3, 7], [7, 9], [9, 14], [15, 16], [17, 19], [19, 21], [21, 27], [28, 30], [30, 32], [33, 38], [39, 40], [40, 45]]}, {'green': [57, 92], 'red_start': 97, 'occ': [[53, 55], [60, 61], [64, 66], [68, 69], [76, 78], [82, 83], [85, 86], [93, 94], [95, 96], [97, 99], [107, 108]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [2, 42], 'red_start': 47, 'occ': [[2, 3], [3, 5], [6, 10], [10, 14], [14, 20], [21, 26], [26, 28], [28, 29], [30, 33], [34, 35], [35, 40], [40, 45], [45, 48], [48, 51], [52, 53], [53, 56], [56, 58]]}, {'green': [77, 111], 'red_start': 116, 'occ': [[70, 72], [80, 82], [87, 88], [96, 97], [100, 101], [107, 108], [116, 118], [122, 123], [125, 126]]}, {'green': [139, 173], 'red_start': 176, 'occ': [[136, 138], [139, 143], [143, 148], [149, 153], [154, 155], [155, 161], [161, 164], [164, 168], [168, 169], [170, 173], [174, 178], [179, 183], [184, 186], [186, 190]]}, {'green': [202, 223], 'red_start': 228, 'occ': [[201, 207], [207, 208], [208, 212], [213, 216], [217, 223], [223, 225], [225, 227], [227, 228], [228, 231], [232, 233], [233, 238], [239, 242]]}, {'green': [256, 269], 'red_start': 272, 'occ': [[253, 254], [254, 259], [260, 266], [266, 269], [270, 271], [271, 276], [277, 282], [283, 287]]}]}, {'fails': [0, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [10, 42], 'red_start': 45, 'occ': [[7, 9], [11, 12], [18, 19], [20, 21], [27, 29], [36, 38], [44, 45], [51, 53], [56, 57]]}, {'green': [65, 102], 'red_start': 106, 'occ': [[61, 63], [71, 73], [75, 76], [79, 81], [82, 83], [86, 88], [90, 91], [96, 97], [98, 100], [106, 107], [110, 112]]}, {'green': [131, 143], 'red_start': 147, 'occ': [[128, 129], [130, 134], [134, 138], [138, 143], [143, 145], [146, 149], [150, 156], [156, 159]]}]}, {'fails': [2], 'pct': 33})], [({'cycles': [{'green': [6, 27], 'red_start': 30, 'occ': [[2, 4], [12, 14], [16, 17], [18, 20], [22, 23], [26, 28], [29, 31], [39, 41]]}, {'green': [52, 84], 'red_start': 89, 'occ': [[48, 49], [49, 55], [56, 57], [58, 60], [60, 65], [66, 71], [72, 73], [73, 75], [76, 77], [77, 80], [81, 85], [85, 90], [91, 93], [93, 94], [94, 99], [100, 103]]}]}, {'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}), ({'cycles': [{'green': [7, 38], 'red_start': 43, 'occ': [[7, 12], [12, 17], [17, 18], [19, 20], [21, 24], [25, 27], [28, 31], [32, 34], [34, 40], [40, 44], [44, 49], [50, 52], [52, 58]]}, {'green': [63, 77], 'red_start': 81, 'occ': [[60, 62], [68, 70], [78, 79], [82, 83], [89, 91]]}, {'green': [110, 135], 'red_start': 138, 'occ': [[100, 102], [109, 111], [113, 115], [123, 124], [131, 133], [136, 137], [144, 145], [148, 149]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [2, 26], 'red_start': 30, 'occ': [[-1, 5], [6, 11], [12, 13], [13, 17], [17, 19], [19, 25], [26, 32], [33, 38], [39, 45]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [3, 14], 'red_start': 17, 'occ': [[0, 1], [4, 6], [7, 9], [13, 15], [19, 21], [25, 26]]}, {'green': [44, 61], 'red_start': 66, 'occ': [[37, 38], [39, 43], [43, 45], [46, 50], [51, 52], [52, 53], [53, 55], [56, 57], [58, 60], [61, 63], [64, 69], [70, 71], [71, 73], [74, 80]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 37], 'red_start': 42, 'occ': [[4, 5], [11, 13], [17, 19], [27, 29], [31, 32], [35, 36], [39, 41], [42, 44], [47, 48], [49, 51]]}, {'green': [64, 81], 'red_start': 86, 'occ': [[61, 63], [68, 69], [71, 73], [76, 78], [79, 80], [86, 87], [91, 93], [95, 97]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 28], 'red_start': 33, 'occ': [[-4, 0], [0, 3], [3, 6], [6, 12], [13, 18], [19, 24], [24, 25], [25, 30], [30, 36], [36, 39], [39, 42], [42, 43], [43, 48]]}, {'green': [61, 88], 'red_start': 93, 'occ': [[58, 60], [67, 68], [71, 72], [80, 81], [86, 87], [93, 95], [97, 99]]}, {'green': [116, 139], 'red_start': 142, 'occ': [[106, 110], [110, 112], [112, 114], [115, 121], [121, 125], [126, 132], [133, 139], [140, 144], [144, 146], [146, 151], [151, 157]]}, {'green': [168, 197], 'red_start': 202, 'occ': [[166, 170], [170, 175], [175, 177], [178, 183], [184, 185], [185, 187], [187, 189], [189, 192], [192, 198], [198, 202], [203, 209], [210, 213]]}]}, {'fails': [0, 2, 3], 'pct': 75}), ({'cycles': [{'green': [5, 29], 'red_start': 32, 'occ': [[-4, -1], [0, 1], [2, 4], [5, 6], [7, 9], [10, 15], [15, 21], [21, 25], [26, 28], [28, 34], [35, 40], [40, 46]]}, {'green': [59, 71], 'red_start': 76, 'occ': [[49, 54], [55, 57], [57, 61], [61, 64], [65, 67], [67, 72], [73, 74], [74, 80], [80, 82], [83, 85], [85, 89]]}, {'green': [104, 144], 'red_start': 148, 'occ': [[96, 98], [101, 102], [106, 108], [109, 111], [118, 120], [125, 127], [130, 131], [133, 134], [139, 140], [142, 144], [149, 150], [156, 157]]}]}, {'fails': [0, 1], 'pct': 66})]]
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': [1, 2], 'pct': 0} | {'fails': [1, 2], 'pct': 66} | Failed |
| timing oracle 1 | {'fails': [1], 'pct': 0} | {'fails': [1], 'pct': 20} | Failed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [1], 'pct': 0} | {'fails': [1], 'pct': 33} | Failed |
| timing oracle 4 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 5 | {'fails': [0, 2, 3], 'pct': 0} | {'fails': [0, 2, 3], 'pct': 60} | Failed |
| timing oracle 6 | {'fails': [3], 'pct': 0} | {'fails': [3], 'pct': 20} | Failed |
| timing oracle 7 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
SHA-256 / aa23bd4a4b388c1ea0b2f0b88a525c0e571ffcfc7b81f7e294b8458743bcfbe8
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) 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': [6, 31], 'red_start': 34, 'occ': [[-3, -2], [1, 2], [7, 9], [10, 11], [16, 18], [22, 23], [29, 31], [33, 35], [40, 42], [45, 46]]}, {'green': [60, 96], 'red_start': 99, 'occ': [[51, 53], [53, 54], [55, 57], [57, 62], [63, 65], [66, 68], [68, 74], [74, 78], [79, 85], [85, 88], [88, 91], [91, 95], [95, 101], [101, 106], [107, 108], [109, 113]]}, {'green': [124, 135], 'red_start': 139, 'occ': [[123, 128], [128, 134], [134, 139], [140, 146], [147, 150]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [1, 22], 'red_start': 27, 'occ': [[0, 1], [5, 7], [10, 11], [13, 14], [17, 18], [21, 22], [27, 28], [34, 36]]}, {'green': [47, 75], 'red_start': 80, 'occ': [[45, 49], [49, 52], [53, 57], [58, 64], [65, 68], [68, 70], [71, 73], [74, 80], [80, 81], [81, 85], [86, 88], [89, 93]]}, {'green': [109, 148], 'red_start': 152, 'occ': [[104, 106], [113, 114], [116, 118], [125, 126], [133, 134], [141, 143], [146, 148], [154, 156], [163, 165]]}, {'green': [172, 187], 'red_start': 192, 'occ': [[166, 167], [173, 174], [178, 179], [187, 188], [189, 191], [196, 197], [201, 203]]}, {'green': [220, 239], 'red_start': 244, 'occ': [[216, 218], [219, 221], [226, 228], [230, 231], [238, 239], [242, 243], [245, 246], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [1, 34], 'red_start': 39, 'occ': [[-4, -2], [5, 6], [7, 9], [17, 19], [21, 22], [27, 29], [30, 32], [34, 35], [42, 44], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 25], 'red_start': 29, 'occ': [[-2, -1], [3, 4], [5, 7], [11, 13], [20, 21], [26, 28], [30, 31], [35, 37]]}, {'green': [49, 71], 'red_start': 74, 'occ': [[49, 50], [51, 54], [55, 60], [61, 66], [66, 69], [70, 72], [73, 79], [79, 80], [80, 82], [83, 86]]}, {'green': [97, 133], 'red_start': 136, 'occ': [[93, 95], [99, 100], [108, 110], [118, 119], [121, 122], [124, 126], [128, 129], [131, 132], [133, 134], [136, 137], [141, 142], [143, 145], [146, 148]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[5, 8], [9, 12], [12, 14], [14, 19], [19, 21], [22, 23], [23, 26], [26, 27], [27, 28], [28, 33], [34, 36], [37, 39], [39, 42], [42, 44], [44, 48], [48, 50]]}, {'green': [58, 75], 'red_start': 78, 'occ': [[57, 60], [61, 62], [63, 67], [68, 74], [74, 78], [79, 84], [85, 88], [89, 95]]}, {'green': [105, 131], 'red_start': 136, 'occ': [[103, 109], [109, 110], [111, 114], [115, 119], [119, 121], [122, 123], [123, 128], [128, 129], [129, 130], [131, 137], [138, 141], [142, 147], [147, 153]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 25], 'red_start': 28, 'occ': [[-2, 1], [2, 4], [4, 7], [7, 11], [11, 15], [16, 18], [18, 24], [24, 27], [28, 31], [32, 33], [34, 37], [38, 39], [39, 44]]}, {'green': [50, 87], 'red_start': 92, 'occ': [[44, 46], [54, 56], [58, 59], [61, 63], [67, 68], [71, 73], [76, 77], [79, 81], [82, 83], [88, 89], [97, 98], [101, 103]]}, {'green': [113, 130], 'red_start': 135, 'occ': [[106, 112], [113, 115], [115, 117], [117, 119], [119, 124], [124, 130], [131, 134], [134, 140], [141, 146]]}, {'green': [155, 193], 'red_start': 197, 'occ': [[145, 148], [148, 151], [152, 156], [157, 161], [162, 168], [169, 175], [176, 181], [181, 185], [186, 189], [189, 192], [193, 196], [196, 198], [199, 204], [205, 207], [208, 210]]}, {'green': [221, 261], 'red_start': 264, 'occ': [[218, 219], [227, 229], [235, 236], [237, 238], [244, 246], [247, 248], [255, 257], [260, 261], [265, 267], [271, 272]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 15], 'red_start': 18, 'occ': [[-2, -1], [3, 4], [7, 9], [12, 14], [20, 22], [23, 24], [26, 27]]}, {'green': [41, 63], 'red_start': 67, 'occ': [[38, 40], [48, 50], [52, 54], [58, 59], [67, 68], [76, 77]]}, {'green': [91, 122], 'red_start': 126, 'occ': [[85, 87], [94, 95], [97, 98], [100, 101], [108, 109], [114, 115], [121, 123], [124, 125], [126, 127], [129, 131], [134, 136]]}, {'green': [146, 183], 'red_start': 186, 'occ': [[140, 145], [145, 146], [147, 153], [154, 156], [156, 162], [163, 169], [170, 172], [173, 175], [175, 177], [177, 181], [181, 187], [187, 191], [192, 195], [196, 201]]}, {'green': [206, 223], 'red_start': 227, 'occ': [[205, 206], [207, 212], [213, 218], [219, 225], [225, 228], [229, 231], [232, 235], [236, 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, 28], 'red_start': 31, 'occ': [[-1, 5], [6, 9], [10, 15], [15, 18], [19, 21], [22, 26], [26, 31], [31, 36], [37, 43]]}, {'green': [58, 88], 'red_start': 93, 'occ': [[50, 54], [54, 60], [61, 62], [63, 68], [69, 73], [73, 74], [74, 80], [80, 84], [85, 88], [89, 91], [92, 96], [97, 100], [100, 102], [103, 106]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [10, 39], 'red_start': 42, 'occ': [[8, 10], [11, 17], [18, 20], [20, 25], [26, 32], [32, 35], [35, 38], [39, 44], [44, 45], [45, 47], [48, 52], [53, 55]]}, {'green': [72, 98], 'red_start': 101, 'occ': [[64, 65], [65, 69], [69, 75], [75, 77], [78, 82], [83, 84], [85, 87], [87, 88], [88, 90], [90, 94], [94, 100], [100, 102], [102, 107], [107, 112]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [6, 31], 'red_start': 34, 'occ': [[3, 5], [13, 15], [21, 22], [25, 27], [33, 35], [41, 42]]}, {'green': [59, 75], 'red_start': 79, 'occ': [[55, 57], [62, 64], [68, 69], [70, 71], [75, 76], [77, 78], [85, 86]]}, {'green': [100, 115], 'red_start': 120, 'occ': [[90, 91], [92, 96], [97, 101], [102, 104], [105, 107], [108, 110], [110, 113], [113, 119], [119, 122], [122, 124], [124, 130], [130, 134]]}, {'green': [149, 177], 'red_start': 181, 'occ': [[144, 145], [150, 152], [156, 158], [165, 167], [175, 177], [178, 180], [186, 188], [189, 190], [192, 194]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [5, 42], 'red_start': 45, 'occ': [[1, 4], [4, 6], [7, 11], [11, 12], [12, 15], [16, 21], [21, 26], [27, 32], [33, 38], [39, 44], [45, 49], [50, 52], [52, 55], [56, 62]]}, {'green': [70, 107], 'red_start': 112, 'occ': [[63, 65], [65, 69], [70, 75], [76, 79], [80, 85], [85, 90], [91, 95], [96, 102], [102, 103], [103, 109], [110, 113], [113, 116], [117, 122], [122, 125]]}, {'green': [140, 176], 'red_start': 180, 'occ': [[139, 140], [144, 145], [148, 149], [152, 153], [159, 160], [168, 169], [174, 176], [177, 178], [183, 185], [189, 191]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [4, 33], 'red_start': 38, 'occ': [[0, 6], [6, 12], [12, 14], [14, 20], [20, 24], [25, 26], [26, 27], [28, 32], [32, 38], [38, 43], [44, 48], [49, 53]]}, {'green': [67, 94], 'red_start': 98, 'occ': [[61, 63], [71, 73], [75, 76], [77, 79], [87, 89], [94, 95], [97, 99], [101, 102], [109, 110]]}, {'green': [118, 154], 'red_start': 158, 'occ': [[111, 112], [113, 117], [118, 122], [123, 129], [130, 134], [135, 136], [137, 142], [143, 149], [150, 156], [156, 158], [158, 164], [164, 170]]}, {'green': [181, 198], 'red_start': 203, 'occ': [[176, 182], [183, 187], [188, 194], [195, 198], [199, 202], [202, 205], [205, 208], [209, 210], [211, 214]]}, {'green': [233, 243], 'red_start': 248, 'occ': [[224, 225], [228, 230], [234, 235], [240, 242], [248, 250], [257, 259]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[-6, -4], [4, 5], [7, 9], [11, 13], [16, 17], [23, 24], [29, 31], [36, 38], [46, 48], [49, 51]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 25], 'red_start': 28, 'occ': [[-1, 1], [6, 7], [15, 17], [25, 27], [31, 33], [36, 38]]}, {'green': [49, 64], 'red_start': 67, 'occ': [[47, 52], [53, 58], [58, 63], [63, 69], [69, 75], [75, 80]]}, {'green': [96, 117], 'red_start': 122, 'occ': [[93, 95], [99, 100], [105, 106], [111, 113], [117, 119], [122, 123], [126, 128], [132, 134]]}]}, {'fails': [1], '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': [6, 16], 'red_start': 21, 'occ': [[-3, 2], [2, 7], [7, 10], [10, 13], [14, 18], [19, 20], [20, 22], [23, 26], [27, 29], [30, 33]]}, {'green': [49, 66], 'red_start': 70, 'occ': [[41, 43], [50, 51], [56, 57], [65, 67], [73, 75]]}, {'green': [93, 114], 'red_start': 119, 'occ': [[83, 88], [88, 93], [94, 100], [101, 102], [103, 105], [105, 111], [112, 116], [117, 118], [119, 123], [123, 125], [125, 127], [128, 134]]}, {'green': [142, 155], 'red_start': 160, 'occ': [[132, 134], [134, 136], [137, 138], [138, 141], [141, 143], [144, 146], [147, 149], [150, 152], [153, 159], [160, 163], [163, 167], [167, 171]]}, {'green': [190, 204], 'red_start': 208, 'occ': [[189, 190], [197, 199], [204, 205], [209, 211], [218, 219]]}]}, {'fails': [0, 2], 'pct': 40}), ({'cycles': [{'green': [3, 28], 'red_start': 32, 'occ': [[-2, -1], [0, 4], [5, 10], [11, 12], [12, 17], [17, 23], [24, 28], [29, 35], [35, 40], [41, 44]]}, {'green': [62, 88], 'red_start': 91, 'occ': [[56, 59], [59, 63], [63, 65], [66, 72], [72, 78], [79, 83], [83, 87], [87, 93], [94, 97], [97, 99], [99, 104]]}, {'green': [112, 132], 'red_start': 135, 'occ': [[102, 103], [110, 111], [119, 121], [126, 127], [129, 131], [138, 139]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 38], 'red_start': 41, 'occ': [[0, 2], [2, 8], [9, 12], [12, 13], [13, 19], [20, 23], [23, 28], [29, 35], [35, 37], [37, 41], [42, 46], [47, 51], [52, 56]]}, {'green': [61, 84], 'red_start': 89, 'occ': [[51, 52], [58, 60], [63, 65], [67, 69], [76, 77], [81, 82], [87, 89], [90, 92], [100, 102]]}, {'green': [119, 150], 'red_start': 153, 'occ': [[109, 111], [112, 113], [114, 115], [117, 118], [122, 123], [126, 128], [136, 138], [139, 141], [143, 145], [147, 148], [155, 156], [163, 165]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [9, 31], 'red_start': 34, 'occ': [[3, 5], [13, 14], [16, 17], [23, 24], [32, 33], [38, 40], [43, 45]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 20], 'red_start': 25, 'occ': [[-4, 2], [3, 4], [4, 7], [8, 13], [14, 16], [17, 18], [18, 21], [22, 26], [27, 32], [32, 36]]}]}, {'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': [8, 28], 'red_start': 31, 'occ': [[7, 12], [12, 14], [15, 19], [20, 21], [21, 25], [25, 29], [30, 31], [31, 34], [34, 36], [37, 39], [39, 40], [41, 42], [42, 48]]}, {'green': [55, 89], 'red_start': 93, 'occ': [[51, 52], [53, 56], [57, 61], [61, 64], [64, 65], [66, 72], [72, 74], [74, 75], [75, 77], [77, 79], [79, 80], [80, 84], [84, 85], [85, 91], [91, 97], [97, 100], [100, 101], [102, 104], [104, 106]]}, {'green': [122, 157], 'red_start': 162, 'occ': [[122, 126], [126, 127], [128, 133], [134, 140], [140, 142], [142, 148], [149, 151], [152, 154], [155, 160], [161, 162], [163, 167], [168, 170], [170, 173], [173, 174]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [8, 19], 'red_start': 24, 'occ': [[1, 3], [9, 10], [16, 18], [21, 23], [30, 32]]}, {'green': [44, 59], 'red_start': 64, 'occ': [[38, 44], [44, 49], [50, 54], [54, 55], [56, 60], [61, 63], [64, 66], [67, 68], [68, 69], [69, 75], [75, 80]]}, {'green': [89, 125], 'red_start': 129, 'occ': [[87, 88], [96, 98], [99, 100], [105, 107], [108, 109], [115, 116], [120, 122], [129, 130], [131, 133], [135, 136], [139, 141]]}, {'green': [155, 169], 'red_start': 173, 'occ': [[151, 153], [155, 157], [160, 161], [167, 169], [177, 179], [183, 184]]}, {'green': [198, 234], 'red_start': 238, 'occ': [[190, 192], [200, 201], [202, 204], [210, 211], [215, 217], [220, 222], [224, 226], [233, 235], [236, 238], [244, 246]]}]}, {'fails': [1], 'pct': 20})], [({'cycles': [{'green': [3, 13], 'red_start': 18, 'occ': [[-2, 0], [6, 7], [14, 15], [21, 23], [25, 26], [27, 28]]}, {'green': [48, 75], 'red_start': 78, 'occ': [[44, 49], [50, 53], [53, 57], [58, 60], [60, 64], [65, 70], [70, 74], [75, 77], [77, 82], [83, 86], [87, 88], [89, 95]]}, {'green': [98, 131], 'red_start': 136, 'occ': [[96, 98], [104, 106], [107, 109], [116, 117], [119, 120], [126, 127], [135, 137], [141, 143], [144, 145]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [5, 31], 'red_start': 35, 'occ': [[-1, 4], [5, 8], [9, 14], [14, 20], [21, 22], [22, 28], [29, 32], [33, 35], [36, 41], [41, 45], [45, 46], [46, 47]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [6, 34], 'red_start': 37, 'occ': [[-2, 2], [2, 7], [8, 10], [10, 15], [16, 18], [18, 21], [21, 24], [25, 27], [27, 28], [28, 33], [33, 38], [38, 41], [41, 47], [47, 50]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [9, 45], 'red_start': 50, 'occ': [[8, 10], [12, 14], [19, 20], [22, 24], [26, 27], [30, 31], [33, 35], [41, 42], [48, 50], [54, 55], [57, 58]]}, {'green': [72, 92], 'red_start': 95, 'occ': [[72, 77], [78, 80], [80, 83], [84, 86], [86, 91], [92, 93], [94, 99], [100, 104], [104, 108]]}, {'green': [122, 154], 'red_start': 157, 'occ': [[113, 116], [116, 117], [117, 120], [121, 123], [124, 130], [131, 135], [135, 139], [140, 142], [142, 143], [144, 146], [147, 149], [150, 153], [153, 159], [160, 165], [166, 168]]}, {'green': [183, 216], 'red_start': 219, 'occ': [[179, 181], [181, 183], [183, 187], [187, 191], [191, 197], [198, 202], [202, 203], [204, 205], [206, 208], [208, 213], [214, 218], [219, 221], [222, 224], [224, 229], [230, 232]]}]}, {'fails': [1, 2, 3], 'pct': 75}), ({'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, 29], 'red_start': 32, 'occ': [[-3, 1], [1, 2], [3, 7], [7, 9], [9, 14], [15, 16], [17, 19], [19, 21], [21, 27], [28, 30], [30, 32], [33, 38], [39, 40], [40, 45]]}, {'green': [57, 92], 'red_start': 97, 'occ': [[53, 55], [60, 61], [64, 66], [68, 69], [76, 78], [82, 83], [85, 86], [93, 94], [95, 96], [97, 99], [107, 108]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [2, 42], 'red_start': 47, 'occ': [[2, 3], [3, 5], [6, 10], [10, 14], [14, 20], [21, 26], [26, 28], [28, 29], [30, 33], [34, 35], [35, 40], [40, 45], [45, 48], [48, 51], [52, 53], [53, 56], [56, 58]]}, {'green': [77, 111], 'red_start': 116, 'occ': [[70, 72], [80, 82], [87, 88], [96, 97], [100, 101], [107, 108], [116, 118], [122, 123], [125, 126]]}, {'green': [139, 173], 'red_start': 176, 'occ': [[136, 138], [139, 143], [143, 148], [149, 153], [154, 155], [155, 161], [161, 164], [164, 168], [168, 169], [170, 173], [174, 178], [179, 183], [184, 186], [186, 190]]}, {'green': [202, 223], 'red_start': 228, 'occ': [[201, 207], [207, 208], [208, 212], [213, 216], [217, 223], [223, 225], [225, 227], [227, 228], [228, 231], [232, 233], [233, 238], [239, 242]]}, {'green': [256, 269], 'red_start': 272, 'occ': [[253, 254], [254, 259], [260, 266], [266, 269], [270, 271], [271, 276], [277, 282], [283, 287]]}]}, {'fails': [0, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [10, 42], 'red_start': 45, 'occ': [[7, 9], [11, 12], [18, 19], [20, 21], [27, 29], [36, 38], [44, 45], [51, 53], [56, 57]]}, {'green': [65, 102], 'red_start': 106, 'occ': [[61, 63], [71, 73], [75, 76], [79, 81], [82, 83], [86, 88], [90, 91], [96, 97], [98, 100], [106, 107], [110, 112]]}, {'green': [131, 143], 'red_start': 147, 'occ': [[128, 129], [130, 134], [134, 138], [138, 143], [143, 145], [146, 149], [150, 156], [156, 159]]}]}, {'fails': [2], 'pct': 33})], [({'cycles': [{'green': [6, 27], 'red_start': 30, 'occ': [[2, 4], [12, 14], [16, 17], [18, 20], [22, 23], [26, 28], [29, 31], [39, 41]]}, {'green': [52, 84], 'red_start': 89, 'occ': [[48, 49], [49, 55], [56, 57], [58, 60], [60, 65], [66, 71], [72, 73], [73, 75], [76, 77], [77, 80], [81, 85], [85, 90], [91, 93], [93, 94], [94, 99], [100, 103]]}]}, {'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}), ({'cycles': [{'green': [7, 38], 'red_start': 43, 'occ': [[7, 12], [12, 17], [17, 18], [19, 20], [21, 24], [25, 27], [28, 31], [32, 34], [34, 40], [40, 44], [44, 49], [50, 52], [52, 58]]}, {'green': [63, 77], 'red_start': 81, 'occ': [[60, 62], [68, 70], [78, 79], [82, 83], [89, 91]]}, {'green': [110, 135], 'red_start': 138, 'occ': [[100, 102], [109, 111], [113, 115], [123, 124], [131, 133], [136, 137], [144, 145], [148, 149]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [2, 26], 'red_start': 30, 'occ': [[-1, 5], [6, 11], [12, 13], [13, 17], [17, 19], [19, 25], [26, 32], [33, 38], [39, 45]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [3, 14], 'red_start': 17, 'occ': [[0, 1], [4, 6], [7, 9], [13, 15], [19, 21], [25, 26]]}, {'green': [44, 61], 'red_start': 66, 'occ': [[37, 38], [39, 43], [43, 45], [46, 50], [51, 52], [52, 53], [53, 55], [56, 57], [58, 60], [61, 63], [64, 69], [70, 71], [71, 73], [74, 80]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 37], 'red_start': 42, 'occ': [[4, 5], [11, 13], [17, 19], [27, 29], [31, 32], [35, 36], [39, 41], [42, 44], [47, 48], [49, 51]]}, {'green': [64, 81], 'red_start': 86, 'occ': [[61, 63], [68, 69], [71, 73], [76, 78], [79, 80], [86, 87], [91, 93], [95, 97]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 28], 'red_start': 33, 'occ': [[-4, 0], [0, 3], [3, 6], [6, 12], [13, 18], [19, 24], [24, 25], [25, 30], [30, 36], [36, 39], [39, 42], [42, 43], [43, 48]]}, {'green': [61, 88], 'red_start': 93, 'occ': [[58, 60], [67, 68], [71, 72], [80, 81], [86, 87], [93, 95], [97, 99]]}, {'green': [116, 139], 'red_start': 142, 'occ': [[106, 110], [110, 112], [112, 114], [115, 121], [121, 125], [126, 132], [133, 139], [140, 144], [144, 146], [146, 151], [151, 157]]}, {'green': [168, 197], 'red_start': 202, 'occ': [[166, 170], [170, 175], [175, 177], [178, 183], [184, 185], [185, 187], [187, 189], [189, 192], [192, 198], [198, 202], [203, 209], [210, 213]]}]}, {'fails': [0, 2, 3], 'pct': 75}), ({'cycles': [{'green': [5, 29], 'red_start': 32, 'occ': [[-4, -1], [0, 1], [2, 4], [5, 6], [7, 9], [10, 15], [15, 21], [21, 25], [26, 28], [28, 34], [35, 40], [40, 46]]}, {'green': [59, 71], 'red_start': 76, 'occ': [[49, 54], [55, 57], [57, 61], [61, 64], [65, 67], [67, 72], [73, 74], [74, 80], [80, 82], [83, 85], [85, 89]]}, {'green': [104, 144], 'red_start': 148, 'occ': [[96, 98], [101, 102], [106, 108], [109, 111], [118, 120], [125, 127], [130, 131], [133, 134], [139, 140], [142, 144], [149, 150], [156, 157]]}]}, {'fails': [0, 1], 'pct': 66})]]
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': [1, 2], 'pct': 67} | {'fails': [1, 2], 'pct': 66} | Failed |
| timing oracle 1 | {'fails': [1], 'pct': 20} | {'fails': [1], 'pct': 20} | Passed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [1], 'pct': 34} | {'fails': [1], 'pct': 33} | Failed |
| timing oracle 4 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 5 | {'fails': [0, 2, 3], 'pct': 60} | {'fails': [0, 2, 3], 'pct': 60} | Passed |
| timing oracle 6 | {'fails': [3], 'pct': 20} | {'fails': [3], 'pct': 20} | Passed |
| timing oracle 7 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
SHA-256 / 1be4679f06018f2cb7c022a11606105b7e0a47cf52b9da05d4963f250e05e490
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': [6, 31], 'red_start': 34, 'occ': [[-3, -2], [1, 2], [7, 9], [10, 11], [16, 18], [22, 23], [29, 31], [33, 35], [40, 42], [45, 46]]}, {'green': [60, 96], 'red_start': 99, 'occ': [[51, 53], [53, 54], [55, 57], [57, 62], [63, 65], [66, 68], [68, 74], [74, 78], [79, 85], [85, 88], [88, 91], [91, 95], [95, 101], [101, 106], [107, 108], [109, 113]]}, {'green': [124, 135], 'red_start': 139, 'occ': [[123, 128], [128, 134], [134, 139], [140, 146], [147, 150]]}]}, {'fails': [1, 2], 'pct': 66}), ({'cycles': [{'green': [1, 22], 'red_start': 27, 'occ': [[0, 1], [5, 7], [10, 11], [13, 14], [17, 18], [21, 22], [27, 28], [34, 36]]}, {'green': [47, 75], 'red_start': 80, 'occ': [[45, 49], [49, 52], [53, 57], [58, 64], [65, 68], [68, 70], [71, 73], [74, 80], [80, 81], [81, 85], [86, 88], [89, 93]]}, {'green': [109, 148], 'red_start': 152, 'occ': [[104, 106], [113, 114], [116, 118], [125, 126], [133, 134], [141, 143], [146, 148], [154, 156], [163, 165]]}, {'green': [172, 187], 'red_start': 192, 'occ': [[166, 167], [173, 174], [178, 179], [187, 188], [189, 191], [196, 197], [201, 203]]}, {'green': [220, 239], 'red_start': 244, 'occ': [[216, 218], [219, 221], [226, 228], [230, 231], [238, 239], [242, 243], [245, 246], [252, 254]]}]}, {'fails': [1], 'pct': 20}), ({'cycles': [{'green': [1, 34], 'red_start': 39, 'occ': [[-4, -2], [5, 6], [7, 9], [17, 19], [21, 22], [27, 29], [30, 32], [34, 35], [42, 44], [48, 49]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 25], 'red_start': 29, 'occ': [[-2, -1], [3, 4], [5, 7], [11, 13], [20, 21], [26, 28], [30, 31], [35, 37]]}, {'green': [49, 71], 'red_start': 74, 'occ': [[49, 50], [51, 54], [55, 60], [61, 66], [66, 69], [70, 72], [73, 79], [79, 80], [80, 82], [83, 86]]}, {'green': [97, 133], 'red_start': 136, 'occ': [[93, 95], [99, 100], [108, 110], [118, 119], [121, 122], [124, 126], [128, 129], [131, 132], [133, 134], [136, 137], [141, 142], [143, 145], [146, 148]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [6, 32], 'red_start': 37, 'occ': [[5, 8], [9, 12], [12, 14], [14, 19], [19, 21], [22, 23], [23, 26], [26, 27], [27, 28], [28, 33], [34, 36], [37, 39], [39, 42], [42, 44], [44, 48], [48, 50]]}, {'green': [58, 75], 'red_start': 78, 'occ': [[57, 60], [61, 62], [63, 67], [68, 74], [74, 78], [79, 84], [85, 88], [89, 95]]}, {'green': [105, 131], 'red_start': 136, 'occ': [[103, 109], [109, 110], [111, 114], [115, 119], [119, 121], [122, 123], [123, 128], [128, 129], [129, 130], [131, 137], [138, 141], [142, 147], [147, 153]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [3, 25], 'red_start': 28, 'occ': [[-2, 1], [2, 4], [4, 7], [7, 11], [11, 15], [16, 18], [18, 24], [24, 27], [28, 31], [32, 33], [34, 37], [38, 39], [39, 44]]}, {'green': [50, 87], 'red_start': 92, 'occ': [[44, 46], [54, 56], [58, 59], [61, 63], [67, 68], [71, 73], [76, 77], [79, 81], [82, 83], [88, 89], [97, 98], [101, 103]]}, {'green': [113, 130], 'red_start': 135, 'occ': [[106, 112], [113, 115], [115, 117], [117, 119], [119, 124], [124, 130], [131, 134], [134, 140], [141, 146]]}, {'green': [155, 193], 'red_start': 197, 'occ': [[145, 148], [148, 151], [152, 156], [157, 161], [162, 168], [169, 175], [176, 181], [181, 185], [186, 189], [189, 192], [193, 196], [196, 198], [199, 204], [205, 207], [208, 210]]}, {'green': [221, 261], 'red_start': 264, 'occ': [[218, 219], [227, 229], [235, 236], [237, 238], [244, 246], [247, 248], [255, 257], [260, 261], [265, 267], [271, 272]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [3, 15], 'red_start': 18, 'occ': [[-2, -1], [3, 4], [7, 9], [12, 14], [20, 22], [23, 24], [26, 27]]}, {'green': [41, 63], 'red_start': 67, 'occ': [[38, 40], [48, 50], [52, 54], [58, 59], [67, 68], [76, 77]]}, {'green': [91, 122], 'red_start': 126, 'occ': [[85, 87], [94, 95], [97, 98], [100, 101], [108, 109], [114, 115], [121, 123], [124, 125], [126, 127], [129, 131], [134, 136]]}, {'green': [146, 183], 'red_start': 186, 'occ': [[140, 145], [145, 146], [147, 153], [154, 156], [156, 162], [163, 169], [170, 172], [173, 175], [175, 177], [177, 181], [181, 187], [187, 191], [192, 195], [196, 201]]}, {'green': [206, 223], 'red_start': 227, 'occ': [[205, 206], [207, 212], [213, 218], [219, 225], [225, 228], [229, 231], [232, 235], [236, 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, 28], 'red_start': 31, 'occ': [[-1, 5], [6, 9], [10, 15], [15, 18], [19, 21], [22, 26], [26, 31], [31, 36], [37, 43]]}, {'green': [58, 88], 'red_start': 93, 'occ': [[50, 54], [54, 60], [61, 62], [63, 68], [69, 73], [73, 74], [74, 80], [80, 84], [85, 88], [89, 91], [92, 96], [97, 100], [100, 102], [103, 106]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [10, 39], 'red_start': 42, 'occ': [[8, 10], [11, 17], [18, 20], [20, 25], [26, 32], [32, 35], [35, 38], [39, 44], [44, 45], [45, 47], [48, 52], [53, 55]]}, {'green': [72, 98], 'red_start': 101, 'occ': [[64, 65], [65, 69], [69, 75], [75, 77], [78, 82], [83, 84], [85, 87], [87, 88], [88, 90], [90, 94], [94, 100], [100, 102], [102, 107], [107, 112]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [6, 31], 'red_start': 34, 'occ': [[3, 5], [13, 15], [21, 22], [25, 27], [33, 35], [41, 42]]}, {'green': [59, 75], 'red_start': 79, 'occ': [[55, 57], [62, 64], [68, 69], [70, 71], [75, 76], [77, 78], [85, 86]]}, {'green': [100, 115], 'red_start': 120, 'occ': [[90, 91], [92, 96], [97, 101], [102, 104], [105, 107], [108, 110], [110, 113], [113, 119], [119, 122], [122, 124], [124, 130], [130, 134]]}, {'green': [149, 177], 'red_start': 181, 'occ': [[144, 145], [150, 152], [156, 158], [165, 167], [175, 177], [178, 180], [186, 188], [189, 190], [192, 194]]}]}, {'fails': [2], 'pct': 25}), ({'cycles': [{'green': [5, 42], 'red_start': 45, 'occ': [[1, 4], [4, 6], [7, 11], [11, 12], [12, 15], [16, 21], [21, 26], [27, 32], [33, 38], [39, 44], [45, 49], [50, 52], [52, 55], [56, 62]]}, {'green': [70, 107], 'red_start': 112, 'occ': [[63, 65], [65, 69], [70, 75], [76, 79], [80, 85], [85, 90], [91, 95], [96, 102], [102, 103], [103, 109], [110, 113], [113, 116], [117, 122], [122, 125]]}, {'green': [140, 176], 'red_start': 180, 'occ': [[139, 140], [144, 145], [148, 149], [152, 153], [159, 160], [168, 169], [174, 176], [177, 178], [183, 185], [189, 191]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [4, 33], 'red_start': 38, 'occ': [[0, 6], [6, 12], [12, 14], [14, 20], [20, 24], [25, 26], [26, 27], [28, 32], [32, 38], [38, 43], [44, 48], [49, 53]]}, {'green': [67, 94], 'red_start': 98, 'occ': [[61, 63], [71, 73], [75, 76], [77, 79], [87, 89], [94, 95], [97, 99], [101, 102], [109, 110]]}, {'green': [118, 154], 'red_start': 158, 'occ': [[111, 112], [113, 117], [118, 122], [123, 129], [130, 134], [135, 136], [137, 142], [143, 149], [150, 156], [156, 158], [158, 164], [164, 170]]}, {'green': [181, 198], 'red_start': 203, 'occ': [[176, 182], [183, 187], [188, 194], [195, 198], [199, 202], [202, 205], [205, 208], [209, 210], [211, 214]]}, {'green': [233, 243], 'red_start': 248, 'occ': [[224, 225], [228, 230], [234, 235], [240, 242], [248, 250], [257, 259]]}]}, {'fails': [0, 2, 3], 'pct': 60}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[-6, -4], [4, 5], [7, 9], [11, 13], [16, 17], [23, 24], [29, 31], [36, 38], [46, 48], [49, 51]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 25], 'red_start': 28, 'occ': [[-1, 1], [6, 7], [15, 17], [25, 27], [31, 33], [36, 38]]}, {'green': [49, 64], 'red_start': 67, 'occ': [[47, 52], [53, 58], [58, 63], [63, 69], [69, 75], [75, 80]]}, {'green': [96, 117], 'red_start': 122, 'occ': [[93, 95], [99, 100], [105, 106], [111, 113], [117, 119], [122, 123], [126, 128], [132, 134]]}]}, {'fails': [1], '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': [6, 16], 'red_start': 21, 'occ': [[-3, 2], [2, 7], [7, 10], [10, 13], [14, 18], [19, 20], [20, 22], [23, 26], [27, 29], [30, 33]]}, {'green': [49, 66], 'red_start': 70, 'occ': [[41, 43], [50, 51], [56, 57], [65, 67], [73, 75]]}, {'green': [93, 114], 'red_start': 119, 'occ': [[83, 88], [88, 93], [94, 100], [101, 102], [103, 105], [105, 111], [112, 116], [117, 118], [119, 123], [123, 125], [125, 127], [128, 134]]}, {'green': [142, 155], 'red_start': 160, 'occ': [[132, 134], [134, 136], [137, 138], [138, 141], [141, 143], [144, 146], [147, 149], [150, 152], [153, 159], [160, 163], [163, 167], [167, 171]]}, {'green': [190, 204], 'red_start': 208, 'occ': [[189, 190], [197, 199], [204, 205], [209, 211], [218, 219]]}]}, {'fails': [0, 2], 'pct': 40}), ({'cycles': [{'green': [3, 28], 'red_start': 32, 'occ': [[-2, -1], [0, 4], [5, 10], [11, 12], [12, 17], [17, 23], [24, 28], [29, 35], [35, 40], [41, 44]]}, {'green': [62, 88], 'red_start': 91, 'occ': [[56, 59], [59, 63], [63, 65], [66, 72], [72, 78], [79, 83], [83, 87], [87, 93], [94, 97], [97, 99], [99, 104]]}, {'green': [112, 132], 'red_start': 135, 'occ': [[102, 103], [110, 111], [119, 121], [126, 127], [129, 131], [138, 139]]}]}, {'fails': [0, 1], 'pct': 66}), ({'cycles': [{'green': [1, 38], 'red_start': 41, 'occ': [[0, 2], [2, 8], [9, 12], [12, 13], [13, 19], [20, 23], [23, 28], [29, 35], [35, 37], [37, 41], [42, 46], [47, 51], [52, 56]]}, {'green': [61, 84], 'red_start': 89, 'occ': [[51, 52], [58, 60], [63, 65], [67, 69], [76, 77], [81, 82], [87, 89], [90, 92], [100, 102]]}, {'green': [119, 150], 'red_start': 153, 'occ': [[109, 111], [112, 113], [114, 115], [117, 118], [122, 123], [126, 128], [136, 138], [139, 141], [143, 145], [147, 148], [155, 156], [163, 165]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [9, 31], 'red_start': 34, 'occ': [[3, 5], [13, 14], [16, 17], [23, 24], [32, 33], [38, 40], [43, 45]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 20], 'red_start': 25, 'occ': [[-4, 2], [3, 4], [4, 7], [8, 13], [14, 16], [17, 18], [18, 21], [22, 26], [27, 32], [32, 36]]}]}, {'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': [8, 28], 'red_start': 31, 'occ': [[7, 12], [12, 14], [15, 19], [20, 21], [21, 25], [25, 29], [30, 31], [31, 34], [34, 36], [37, 39], [39, 40], [41, 42], [42, 48]]}, {'green': [55, 89], 'red_start': 93, 'occ': [[51, 52], [53, 56], [57, 61], [61, 64], [64, 65], [66, 72], [72, 74], [74, 75], [75, 77], [77, 79], [79, 80], [80, 84], [84, 85], [85, 91], [91, 97], [97, 100], [100, 101], [102, 104], [104, 106]]}, {'green': [122, 157], 'red_start': 162, 'occ': [[122, 126], [126, 127], [128, 133], [134, 140], [140, 142], [142, 148], [149, 151], [152, 154], [155, 160], [161, 162], [163, 167], [168, 170], [170, 173], [173, 174]]}]}, {'fails': [0, 1, 2], 'pct': 100}), ({'cycles': [{'green': [8, 19], 'red_start': 24, 'occ': [[1, 3], [9, 10], [16, 18], [21, 23], [30, 32]]}, {'green': [44, 59], 'red_start': 64, 'occ': [[38, 44], [44, 49], [50, 54], [54, 55], [56, 60], [61, 63], [64, 66], [67, 68], [68, 69], [69, 75], [75, 80]]}, {'green': [89, 125], 'red_start': 129, 'occ': [[87, 88], [96, 98], [99, 100], [105, 107], [108, 109], [115, 116], [120, 122], [129, 130], [131, 133], [135, 136], [139, 141]]}, {'green': [155, 169], 'red_start': 173, 'occ': [[151, 153], [155, 157], [160, 161], [167, 169], [177, 179], [183, 184]]}, {'green': [198, 234], 'red_start': 238, 'occ': [[190, 192], [200, 201], [202, 204], [210, 211], [215, 217], [220, 222], [224, 226], [233, 235], [236, 238], [244, 246]]}]}, {'fails': [1], 'pct': 20})], [({'cycles': [{'green': [3, 13], 'red_start': 18, 'occ': [[-2, 0], [6, 7], [14, 15], [21, 23], [25, 26], [27, 28]]}, {'green': [48, 75], 'red_start': 78, 'occ': [[44, 49], [50, 53], [53, 57], [58, 60], [60, 64], [65, 70], [70, 74], [75, 77], [77, 82], [83, 86], [87, 88], [89, 95]]}, {'green': [98, 131], 'red_start': 136, 'occ': [[96, 98], [104, 106], [107, 109], [116, 117], [119, 120], [126, 127], [135, 137], [141, 143], [144, 145]]}]}, {'fails': [1], 'pct': 33}), ({'cycles': [{'green': [5, 31], 'red_start': 35, 'occ': [[-1, 4], [5, 8], [9, 14], [14, 20], [21, 22], [22, 28], [29, 32], [33, 35], [36, 41], [41, 45], [45, 46], [46, 47]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [6, 34], 'red_start': 37, 'occ': [[-2, 2], [2, 7], [8, 10], [10, 15], [16, 18], [18, 21], [21, 24], [25, 27], [27, 28], [28, 33], [33, 38], [38, 41], [41, 47], [47, 50]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [9, 45], 'red_start': 50, 'occ': [[8, 10], [12, 14], [19, 20], [22, 24], [26, 27], [30, 31], [33, 35], [41, 42], [48, 50], [54, 55], [57, 58]]}, {'green': [72, 92], 'red_start': 95, 'occ': [[72, 77], [78, 80], [80, 83], [84, 86], [86, 91], [92, 93], [94, 99], [100, 104], [104, 108]]}, {'green': [122, 154], 'red_start': 157, 'occ': [[113, 116], [116, 117], [117, 120], [121, 123], [124, 130], [131, 135], [135, 139], [140, 142], [142, 143], [144, 146], [147, 149], [150, 153], [153, 159], [160, 165], [166, 168]]}, {'green': [183, 216], 'red_start': 219, 'occ': [[179, 181], [181, 183], [183, 187], [187, 191], [191, 197], [198, 202], [202, 203], [204, 205], [206, 208], [208, 213], [214, 218], [219, 221], [222, 224], [224, 229], [230, 232]]}]}, {'fails': [1, 2, 3], 'pct': 75}), ({'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, 29], 'red_start': 32, 'occ': [[-3, 1], [1, 2], [3, 7], [7, 9], [9, 14], [15, 16], [17, 19], [19, 21], [21, 27], [28, 30], [30, 32], [33, 38], [39, 40], [40, 45]]}, {'green': [57, 92], 'red_start': 97, 'occ': [[53, 55], [60, 61], [64, 66], [68, 69], [76, 78], [82, 83], [85, 86], [93, 94], [95, 96], [97, 99], [107, 108]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [2, 42], 'red_start': 47, 'occ': [[2, 3], [3, 5], [6, 10], [10, 14], [14, 20], [21, 26], [26, 28], [28, 29], [30, 33], [34, 35], [35, 40], [40, 45], [45, 48], [48, 51], [52, 53], [53, 56], [56, 58]]}, {'green': [77, 111], 'red_start': 116, 'occ': [[70, 72], [80, 82], [87, 88], [96, 97], [100, 101], [107, 108], [116, 118], [122, 123], [125, 126]]}, {'green': [139, 173], 'red_start': 176, 'occ': [[136, 138], [139, 143], [143, 148], [149, 153], [154, 155], [155, 161], [161, 164], [164, 168], [168, 169], [170, 173], [174, 178], [179, 183], [184, 186], [186, 190]]}, {'green': [202, 223], 'red_start': 228, 'occ': [[201, 207], [207, 208], [208, 212], [213, 216], [217, 223], [223, 225], [225, 227], [227, 228], [228, 231], [232, 233], [233, 238], [239, 242]]}, {'green': [256, 269], 'red_start': 272, 'occ': [[253, 254], [254, 259], [260, 266], [266, 269], [270, 271], [271, 276], [277, 282], [283, 287]]}]}, {'fails': [0, 2, 3, 4], 'pct': 80}), ({'cycles': [{'green': [10, 42], 'red_start': 45, 'occ': [[7, 9], [11, 12], [18, 19], [20, 21], [27, 29], [36, 38], [44, 45], [51, 53], [56, 57]]}, {'green': [65, 102], 'red_start': 106, 'occ': [[61, 63], [71, 73], [75, 76], [79, 81], [82, 83], [86, 88], [90, 91], [96, 97], [98, 100], [106, 107], [110, 112]]}, {'green': [131, 143], 'red_start': 147, 'occ': [[128, 129], [130, 134], [134, 138], [138, 143], [143, 145], [146, 149], [150, 156], [156, 159]]}]}, {'fails': [2], 'pct': 33})], [({'cycles': [{'green': [6, 27], 'red_start': 30, 'occ': [[2, 4], [12, 14], [16, 17], [18, 20], [22, 23], [26, 28], [29, 31], [39, 41]]}, {'green': [52, 84], 'red_start': 89, 'occ': [[48, 49], [49, 55], [56, 57], [58, 60], [60, 65], [66, 71], [72, 73], [73, 75], [76, 77], [77, 80], [81, 85], [85, 90], [91, 93], [93, 94], [94, 99], [100, 103]]}]}, {'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}), ({'cycles': [{'green': [7, 38], 'red_start': 43, 'occ': [[7, 12], [12, 17], [17, 18], [19, 20], [21, 24], [25, 27], [28, 31], [32, 34], [34, 40], [40, 44], [44, 49], [50, 52], [52, 58]]}, {'green': [63, 77], 'red_start': 81, 'occ': [[60, 62], [68, 70], [78, 79], [82, 83], [89, 91]]}, {'green': [110, 135], 'red_start': 138, 'occ': [[100, 102], [109, 111], [113, 115], [123, 124], [131, 133], [136, 137], [144, 145], [148, 149]]}]}, {'fails': [0], 'pct': 33}), ({'cycles': [{'green': [2, 26], 'red_start': 30, 'occ': [[-1, 5], [6, 11], [12, 13], [13, 17], [17, 19], [19, 25], [26, 32], [33, 38], [39, 45]]}]}, {'fails': [0], 'pct': 100}), ({'cycles': [{'green': [3, 14], 'red_start': 17, 'occ': [[0, 1], [4, 6], [7, 9], [13, 15], [19, 21], [25, 26]]}, {'green': [44, 61], 'red_start': 66, 'occ': [[37, 38], [39, 43], [43, 45], [46, 50], [51, 52], [52, 53], [53, 55], [56, 57], [58, 60], [61, 63], [64, 69], [70, 71], [71, 73], [74, 80]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 37], 'red_start': 42, 'occ': [[4, 5], [11, 13], [17, 19], [27, 29], [31, 32], [35, 36], [39, 41], [42, 44], [47, 48], [49, 51]]}, {'green': [64, 81], 'red_start': 86, 'occ': [[61, 63], [68, 69], [71, 73], [76, 78], [79, 80], [86, 87], [91, 93], [95, 97]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [2, 28], 'red_start': 33, 'occ': [[-4, 0], [0, 3], [3, 6], [6, 12], [13, 18], [19, 24], [24, 25], [25, 30], [30, 36], [36, 39], [39, 42], [42, 43], [43, 48]]}, {'green': [61, 88], 'red_start': 93, 'occ': [[58, 60], [67, 68], [71, 72], [80, 81], [86, 87], [93, 95], [97, 99]]}, {'green': [116, 139], 'red_start': 142, 'occ': [[106, 110], [110, 112], [112, 114], [115, 121], [121, 125], [126, 132], [133, 139], [140, 144], [144, 146], [146, 151], [151, 157]]}, {'green': [168, 197], 'red_start': 202, 'occ': [[166, 170], [170, 175], [175, 177], [178, 183], [184, 185], [185, 187], [187, 189], [189, 192], [192, 198], [198, 202], [203, 209], [210, 213]]}]}, {'fails': [0, 2, 3], 'pct': 75}), ({'cycles': [{'green': [5, 29], 'red_start': 32, 'occ': [[-4, -1], [0, 1], [2, 4], [5, 6], [7, 9], [10, 15], [15, 21], [21, 25], [26, 28], [28, 34], [35, 40], [40, 46]]}, {'green': [59, 71], 'red_start': 76, 'occ': [[49, 54], [55, 57], [57, 61], [61, 64], [65, 67], [67, 72], [73, 74], [74, 80], [80, 82], [83, 85], [85, 89]]}, {'green': [104, 144], 'red_start': 148, 'occ': [[96, 98], [101, 102], [106, 108], [109, 111], [118, 120], [125, 127], [130, 131], [133, 134], [139, 140], [142, 144], [149, 150], [156, 157]]}]}, {'fails': [0, 1], 'pct': 66})]]
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': [1, 2], 'pct': 66} | {'fails': [1, 2], 'pct': 66} | Passed |
| timing oracle 1 | {'fails': [1], 'pct': 20} | {'fails': [1], 'pct': 20} | Passed |
| timing oracle 2 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 3 | {'fails': [1], 'pct': 33} | {'fails': [1], 'pct': 33} | Passed |
| timing oracle 4 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 5 | {'fails': [0, 2, 3], 'pct': 60} | {'fails': [0, 2, 3], 'pct': 60} | Passed |
| timing oracle 6 | {'fails': [3], 'pct': 20} | {'fails': [3], 'pct': 20} | Passed |
| timing oracle 7 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
SHA-256 / 96e251219289d504863a45e85e9bc368464fa682fd466e630a8a3ba41b9ae79d
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.776173+00:00.
Case digest / 1220cb6ff6dddec9064bceac790f2a3c224832356abf8bdff20f3cc53c287ca6