FA-68271 / Traffic signal timing plans / Open access
Split failure detection: occupancy before the window start is credited · case 01
Split failure detection returns a wrong result when occupancy before the window start is credited.
ROOT CAUSE
Presence that began before the window is counted from its own start, inflating the ratio.
VERIFIED REPAIR
Restore the occupancy clipping rule so that the step reads `max(0, min(off, hi) - max(on, lo))`.
Unsuccessful approach: Without the zero floor, events entirely outside the window subtract occupancy.
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) - on) 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, 19], 'red_start': 24, 'occ': [[0, 2], [4, 5], [12, 14], [18, 19], [21, 23], [27, 28], [35, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 25], 'red_start': 29, 'occ': [[-6, -4], [4, 5], [6, 8], [16, 17], [20, 22], [27, 29], [31, 33], [40, 41]]}, {'green': [57, 90], 'red_start': 93, 'occ': [[56, 57], [61, 62], [68, 70], [74, 75], [78, 80], [81, 83], [91, 93], [97, 99]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 49], 'red_start': 52, 'occ': [[7, 8], [9, 14], [14, 15], [16, 19], [19, 22], [22, 26], [26, 29], [29, 33], [33, 36], [37, 38], [38, 39], [40, 43], [43, 48], [49, 51], [52, 56], [56, 60], [60, 65]]}, {'green': [77, 91], 'red_start': 96, 'occ': [[69, 71], [72, 75], [76, 78], [78, 80], [81, 82], [83, 84], [84, 88], [89, 93], [94, 96], [96, 101], [101, 105], [106, 108]]}, {'green': [119, 144], 'red_start': 149, 'occ': [[111, 117], [117, 119], [119, 124], [125, 127], [128, 133], [134, 135], [135, 141], [142, 143], [144, 147], [148, 151], [152, 153], [153, 154], [155, 160]]}, {'green': [175, 205], 'red_start': 209, 'occ': [[169, 171], [179, 180], [181, 182], [186, 188], [190, 191], [199, 200], [208, 210], [214, 215], [216, 218], [219, 221]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [4, 17], 'red_start': 22, 'occ': [[-6, -4], [0, 2], [4, 5], [11, 12], [19, 20], [25, 26], [28, 29], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 36], 'red_start': 41, 'occ': [[9, 14], [14, 20], [21, 23], [24, 25], [26, 31], [32, 35], [36, 38], [39, 43], [43, 49], [50, 53]]}, {'green': [66, 98], 'red_start': 103, 'occ': [[65, 70], [70, 71], [72, 76], [76, 78], [79, 81], [82, 86], [87, 92], [92, 93], [93, 94], [95, 96], [97, 99], [99, 103], [104, 110], [110, 111], [112, 117]]}, {'green': [128, 142], 'red_start': 146, 'occ': [[128, 129], [129, 135], [136, 137], [138, 140], [141, 143], [144, 146], [147, 149], [149, 151], [152, 156], [157, 161]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[164, 165], [170, 172], [175, 177], [182, 184], [186, 188], [191, 192], [195, 196], [197, 199], [200, 202], [208, 210], [215, 216]]}]}, {'fails': [0, 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': [0, 19], 'red_start': 22, 'occ': [[-2, -1], [7, 8], [14, 15], [23, 24], [30, 32]]}, {'green': [43, 55], 'red_start': 58, 'occ': [[33, 38], [39, 40], [40, 41], [42, 47], [47, 51], [51, 52], [53, 56], [57, 60], [61, 66], [67, 71]]}, {'green': [80, 94], 'red_start': 99, 'occ': [[80, 81], [81, 84], [85, 88], [89, 92], [92, 95], [95, 98], [99, 100], [101, 103], [104, 107], [108, 113]]}, {'green': [128, 167], 'red_start': 171, 'occ': [[121, 122], [124, 125], [127, 129], [134, 135], [140, 142], [149, 151], [154, 155], [163, 164], [168, 170], [174, 175], [178, 179]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [5, 19], 'red_start': 24, 'occ': [[4, 6], [11, 12], [14, 16], [18, 19], [25, 27], [29, 30]]}, {'green': [52, 85], 'red_start': 90, 'occ': [[46, 47], [47, 48], [48, 49], [49, 54], [55, 57], [58, 62], [62, 68], [69, 74], [74, 79], [79, 81], [82, 88], [88, 93], [93, 95], [96, 98], [98, 102]]}, {'green': [118, 146], 'red_start': 150, 'occ': [[109, 115], [116, 121], [121, 127], [127, 129], [129, 132], [133, 136], [137, 142], [143, 144], [144, 150], [150, 154], [154, 156], [156, 157], [158, 159], [160, 162]]}, {'green': [171, 196], 'red_start': 201, 'occ': [[166, 168], [169, 171], [171, 173], [173, 179], [180, 182], [182, 188], [188, 194], [195, 196], [196, 201], [202, 204], [205, 207], [207, 209], [210, 212], [212, 216]]}, {'green': [227, 242], 'red_start': 246, 'occ': [[217, 219], [221, 222], [230, 231], [235, 236], [242, 243], [251, 252]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[1, 6], [7, 13], [13, 14], [14, 20], [21, 26], [27, 32], [32, 33], [34, 38], [38, 44], [44, 48], [49, 55]]}, {'green': [69, 80], 'red_start': 83, 'occ': [[64, 66], [73, 74], [75, 76], [82, 83], [85, 86], [94, 95]]}, {'green': [104, 131], 'red_start': 134, 'occ': [[102, 106], [106, 107], [108, 109], [110, 112], [112, 113], [114, 115], [116, 120], [121, 126], [126, 127], [127, 130], [130, 134], [134, 135], [136, 138], [139, 142], [143, 149]]}, {'green': [162, 180], 'red_start': 183, 'occ': [[159, 161], [163, 164], [166, 167], [174, 176], [181, 182], [190, 191]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [3, 42], 'red_start': 45, 'occ': [[-6, -4], [4, 5], [6, 7], [10, 11], [13, 14], [18, 19], [26, 27], [32, 34], [38, 40], [46, 48], [53, 55]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [8, 18], 'red_start': 21, 'occ': [[4, 6], [7, 8], [13, 14], [20, 21], [25, 27], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 21], 'red_start': 25, 'occ': [[4, 6], [8, 10], [12, 13], [14, 15], [16, 17], [23, 25], [29, 30]]}, {'green': [47, 87], 'red_start': 92, 'occ': [[41, 42], [46, 47], [55, 56], [57, 58], [61, 63], [65, 66], [69, 70], [71, 73], [74, 75], [80, 82], [83, 84], [89, 90], [97, 98], [101, 102], [103, 105]]}, {'green': [119, 129], 'red_start': 134, 'occ': [[115, 116], [121, 123], [124, 125], [130, 132], [133, 134], [138, 139], [142, 143]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 25], 'red_start': 30, 'occ': [[7, 11], [12, 14], [14, 19], [20, 21], [22, 24], [24, 27], [27, 32], [33, 34], [35, 38], [38, 39], [39, 42]]}, {'green': [51, 80], 'red_start': 84, 'occ': [[49, 50], [55, 56], [63, 64], [66, 67], [70, 71], [79, 80], [88, 90]]}, {'green': [113, 126], 'red_start': 130, 'occ': [[113, 114], [115, 116], [120, 122], [128, 129], [130, 132], [137, 139], [141, 143]]}, {'green': [157, 172], 'red_start': 175, 'occ': [[151, 152], [155, 157], [161, 162], [163, 165], [169, 171], [179, 181], [182, 184]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 22], 'red_start': 26, 'occ': [[-8, -2], [-1, 5], [6, 10], [11, 13], [13, 16], [17, 18], [18, 19], [19, 23], [24, 30], [31, 36], [36, 39]]}, {'green': [52, 89], 'red_start': 94, 'occ': [[47, 48], [49, 51], [54, 55], [59, 61], [66, 68], [73, 75], [83, 84], [86, 88], [90, 91], [94, 95], [102, 104]]}, {'green': [124, 137], 'red_start': 142, 'occ': [[114, 116], [117, 121], [122, 125], [125, 126], [127, 128], [129, 131], [132, 134], [134, 137], [137, 138], [138, 141], [141, 143], [143, 144], [145, 148], [149, 155]]}, {'green': [166, 206], 'red_start': 210, 'occ': [[156, 159], [160, 164], [164, 169], [169, 170], [171, 176], [176, 181], [181, 186], [186, 192], [192, 197], [197, 199], [200, 205], [205, 211], [211, 213], [213, 214], [214, 219], [219, 223]]}]}, {'fails': [0, 3], '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': [3, 43], 'red_start': 46, 'occ': [[2, 3], [10, 12], [16, 18], [19, 20], [21, 23], [26, 27], [30, 31], [37, 39], [44, 46], [51, 52], [55, 56]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [8, 39], 'red_start': 43, 'occ': [[4, 6], [8, 9], [13, 14], [20, 21], [22, 24], [31, 33], [36, 37], [40, 41], [49, 51]]}, {'green': [72, 89], 'red_start': 93, 'occ': [[65, 66], [69, 70], [72, 74], [77, 78], [80, 81], [89, 91], [92, 93], [96, 98], [103, 104]]}, {'green': [118, 149], 'red_start': 153, 'occ': [[109, 111], [117, 119], [123, 124], [130, 132], [140, 141], [143, 145], [149, 151], [158, 159], [164, 165]]}, {'green': [177, 199], 'red_start': 204, 'occ': [[170, 171], [171, 175], [175, 181], [182, 187], [188, 190], [190, 192], [193, 195], [196, 198], [199, 204], [204, 207], [208, 210], [211, 212], [212, 216]]}]}, {'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, 26], 'red_start': 30, 'occ': [[-3, -1], [4, 6], [7, 8], [12, 13], [18, 20], [26, 28], [34, 36], [41, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 22], 'red_start': 27, 'occ': [[-5, -4], [-1, 0], [4, 6], [12, 13], [17, 19], [22, 23], [26, 28], [33, 35], [38, 40]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[4, 6], [12, 14], [21, 22], [25, 27]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[-1, 0], [4, 5], [8, 10], [17, 18], [22, 23], [25, 27], [30, 32], [38, 40], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 17], 'red_start': 20, 'occ': [[-1, 0], [1, 2], [8, 9], [10, 12], [14, 15], [17, 19], [20, 22], [27, 28], [30, 32]]}, {'green': [49, 59], 'red_start': 64, 'occ': [[39, 41], [44, 45], [46, 48], [51, 53], [58, 60], [68, 70], [74, 76]]}, {'green': [94, 129], 'red_start': 132, 'occ': [[91, 95], [95, 100], [101, 103], [103, 107], [107, 113], [113, 119], [120, 126], [126, 127], [128, 131], [132, 137], [137, 138], [139, 140], [140, 142], [142, 145]]}]}, {'fails': [2], 'pct': 33}), ({'cycles': [{'green': [1, 32], 'red_start': 35, 'occ': [[1, 7], [8, 9], [10, 15], [15, 21], [21, 25], [25, 27], [27, 29], [29, 31], [32, 37], [37, 43], [43, 46], [46, 51]]}, {'green': [62, 88], 'red_start': 92, 'occ': [[62, 63], [64, 66], [67, 68], [68, 73], [74, 76], [77, 80], [80, 85], [86, 92], [92, 93], [94, 95], [96, 98], [99, 105]]}, {'green': [114, 131], 'red_start': 136, 'occ': [[110, 111], [114, 116], [117, 119], [126, 127], [128, 130], [137, 139], [142, 144]]}]}, {'fails': [0], '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': [2, 30], 'red_start': 33, 'occ': [[1, 7], [7, 9], [9, 14], [15, 18], [18, 21], [22, 26], [26, 32], [32, 37], [38, 41], [41, 45]]}, {'green': [57, 73], 'red_start': 78, 'occ': [[57, 58], [58, 62], [62, 65], [66, 68], [69, 70], [71, 76], [76, 77], [77, 81], [82, 88], [88, 94]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [5, 19], 'red_start': 22, 'occ': [[0, 3], [4, 7], [8, 11], [11, 17], [17, 23], [24, 30], [30, 34]]}, {'green': [50, 80], 'red_start': 85, 'occ': [[41, 45], [45, 51], [52, 58], [59, 64], [65, 68], [68, 71], [72, 75], [76, 79], [79, 81], [81, 87], [88, 92], [92, 98]]}, {'green': [111, 141], 'red_start': 146, 'occ': [[101, 106], [106, 111], [112, 113], [114, 116], [117, 119], [120, 121], [122, 123], [124, 130], [130, 135], [136, 141], [141, 143], [143, 146], [147, 152], [153, 157]]}, {'green': [175, 196], 'red_start': 200, 'occ': [[169, 171], [177, 178], [186, 187], [192, 194], [200, 202], [207, 208], [210, 211]]}, {'green': [221, 250], 'red_start': 254, 'occ': [[212, 214], [222, 223], [229, 230], [232, 234], [237, 238], [243, 244], [252, 254], [255, 257], [258, 259], [261, 263]]}]}, {'fails': [0, 1], 'pct': 40}), ({'cycles': [{'green': [7, 32], 'red_start': 36, 'occ': [[4, 5], [10, 11], [16, 18], [23, 24], [29, 31], [33, 35], [40, 41]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 19], 'red_start': 22, 'occ': [[2, 3], [8, 10], [12, 13], [21, 23], [30, 31]]}, {'green': [42, 64], 'red_start': 68, 'occ': [[34, 35], [43, 44], [51, 53], [60, 62], [64, 65], [71, 73], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[0, 3], [4, 6], [7, 11], [12, 16], [17, 18], [19, 23], [23, 27], [28, 29], [29, 32], [33, 38], [39, 45], [45, 51], [52, 53], [53, 55]]}, {'green': [69, 102], 'red_start': 106, 'occ': [[61, 62], [64, 65], [70, 71], [79, 80], [83, 84], [87, 89], [92, 94], [96, 98], [106, 107], [114, 115]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 37], 'red_start': 41, 'occ': [[-1, 1], [7, 9], [16, 17], [23, 24], [28, 29], [35, 37], [40, 42], [47, 48]]}, {'green': [64, 85], 'red_start': 89, 'occ': [[59, 62], [63, 68], [68, 72], [72, 73], [74, 76], [77, 81], [81, 84], [84, 89], [90, 91], [92, 94], [95, 97], [98, 104]]}, {'green': [114, 124], 'red_start': 128, 'occ': [[111, 114], [115, 120], [120, 124], [125, 126], [127, 130], [131, 134], [134, 137], [138, 143]]}, {'green': [152, 173], 'red_start': 176, 'occ': [[147, 151], [151, 157], [158, 160], [160, 164], [165, 168], [169, 171], [171, 176], [177, 179], [179, 180], [180, 185], [186, 188]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [8, 43], 'red_start': 46, 'occ': [[1, 2], [10, 12], [17, 19], [26, 27], [33, 34], [42, 44], [50, 52], [57, 59]]}, {'green': [69, 83], 'red_start': 87, 'occ': [[65, 66], [70, 72], [73, 75], [80, 82], [84, 85], [92, 93], [95, 96]]}, {'green': [109, 137], 'red_start': 141, 'occ': [[109, 112], [112, 116], [116, 121], [122, 124], [125, 126], [126, 131], [132, 137], [138, 142], [142, 146], [146, 149], [150, 153]]}, {'green': [164, 174], 'red_start': 179, 'occ': [[157, 159], [160, 161], [162, 164], [165, 167], [169, 170], [175, 176], [178, 180], [183, 184], [188, 190]]}]}, {'fails': [2], 'pct': 25})], [({'cycles': [{'green': [4, 16], 'red_start': 20, 'occ': [[1, 2], [2, 3], [3, 5], [5, 9], [10, 14], [14, 20], [21, 23], [24, 28], [29, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 30], 'red_start': 33, 'occ': [[4, 5], [7, 9], [12, 13], [21, 23], [26, 28], [36, 37], [40, 42]]}, {'green': [57, 69], 'red_start': 72, 'occ': [[55, 56], [58, 60], [67, 69], [77, 79]]}, {'green': [93, 109], 'red_start': 114, 'occ': [[86, 88], [91, 93], [100, 102], [105, 107], [108, 110], [117, 118], [120, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[1, 5], [5, 6], [7, 12], [13, 14], [15, 18], [19, 23], [23, 26], [26, 30], [30, 33], [34, 39]]}]}, {'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': [6, 37], 'red_start': 42, 'occ': [[3, 4], [11, 12], [19, 21], [29, 31], [33, 34], [37, 38], [43, 44], [52, 53]]}, {'green': [62, 82], 'red_start': 85, 'occ': [[61, 66], [67, 72], [72, 73], [74, 77], [78, 84], [84, 87], [87, 88], [88, 93], [94, 98]]}, {'green': [113, 133], 'red_start': 138, 'occ': [[104, 105], [110, 112], [117, 118], [119, 121], [124, 126], [129, 130], [134, 136], [143, 144], [149, 150]]}, {'green': [166, 200], 'red_start': 205, 'occ': [[164, 166], [167, 171], [172, 174], [175, 179], [180, 182], [182, 187], [188, 190], [191, 196], [197, 198], [198, 199], [200, 204], [204, 209], [209, 215], [216, 218]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [1, 13], 'red_start': 17, 'occ': [[-6, -4], [2, 3], [6, 8], [13, 15], [19, 20], [24, 25]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[2, 5], [5, 7], [8, 11], [12, 18], [18, 22], [23, 26], [26, 31], [31, 32], [32, 35], [36, 39], [39, 43], [43, 44], [44, 46], [47, 49]]}, {'green': [60, 78], 'red_start': 82, 'occ': [[59, 60], [63, 64], [68, 69], [72, 74], [81, 83], [87, 88]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [6, 44], 'red_start': 47, 'occ': [[1, 2], [6, 8], [13, 14], [15, 17], [22, 23], [29, 31], [35, 37], [45, 46], [54, 56], [58, 59]]}, {'green': [70, 84], 'red_start': 88, 'occ': [[62, 63], [65, 66], [73, 74], [82, 83], [88, 90], [97, 99]]}, {'green': [111, 132], 'red_start': 135, 'occ': [[108, 109], [117, 119], [122, 124], [129, 130], [138, 140], [141, 143]]}]}, {'fails': [], 'pct': 0})]]
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': 75} | {'fails': [0, 2], 'pct': 50} | Failed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 4 | {'fails': [0, 1], 'pct': 50} | {'fails': [0, 1], 'pct': 50} | Passed |
| timing oracle 5 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 6 | {'fails': [1, 2], 'pct': 50} | {'fails': [1], 'pct': 25} | Failed |
| timing oracle 7 | {'fails': [1, 2, 3], 'pct': 60} | {'fails': [1, 2], 'pct': 40} | Failed |
SHA-256 / ca7ddd72f09110edf67e0f5870e2e93d0236d7874298b6717d58c9b84e113b2a
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(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, 19], 'red_start': 24, 'occ': [[0, 2], [4, 5], [12, 14], [18, 19], [21, 23], [27, 28], [35, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 25], 'red_start': 29, 'occ': [[-6, -4], [4, 5], [6, 8], [16, 17], [20, 22], [27, 29], [31, 33], [40, 41]]}, {'green': [57, 90], 'red_start': 93, 'occ': [[56, 57], [61, 62], [68, 70], [74, 75], [78, 80], [81, 83], [91, 93], [97, 99]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 49], 'red_start': 52, 'occ': [[7, 8], [9, 14], [14, 15], [16, 19], [19, 22], [22, 26], [26, 29], [29, 33], [33, 36], [37, 38], [38, 39], [40, 43], [43, 48], [49, 51], [52, 56], [56, 60], [60, 65]]}, {'green': [77, 91], 'red_start': 96, 'occ': [[69, 71], [72, 75], [76, 78], [78, 80], [81, 82], [83, 84], [84, 88], [89, 93], [94, 96], [96, 101], [101, 105], [106, 108]]}, {'green': [119, 144], 'red_start': 149, 'occ': [[111, 117], [117, 119], [119, 124], [125, 127], [128, 133], [134, 135], [135, 141], [142, 143], [144, 147], [148, 151], [152, 153], [153, 154], [155, 160]]}, {'green': [175, 205], 'red_start': 209, 'occ': [[169, 171], [179, 180], [181, 182], [186, 188], [190, 191], [199, 200], [208, 210], [214, 215], [216, 218], [219, 221]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [4, 17], 'red_start': 22, 'occ': [[-6, -4], [0, 2], [4, 5], [11, 12], [19, 20], [25, 26], [28, 29], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 36], 'red_start': 41, 'occ': [[9, 14], [14, 20], [21, 23], [24, 25], [26, 31], [32, 35], [36, 38], [39, 43], [43, 49], [50, 53]]}, {'green': [66, 98], 'red_start': 103, 'occ': [[65, 70], [70, 71], [72, 76], [76, 78], [79, 81], [82, 86], [87, 92], [92, 93], [93, 94], [95, 96], [97, 99], [99, 103], [104, 110], [110, 111], [112, 117]]}, {'green': [128, 142], 'red_start': 146, 'occ': [[128, 129], [129, 135], [136, 137], [138, 140], [141, 143], [144, 146], [147, 149], [149, 151], [152, 156], [157, 161]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[164, 165], [170, 172], [175, 177], [182, 184], [186, 188], [191, 192], [195, 196], [197, 199], [200, 202], [208, 210], [215, 216]]}]}, {'fails': [0, 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': [0, 19], 'red_start': 22, 'occ': [[-2, -1], [7, 8], [14, 15], [23, 24], [30, 32]]}, {'green': [43, 55], 'red_start': 58, 'occ': [[33, 38], [39, 40], [40, 41], [42, 47], [47, 51], [51, 52], [53, 56], [57, 60], [61, 66], [67, 71]]}, {'green': [80, 94], 'red_start': 99, 'occ': [[80, 81], [81, 84], [85, 88], [89, 92], [92, 95], [95, 98], [99, 100], [101, 103], [104, 107], [108, 113]]}, {'green': [128, 167], 'red_start': 171, 'occ': [[121, 122], [124, 125], [127, 129], [134, 135], [140, 142], [149, 151], [154, 155], [163, 164], [168, 170], [174, 175], [178, 179]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [5, 19], 'red_start': 24, 'occ': [[4, 6], [11, 12], [14, 16], [18, 19], [25, 27], [29, 30]]}, {'green': [52, 85], 'red_start': 90, 'occ': [[46, 47], [47, 48], [48, 49], [49, 54], [55, 57], [58, 62], [62, 68], [69, 74], [74, 79], [79, 81], [82, 88], [88, 93], [93, 95], [96, 98], [98, 102]]}, {'green': [118, 146], 'red_start': 150, 'occ': [[109, 115], [116, 121], [121, 127], [127, 129], [129, 132], [133, 136], [137, 142], [143, 144], [144, 150], [150, 154], [154, 156], [156, 157], [158, 159], [160, 162]]}, {'green': [171, 196], 'red_start': 201, 'occ': [[166, 168], [169, 171], [171, 173], [173, 179], [180, 182], [182, 188], [188, 194], [195, 196], [196, 201], [202, 204], [205, 207], [207, 209], [210, 212], [212, 216]]}, {'green': [227, 242], 'red_start': 246, 'occ': [[217, 219], [221, 222], [230, 231], [235, 236], [242, 243], [251, 252]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[1, 6], [7, 13], [13, 14], [14, 20], [21, 26], [27, 32], [32, 33], [34, 38], [38, 44], [44, 48], [49, 55]]}, {'green': [69, 80], 'red_start': 83, 'occ': [[64, 66], [73, 74], [75, 76], [82, 83], [85, 86], [94, 95]]}, {'green': [104, 131], 'red_start': 134, 'occ': [[102, 106], [106, 107], [108, 109], [110, 112], [112, 113], [114, 115], [116, 120], [121, 126], [126, 127], [127, 130], [130, 134], [134, 135], [136, 138], [139, 142], [143, 149]]}, {'green': [162, 180], 'red_start': 183, 'occ': [[159, 161], [163, 164], [166, 167], [174, 176], [181, 182], [190, 191]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [3, 42], 'red_start': 45, 'occ': [[-6, -4], [4, 5], [6, 7], [10, 11], [13, 14], [18, 19], [26, 27], [32, 34], [38, 40], [46, 48], [53, 55]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [8, 18], 'red_start': 21, 'occ': [[4, 6], [7, 8], [13, 14], [20, 21], [25, 27], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 21], 'red_start': 25, 'occ': [[4, 6], [8, 10], [12, 13], [14, 15], [16, 17], [23, 25], [29, 30]]}, {'green': [47, 87], 'red_start': 92, 'occ': [[41, 42], [46, 47], [55, 56], [57, 58], [61, 63], [65, 66], [69, 70], [71, 73], [74, 75], [80, 82], [83, 84], [89, 90], [97, 98], [101, 102], [103, 105]]}, {'green': [119, 129], 'red_start': 134, 'occ': [[115, 116], [121, 123], [124, 125], [130, 132], [133, 134], [138, 139], [142, 143]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 25], 'red_start': 30, 'occ': [[7, 11], [12, 14], [14, 19], [20, 21], [22, 24], [24, 27], [27, 32], [33, 34], [35, 38], [38, 39], [39, 42]]}, {'green': [51, 80], 'red_start': 84, 'occ': [[49, 50], [55, 56], [63, 64], [66, 67], [70, 71], [79, 80], [88, 90]]}, {'green': [113, 126], 'red_start': 130, 'occ': [[113, 114], [115, 116], [120, 122], [128, 129], [130, 132], [137, 139], [141, 143]]}, {'green': [157, 172], 'red_start': 175, 'occ': [[151, 152], [155, 157], [161, 162], [163, 165], [169, 171], [179, 181], [182, 184]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 22], 'red_start': 26, 'occ': [[-8, -2], [-1, 5], [6, 10], [11, 13], [13, 16], [17, 18], [18, 19], [19, 23], [24, 30], [31, 36], [36, 39]]}, {'green': [52, 89], 'red_start': 94, 'occ': [[47, 48], [49, 51], [54, 55], [59, 61], [66, 68], [73, 75], [83, 84], [86, 88], [90, 91], [94, 95], [102, 104]]}, {'green': [124, 137], 'red_start': 142, 'occ': [[114, 116], [117, 121], [122, 125], [125, 126], [127, 128], [129, 131], [132, 134], [134, 137], [137, 138], [138, 141], [141, 143], [143, 144], [145, 148], [149, 155]]}, {'green': [166, 206], 'red_start': 210, 'occ': [[156, 159], [160, 164], [164, 169], [169, 170], [171, 176], [176, 181], [181, 186], [186, 192], [192, 197], [197, 199], [200, 205], [205, 211], [211, 213], [213, 214], [214, 219], [219, 223]]}]}, {'fails': [0, 3], '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': [3, 43], 'red_start': 46, 'occ': [[2, 3], [10, 12], [16, 18], [19, 20], [21, 23], [26, 27], [30, 31], [37, 39], [44, 46], [51, 52], [55, 56]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [8, 39], 'red_start': 43, 'occ': [[4, 6], [8, 9], [13, 14], [20, 21], [22, 24], [31, 33], [36, 37], [40, 41], [49, 51]]}, {'green': [72, 89], 'red_start': 93, 'occ': [[65, 66], [69, 70], [72, 74], [77, 78], [80, 81], [89, 91], [92, 93], [96, 98], [103, 104]]}, {'green': [118, 149], 'red_start': 153, 'occ': [[109, 111], [117, 119], [123, 124], [130, 132], [140, 141], [143, 145], [149, 151], [158, 159], [164, 165]]}, {'green': [177, 199], 'red_start': 204, 'occ': [[170, 171], [171, 175], [175, 181], [182, 187], [188, 190], [190, 192], [193, 195], [196, 198], [199, 204], [204, 207], [208, 210], [211, 212], [212, 216]]}]}, {'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, 26], 'red_start': 30, 'occ': [[-3, -1], [4, 6], [7, 8], [12, 13], [18, 20], [26, 28], [34, 36], [41, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 22], 'red_start': 27, 'occ': [[-5, -4], [-1, 0], [4, 6], [12, 13], [17, 19], [22, 23], [26, 28], [33, 35], [38, 40]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[4, 6], [12, 14], [21, 22], [25, 27]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[-1, 0], [4, 5], [8, 10], [17, 18], [22, 23], [25, 27], [30, 32], [38, 40], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 17], 'red_start': 20, 'occ': [[-1, 0], [1, 2], [8, 9], [10, 12], [14, 15], [17, 19], [20, 22], [27, 28], [30, 32]]}, {'green': [49, 59], 'red_start': 64, 'occ': [[39, 41], [44, 45], [46, 48], [51, 53], [58, 60], [68, 70], [74, 76]]}, {'green': [94, 129], 'red_start': 132, 'occ': [[91, 95], [95, 100], [101, 103], [103, 107], [107, 113], [113, 119], [120, 126], [126, 127], [128, 131], [132, 137], [137, 138], [139, 140], [140, 142], [142, 145]]}]}, {'fails': [2], 'pct': 33}), ({'cycles': [{'green': [1, 32], 'red_start': 35, 'occ': [[1, 7], [8, 9], [10, 15], [15, 21], [21, 25], [25, 27], [27, 29], [29, 31], [32, 37], [37, 43], [43, 46], [46, 51]]}, {'green': [62, 88], 'red_start': 92, 'occ': [[62, 63], [64, 66], [67, 68], [68, 73], [74, 76], [77, 80], [80, 85], [86, 92], [92, 93], [94, 95], [96, 98], [99, 105]]}, {'green': [114, 131], 'red_start': 136, 'occ': [[110, 111], [114, 116], [117, 119], [126, 127], [128, 130], [137, 139], [142, 144]]}]}, {'fails': [0], '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': [2, 30], 'red_start': 33, 'occ': [[1, 7], [7, 9], [9, 14], [15, 18], [18, 21], [22, 26], [26, 32], [32, 37], [38, 41], [41, 45]]}, {'green': [57, 73], 'red_start': 78, 'occ': [[57, 58], [58, 62], [62, 65], [66, 68], [69, 70], [71, 76], [76, 77], [77, 81], [82, 88], [88, 94]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [5, 19], 'red_start': 22, 'occ': [[0, 3], [4, 7], [8, 11], [11, 17], [17, 23], [24, 30], [30, 34]]}, {'green': [50, 80], 'red_start': 85, 'occ': [[41, 45], [45, 51], [52, 58], [59, 64], [65, 68], [68, 71], [72, 75], [76, 79], [79, 81], [81, 87], [88, 92], [92, 98]]}, {'green': [111, 141], 'red_start': 146, 'occ': [[101, 106], [106, 111], [112, 113], [114, 116], [117, 119], [120, 121], [122, 123], [124, 130], [130, 135], [136, 141], [141, 143], [143, 146], [147, 152], [153, 157]]}, {'green': [175, 196], 'red_start': 200, 'occ': [[169, 171], [177, 178], [186, 187], [192, 194], [200, 202], [207, 208], [210, 211]]}, {'green': [221, 250], 'red_start': 254, 'occ': [[212, 214], [222, 223], [229, 230], [232, 234], [237, 238], [243, 244], [252, 254], [255, 257], [258, 259], [261, 263]]}]}, {'fails': [0, 1], 'pct': 40}), ({'cycles': [{'green': [7, 32], 'red_start': 36, 'occ': [[4, 5], [10, 11], [16, 18], [23, 24], [29, 31], [33, 35], [40, 41]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 19], 'red_start': 22, 'occ': [[2, 3], [8, 10], [12, 13], [21, 23], [30, 31]]}, {'green': [42, 64], 'red_start': 68, 'occ': [[34, 35], [43, 44], [51, 53], [60, 62], [64, 65], [71, 73], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[0, 3], [4, 6], [7, 11], [12, 16], [17, 18], [19, 23], [23, 27], [28, 29], [29, 32], [33, 38], [39, 45], [45, 51], [52, 53], [53, 55]]}, {'green': [69, 102], 'red_start': 106, 'occ': [[61, 62], [64, 65], [70, 71], [79, 80], [83, 84], [87, 89], [92, 94], [96, 98], [106, 107], [114, 115]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 37], 'red_start': 41, 'occ': [[-1, 1], [7, 9], [16, 17], [23, 24], [28, 29], [35, 37], [40, 42], [47, 48]]}, {'green': [64, 85], 'red_start': 89, 'occ': [[59, 62], [63, 68], [68, 72], [72, 73], [74, 76], [77, 81], [81, 84], [84, 89], [90, 91], [92, 94], [95, 97], [98, 104]]}, {'green': [114, 124], 'red_start': 128, 'occ': [[111, 114], [115, 120], [120, 124], [125, 126], [127, 130], [131, 134], [134, 137], [138, 143]]}, {'green': [152, 173], 'red_start': 176, 'occ': [[147, 151], [151, 157], [158, 160], [160, 164], [165, 168], [169, 171], [171, 176], [177, 179], [179, 180], [180, 185], [186, 188]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [8, 43], 'red_start': 46, 'occ': [[1, 2], [10, 12], [17, 19], [26, 27], [33, 34], [42, 44], [50, 52], [57, 59]]}, {'green': [69, 83], 'red_start': 87, 'occ': [[65, 66], [70, 72], [73, 75], [80, 82], [84, 85], [92, 93], [95, 96]]}, {'green': [109, 137], 'red_start': 141, 'occ': [[109, 112], [112, 116], [116, 121], [122, 124], [125, 126], [126, 131], [132, 137], [138, 142], [142, 146], [146, 149], [150, 153]]}, {'green': [164, 174], 'red_start': 179, 'occ': [[157, 159], [160, 161], [162, 164], [165, 167], [169, 170], [175, 176], [178, 180], [183, 184], [188, 190]]}]}, {'fails': [2], 'pct': 25})], [({'cycles': [{'green': [4, 16], 'red_start': 20, 'occ': [[1, 2], [2, 3], [3, 5], [5, 9], [10, 14], [14, 20], [21, 23], [24, 28], [29, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 30], 'red_start': 33, 'occ': [[4, 5], [7, 9], [12, 13], [21, 23], [26, 28], [36, 37], [40, 42]]}, {'green': [57, 69], 'red_start': 72, 'occ': [[55, 56], [58, 60], [67, 69], [77, 79]]}, {'green': [93, 109], 'red_start': 114, 'occ': [[86, 88], [91, 93], [100, 102], [105, 107], [108, 110], [117, 118], [120, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[1, 5], [5, 6], [7, 12], [13, 14], [15, 18], [19, 23], [23, 26], [26, 30], [30, 33], [34, 39]]}]}, {'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': [6, 37], 'red_start': 42, 'occ': [[3, 4], [11, 12], [19, 21], [29, 31], [33, 34], [37, 38], [43, 44], [52, 53]]}, {'green': [62, 82], 'red_start': 85, 'occ': [[61, 66], [67, 72], [72, 73], [74, 77], [78, 84], [84, 87], [87, 88], [88, 93], [94, 98]]}, {'green': [113, 133], 'red_start': 138, 'occ': [[104, 105], [110, 112], [117, 118], [119, 121], [124, 126], [129, 130], [134, 136], [143, 144], [149, 150]]}, {'green': [166, 200], 'red_start': 205, 'occ': [[164, 166], [167, 171], [172, 174], [175, 179], [180, 182], [182, 187], [188, 190], [191, 196], [197, 198], [198, 199], [200, 204], [204, 209], [209, 215], [216, 218]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [1, 13], 'red_start': 17, 'occ': [[-6, -4], [2, 3], [6, 8], [13, 15], [19, 20], [24, 25]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[2, 5], [5, 7], [8, 11], [12, 18], [18, 22], [23, 26], [26, 31], [31, 32], [32, 35], [36, 39], [39, 43], [43, 44], [44, 46], [47, 49]]}, {'green': [60, 78], 'red_start': 82, 'occ': [[59, 60], [63, 64], [68, 69], [72, 74], [81, 83], [87, 88]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [6, 44], 'red_start': 47, 'occ': [[1, 2], [6, 8], [13, 14], [15, 17], [22, 23], [29, 31], [35, 37], [45, 46], [54, 56], [58, 59]]}, {'green': [70, 84], 'red_start': 88, 'occ': [[62, 63], [65, 66], [73, 74], [82, 83], [88, 90], [97, 99]]}, {'green': [111, 132], 'red_start': 135, 'occ': [[108, 109], [117, 119], [122, 124], [129, 130], [138, 140], [141, 143]]}]}, {'fails': [], 'pct': 0})]]
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': [], 'pct': 0} | {'fails': [0, 2], 'pct': 50} | Failed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 4 | {'fails': [], 'pct': 0} | {'fails': [0, 1], 'pct': 50} | Failed |
| timing oracle 5 | {'fails': [2], 'pct': 33} | {'fails': [0, 1, 2], 'pct': 100} | Failed |
| timing oracle 6 | {'fails': [], 'pct': 0} | {'fails': [1], 'pct': 25} | Failed |
| timing oracle 7 | {'fails': [], 'pct': 0} | {'fails': [1, 2], 'pct': 40} | Failed |
SHA-256 / e9a5a8111f09cc371e0969ba66e69cb37d86339ea3e394c70024d5a12626c53d
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, 19], 'red_start': 24, 'occ': [[0, 2], [4, 5], [12, 14], [18, 19], [21, 23], [27, 28], [35, 37]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 25], 'red_start': 29, 'occ': [[-6, -4], [4, 5], [6, 8], [16, 17], [20, 22], [27, 29], [31, 33], [40, 41]]}, {'green': [57, 90], 'red_start': 93, 'occ': [[56, 57], [61, 62], [68, 70], [74, 75], [78, 80], [81, 83], [91, 93], [97, 99]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 49], 'red_start': 52, 'occ': [[7, 8], [9, 14], [14, 15], [16, 19], [19, 22], [22, 26], [26, 29], [29, 33], [33, 36], [37, 38], [38, 39], [40, 43], [43, 48], [49, 51], [52, 56], [56, 60], [60, 65]]}, {'green': [77, 91], 'red_start': 96, 'occ': [[69, 71], [72, 75], [76, 78], [78, 80], [81, 82], [83, 84], [84, 88], [89, 93], [94, 96], [96, 101], [101, 105], [106, 108]]}, {'green': [119, 144], 'red_start': 149, 'occ': [[111, 117], [117, 119], [119, 124], [125, 127], [128, 133], [134, 135], [135, 141], [142, 143], [144, 147], [148, 151], [152, 153], [153, 154], [155, 160]]}, {'green': [175, 205], 'red_start': 209, 'occ': [[169, 171], [179, 180], [181, 182], [186, 188], [190, 191], [199, 200], [208, 210], [214, 215], [216, 218], [219, 221]]}]}, {'fails': [0, 2], 'pct': 50}), ({'cycles': [{'green': [4, 17], 'red_start': 22, 'occ': [[-6, -4], [0, 2], [4, 5], [11, 12], [19, 20], [25, 26], [28, 29], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [9, 36], 'red_start': 41, 'occ': [[9, 14], [14, 20], [21, 23], [24, 25], [26, 31], [32, 35], [36, 38], [39, 43], [43, 49], [50, 53]]}, {'green': [66, 98], 'red_start': 103, 'occ': [[65, 70], [70, 71], [72, 76], [76, 78], [79, 81], [82, 86], [87, 92], [92, 93], [93, 94], [95, 96], [97, 99], [99, 103], [104, 110], [110, 111], [112, 117]]}, {'green': [128, 142], 'red_start': 146, 'occ': [[128, 129], [129, 135], [136, 137], [138, 140], [141, 143], [144, 146], [147, 149], [149, 151], [152, 156], [157, 161]]}, {'green': [172, 206], 'red_start': 209, 'occ': [[164, 165], [170, 172], [175, 177], [182, 184], [186, 188], [191, 192], [195, 196], [197, 199], [200, 202], [208, 210], [215, 216]]}]}, {'fails': [0, 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': [0, 19], 'red_start': 22, 'occ': [[-2, -1], [7, 8], [14, 15], [23, 24], [30, 32]]}, {'green': [43, 55], 'red_start': 58, 'occ': [[33, 38], [39, 40], [40, 41], [42, 47], [47, 51], [51, 52], [53, 56], [57, 60], [61, 66], [67, 71]]}, {'green': [80, 94], 'red_start': 99, 'occ': [[80, 81], [81, 84], [85, 88], [89, 92], [92, 95], [95, 98], [99, 100], [101, 103], [104, 107], [108, 113]]}, {'green': [128, 167], 'red_start': 171, 'occ': [[121, 122], [124, 125], [127, 129], [134, 135], [140, 142], [149, 151], [154, 155], [163, 164], [168, 170], [174, 175], [178, 179]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [5, 19], 'red_start': 24, 'occ': [[4, 6], [11, 12], [14, 16], [18, 19], [25, 27], [29, 30]]}, {'green': [52, 85], 'red_start': 90, 'occ': [[46, 47], [47, 48], [48, 49], [49, 54], [55, 57], [58, 62], [62, 68], [69, 74], [74, 79], [79, 81], [82, 88], [88, 93], [93, 95], [96, 98], [98, 102]]}, {'green': [118, 146], 'red_start': 150, 'occ': [[109, 115], [116, 121], [121, 127], [127, 129], [129, 132], [133, 136], [137, 142], [143, 144], [144, 150], [150, 154], [154, 156], [156, 157], [158, 159], [160, 162]]}, {'green': [171, 196], 'red_start': 201, 'occ': [[166, 168], [169, 171], [171, 173], [173, 179], [180, 182], [182, 188], [188, 194], [195, 196], [196, 201], [202, 204], [205, 207], [207, 209], [210, 212], [212, 216]]}, {'green': [227, 242], 'red_start': 246, 'occ': [[217, 219], [221, 222], [230, 231], [235, 236], [242, 243], [251, 252]]}]}, {'fails': [1, 2], 'pct': 40})], [({'cycles': [{'green': [7, 36], 'red_start': 39, 'occ': [[1, 6], [7, 13], [13, 14], [14, 20], [21, 26], [27, 32], [32, 33], [34, 38], [38, 44], [44, 48], [49, 55]]}, {'green': [69, 80], 'red_start': 83, 'occ': [[64, 66], [73, 74], [75, 76], [82, 83], [85, 86], [94, 95]]}, {'green': [104, 131], 'red_start': 134, 'occ': [[102, 106], [106, 107], [108, 109], [110, 112], [112, 113], [114, 115], [116, 120], [121, 126], [126, 127], [127, 130], [130, 134], [134, 135], [136, 138], [139, 142], [143, 149]]}, {'green': [162, 180], 'red_start': 183, 'occ': [[159, 161], [163, 164], [166, 167], [174, 176], [181, 182], [190, 191]]}]}, {'fails': [0], 'pct': 25}), ({'cycles': [{'green': [3, 42], 'red_start': 45, 'occ': [[-6, -4], [4, 5], [6, 7], [10, 11], [13, 14], [18, 19], [26, 27], [32, 34], [38, 40], [46, 48], [53, 55]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [8, 18], 'red_start': 21, 'occ': [[4, 6], [7, 8], [13, 14], [20, 21], [25, 27], [32, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 21], 'red_start': 25, 'occ': [[4, 6], [8, 10], [12, 13], [14, 15], [16, 17], [23, 25], [29, 30]]}, {'green': [47, 87], 'red_start': 92, 'occ': [[41, 42], [46, 47], [55, 56], [57, 58], [61, 63], [65, 66], [69, 70], [71, 73], [74, 75], [80, 82], [83, 84], [89, 90], [97, 98], [101, 102], [103, 105]]}, {'green': [119, 129], 'red_start': 134, 'occ': [[115, 116], [121, 123], [124, 125], [130, 132], [133, 134], [138, 139], [142, 143]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [10, 25], 'red_start': 30, 'occ': [[7, 11], [12, 14], [14, 19], [20, 21], [22, 24], [24, 27], [27, 32], [33, 34], [35, 38], [38, 39], [39, 42]]}, {'green': [51, 80], 'red_start': 84, 'occ': [[49, 50], [55, 56], [63, 64], [66, 67], [70, 71], [79, 80], [88, 90]]}, {'green': [113, 126], 'red_start': 130, 'occ': [[113, 114], [115, 116], [120, 122], [128, 129], [130, 132], [137, 139], [141, 143]]}, {'green': [157, 172], 'red_start': 175, 'occ': [[151, 152], [155, 157], [161, 162], [163, 165], [169, 171], [179, 181], [182, 184]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 22], 'red_start': 26, 'occ': [[-8, -2], [-1, 5], [6, 10], [11, 13], [13, 16], [17, 18], [18, 19], [19, 23], [24, 30], [31, 36], [36, 39]]}, {'green': [52, 89], 'red_start': 94, 'occ': [[47, 48], [49, 51], [54, 55], [59, 61], [66, 68], [73, 75], [83, 84], [86, 88], [90, 91], [94, 95], [102, 104]]}, {'green': [124, 137], 'red_start': 142, 'occ': [[114, 116], [117, 121], [122, 125], [125, 126], [127, 128], [129, 131], [132, 134], [134, 137], [137, 138], [138, 141], [141, 143], [143, 144], [145, 148], [149, 155]]}, {'green': [166, 206], 'red_start': 210, 'occ': [[156, 159], [160, 164], [164, 169], [169, 170], [171, 176], [176, 181], [181, 186], [186, 192], [192, 197], [197, 199], [200, 205], [205, 211], [211, 213], [213, 214], [214, 219], [219, 223]]}]}, {'fails': [0, 3], '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': [3, 43], 'red_start': 46, 'occ': [[2, 3], [10, 12], [16, 18], [19, 20], [21, 23], [26, 27], [30, 31], [37, 39], [44, 46], [51, 52], [55, 56]]}]}, {'fails': [], 'pct': 0})], [({'cycles': [{'green': [8, 39], 'red_start': 43, 'occ': [[4, 6], [8, 9], [13, 14], [20, 21], [22, 24], [31, 33], [36, 37], [40, 41], [49, 51]]}, {'green': [72, 89], 'red_start': 93, 'occ': [[65, 66], [69, 70], [72, 74], [77, 78], [80, 81], [89, 91], [92, 93], [96, 98], [103, 104]]}, {'green': [118, 149], 'red_start': 153, 'occ': [[109, 111], [117, 119], [123, 124], [130, 132], [140, 141], [143, 145], [149, 151], [158, 159], [164, 165]]}, {'green': [177, 199], 'red_start': 204, 'occ': [[170, 171], [171, 175], [175, 181], [182, 187], [188, 190], [190, 192], [193, 195], [196, 198], [199, 204], [204, 207], [208, 210], [211, 212], [212, 216]]}]}, {'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, 26], 'red_start': 30, 'occ': [[-3, -1], [4, 6], [7, 8], [12, 13], [18, 20], [26, 28], [34, 36], [41, 42]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 22], 'red_start': 27, 'occ': [[-5, -4], [-1, 0], [4, 6], [12, 13], [17, 19], [22, 23], [26, 28], [33, 35], [38, 40]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 16], 'red_start': 19, 'occ': [[4, 6], [12, 14], [21, 22], [25, 27]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[-1, 0], [4, 5], [8, 10], [17, 18], [22, 23], [25, 27], [30, 32], [38, 40], [46, 47]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [4, 17], 'red_start': 20, 'occ': [[-1, 0], [1, 2], [8, 9], [10, 12], [14, 15], [17, 19], [20, 22], [27, 28], [30, 32]]}, {'green': [49, 59], 'red_start': 64, 'occ': [[39, 41], [44, 45], [46, 48], [51, 53], [58, 60], [68, 70], [74, 76]]}, {'green': [94, 129], 'red_start': 132, 'occ': [[91, 95], [95, 100], [101, 103], [103, 107], [107, 113], [113, 119], [120, 126], [126, 127], [128, 131], [132, 137], [137, 138], [139, 140], [140, 142], [142, 145]]}]}, {'fails': [2], 'pct': 33}), ({'cycles': [{'green': [1, 32], 'red_start': 35, 'occ': [[1, 7], [8, 9], [10, 15], [15, 21], [21, 25], [25, 27], [27, 29], [29, 31], [32, 37], [37, 43], [43, 46], [46, 51]]}, {'green': [62, 88], 'red_start': 92, 'occ': [[62, 63], [64, 66], [67, 68], [68, 73], [74, 76], [77, 80], [80, 85], [86, 92], [92, 93], [94, 95], [96, 98], [99, 105]]}, {'green': [114, 131], 'red_start': 136, 'occ': [[110, 111], [114, 116], [117, 119], [126, 127], [128, 130], [137, 139], [142, 144]]}]}, {'fails': [0], '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': [2, 30], 'red_start': 33, 'occ': [[1, 7], [7, 9], [9, 14], [15, 18], [18, 21], [22, 26], [26, 32], [32, 37], [38, 41], [41, 45]]}, {'green': [57, 73], 'red_start': 78, 'occ': [[57, 58], [58, 62], [62, 65], [66, 68], [69, 70], [71, 76], [76, 77], [77, 81], [82, 88], [88, 94]]}]}, {'fails': [0, 1], 'pct': 100}), ({'cycles': [{'green': [5, 19], 'red_start': 22, 'occ': [[0, 3], [4, 7], [8, 11], [11, 17], [17, 23], [24, 30], [30, 34]]}, {'green': [50, 80], 'red_start': 85, 'occ': [[41, 45], [45, 51], [52, 58], [59, 64], [65, 68], [68, 71], [72, 75], [76, 79], [79, 81], [81, 87], [88, 92], [92, 98]]}, {'green': [111, 141], 'red_start': 146, 'occ': [[101, 106], [106, 111], [112, 113], [114, 116], [117, 119], [120, 121], [122, 123], [124, 130], [130, 135], [136, 141], [141, 143], [143, 146], [147, 152], [153, 157]]}, {'green': [175, 196], 'red_start': 200, 'occ': [[169, 171], [177, 178], [186, 187], [192, 194], [200, 202], [207, 208], [210, 211]]}, {'green': [221, 250], 'red_start': 254, 'occ': [[212, 214], [222, 223], [229, 230], [232, 234], [237, 238], [243, 244], [252, 254], [255, 257], [258, 259], [261, 263]]}]}, {'fails': [0, 1], 'pct': 40}), ({'cycles': [{'green': [7, 32], 'red_start': 36, 'occ': [[4, 5], [10, 11], [16, 18], [23, 24], [29, 31], [33, 35], [40, 41]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [6, 19], 'red_start': 22, 'occ': [[2, 3], [8, 10], [12, 13], [21, 23], [30, 31]]}, {'green': [42, 64], 'red_start': 68, 'occ': [[34, 35], [43, 44], [51, 53], [60, 62], [64, 65], [71, 73], [79, 81]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [0, 39], 'red_start': 43, 'occ': [[0, 3], [4, 6], [7, 11], [12, 16], [17, 18], [19, 23], [23, 27], [28, 29], [29, 32], [33, 38], [39, 45], [45, 51], [52, 53], [53, 55]]}, {'green': [69, 102], 'red_start': 106, 'occ': [[61, 62], [64, 65], [70, 71], [79, 80], [83, 84], [87, 89], [92, 94], [96, 98], [106, 107], [114, 115]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 37], 'red_start': 41, 'occ': [[-1, 1], [7, 9], [16, 17], [23, 24], [28, 29], [35, 37], [40, 42], [47, 48]]}, {'green': [64, 85], 'red_start': 89, 'occ': [[59, 62], [63, 68], [68, 72], [72, 73], [74, 76], [77, 81], [81, 84], [84, 89], [90, 91], [92, 94], [95, 97], [98, 104]]}, {'green': [114, 124], 'red_start': 128, 'occ': [[111, 114], [115, 120], [120, 124], [125, 126], [127, 130], [131, 134], [134, 137], [138, 143]]}, {'green': [152, 173], 'red_start': 176, 'occ': [[147, 151], [151, 157], [158, 160], [160, 164], [165, 168], [169, 171], [171, 176], [177, 179], [179, 180], [180, 185], [186, 188]]}]}, {'fails': [2, 3], 'pct': 50}), ({'cycles': [{'green': [8, 43], 'red_start': 46, 'occ': [[1, 2], [10, 12], [17, 19], [26, 27], [33, 34], [42, 44], [50, 52], [57, 59]]}, {'green': [69, 83], 'red_start': 87, 'occ': [[65, 66], [70, 72], [73, 75], [80, 82], [84, 85], [92, 93], [95, 96]]}, {'green': [109, 137], 'red_start': 141, 'occ': [[109, 112], [112, 116], [116, 121], [122, 124], [125, 126], [126, 131], [132, 137], [138, 142], [142, 146], [146, 149], [150, 153]]}, {'green': [164, 174], 'red_start': 179, 'occ': [[157, 159], [160, 161], [162, 164], [165, 167], [169, 170], [175, 176], [178, 180], [183, 184], [188, 190]]}]}, {'fails': [2], 'pct': 25})], [({'cycles': [{'green': [4, 16], 'red_start': 20, 'occ': [[1, 2], [2, 3], [3, 5], [5, 9], [10, 14], [14, 20], [21, 23], [24, 28], [29, 33]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [7, 30], 'red_start': 33, 'occ': [[4, 5], [7, 9], [12, 13], [21, 23], [26, 28], [36, 37], [40, 42]]}, {'green': [57, 69], 'red_start': 72, 'occ': [[55, 56], [58, 60], [67, 69], [77, 79]]}, {'green': [93, 109], 'red_start': 114, 'occ': [[86, 88], [91, 93], [100, 102], [105, 107], [108, 110], [117, 118], [120, 122]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [5, 22], 'red_start': 27, 'occ': [[1, 5], [5, 6], [7, 12], [13, 14], [15, 18], [19, 23], [23, 26], [26, 30], [30, 33], [34, 39]]}]}, {'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': [6, 37], 'red_start': 42, 'occ': [[3, 4], [11, 12], [19, 21], [29, 31], [33, 34], [37, 38], [43, 44], [52, 53]]}, {'green': [62, 82], 'red_start': 85, 'occ': [[61, 66], [67, 72], [72, 73], [74, 77], [78, 84], [84, 87], [87, 88], [88, 93], [94, 98]]}, {'green': [113, 133], 'red_start': 138, 'occ': [[104, 105], [110, 112], [117, 118], [119, 121], [124, 126], [129, 130], [134, 136], [143, 144], [149, 150]]}, {'green': [166, 200], 'red_start': 205, 'occ': [[164, 166], [167, 171], [172, 174], [175, 179], [180, 182], [182, 187], [188, 190], [191, 196], [197, 198], [198, 199], [200, 204], [204, 209], [209, 215], [216, 218]]}]}, {'fails': [1], 'pct': 25}), ({'cycles': [{'green': [1, 13], 'red_start': 17, 'occ': [[-6, -4], [2, 3], [6, 8], [13, 15], [19, 20], [24, 25]]}]}, {'fails': [], 'pct': 0}), ({'cycles': [{'green': [3, 33], 'red_start': 37, 'occ': [[2, 5], [5, 7], [8, 11], [12, 18], [18, 22], [23, 26], [26, 31], [31, 32], [32, 35], [36, 39], [39, 43], [43, 44], [44, 46], [47, 49]]}, {'green': [60, 78], 'red_start': 82, 'occ': [[59, 60], [63, 64], [68, 69], [72, 74], [81, 83], [87, 88]]}]}, {'fails': [0], 'pct': 50}), ({'cycles': [{'green': [6, 44], 'red_start': 47, 'occ': [[1, 2], [6, 8], [13, 14], [15, 17], [22, 23], [29, 31], [35, 37], [45, 46], [54, 56], [58, 59]]}, {'green': [70, 84], 'red_start': 88, 'occ': [[62, 63], [65, 66], [73, 74], [82, 83], [88, 90], [97, 99]]}, {'green': [111, 132], 'red_start': 135, 'occ': [[108, 109], [117, 119], [122, 124], [129, 130], [138, 140], [141, 143]]}]}, {'fails': [], 'pct': 0})]]
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, 2], 'pct': 50} | {'fails': [0, 2], 'pct': 50} | Passed |
| timing oracle 3 | {'fails': [], 'pct': 0} | {'fails': [], 'pct': 0} | Passed |
| timing oracle 4 | {'fails': [0, 1], 'pct': 50} | {'fails': [0, 1], 'pct': 50} | Passed |
| timing oracle 5 | {'fails': [0, 1, 2], 'pct': 100} | {'fails': [0, 1, 2], 'pct': 100} | Passed |
| timing oracle 6 | {'fails': [1], 'pct': 25} | {'fails': [1], 'pct': 25} | Passed |
| timing oracle 7 | {'fails': [1, 2], 'pct': 40} | {'fails': [1, 2], 'pct': 40} | Passed |
SHA-256 / bdcb67de4859303839a7c61124f09c9d2a1529ef09785d35534c8a9c11e2c433
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.538680+00:00.
Case digest / 5cf5edbf644acf2ab3a169f13b8051bb0edb133566965b4471e0f4ecb16ed7bf