FA-92756 / HVAC thermostat control / Open access
Optimal start rounds the required recovery time down · case 01
Recovery starts a minute late whenever the required time is fractional and the space is short of setpoint at occupancy.
ROOT CAUSE
Required minutes use floor division.
VERIFIED REPAIR
Round required minutes up.
Unsuccessful approach: Round-to-nearest still starts late for fractions below one half.
Case contract
Optimal start for a heating setback, sampled per minute from minute 0; rate is the recovery rate in tenths F per hour. While not recovering, required minutes = ceil(max(0, occ_sp - temp) * 60 / rate); recovery starts (and latches) when minutes left until occupancy <= required, but never more than 180 minutes early, and in any case at occupancy. Return the active setpoint per minute.
Why this case matters
Residential and light-commercial thermostats make these decisions sample by sample; each defect changes equipment calls in a way that shows up as short cycling, comfort complaints or equipment stress.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(occ_minute, occ_sp, unocc_sp, rate, temps):
recovering = False
out = []
for minute, temp in enumerate(temps):
left = occ_minute - minute
need = occ_sp - temp
if not recovering:
required = max(0, need) * 60 // rate
if left <= 0 or (left <= required and left <= 180):
recovering = True
out.append(occ_sp if recovering else unocc_sp)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: scenario 2',
[60,
700,
600,
240,
[603,
603,
605,
606,
606,
607,
607,
608,
608,
608,
608,
608,
608,
608,
608,
608,
610,
611,
612,
613,
615,
615,
615,
617,
617,
619,
619,
620,
620,
620,
622,
624,
624,
624,
625,
625,
625,
626,
626,
628,
630,
631,
632,
634,
636,
638,
638,
638,
638,
639,
640,
642,
644,
645,
645,
646,
646,
647,
648,
650,
652,
654,
656,
656,
656,
657,
659,
659]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 5',
[60,
700,
600,
240,
[639,
639,
639,
639,
640,
640,
640,
642,
642,
642,
642,
644,
646,
646,
646,
648,
648,
649,
650,
651,
652,
652,
652,
654,
654,
654,
655,
655,
655,
656,
656,
657,
657,
658,
658,
658,
659,
660,
660,
661,
662,
663,
665,
666,
668,
669,
669,
671,
671,
673,
673,
675,
675,
675,
676,
676,
676,
677,
679,
680,
680,
680,
680,
682,
682,
683]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
30,
[604,
604,
605,
605,
605,
607,
609,
611,
611,
611,
612,
612,
614,
615,
617,
619,
620,
620,
620,
620,
621,
621,
623,
623,
623,
623,
624,
625,
626,
626,
628,
629,
630,
630,
631,
632,
633,
633,
633,
635,
636,
638,
640,
640,
640,
641,
643,
643,
645,
646,
646,
646,
648,
648,
648,
648,
648,
648,
648,
650,
651,
651,
651,
652]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 10',
[45,
700,
600,
90,
[661,
663,
664,
666,
666,
666,
667,
668,
670,
671,
671,
671,
673,
674,
674,
676,
676,
676,
676,
676,
678,
678,
678,
678,
678,
678,
678,
680,
681,
681,
681,
682,
684,
686,
688,
688,
688,
689,
689,
689,
689,
689,
689,
690,
692,
692,
694]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 17',
[30,
700,
600,
240,
[650,
651,
651,
651,
651,
653,
654,
654,
654,
654,
655,
655,
655,
655,
656,
657,
657,
657,
659,
659,
661,
662,
663,
663,
663,
663,
663,
663,
663,
663,
664,
665,
667]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
240,
[689,
689,
689,
689,
690,
692,
693,
695,
696,
697,
697,
699,
700,
702,
703,
703,
703,
703,
704,
704,
706,
707,
707,
708,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 15',
[60,
700,
600,
240,
[600,
601,
601,
601,
601,
601,
602,
604,
606,
607,
609,
611,
612,
613,
615,
615,
615,
615,
617,
618,
618,
620,
620,
621,
621,
621,
621,
622,
623,
624,
624,
624,
624,
624,
625,
625,
625,
627,
629,
629,
629,
629,
629,
630,
630,
630,
632,
632,
634,
634,
636,
636,
638,
638,
639,
639,
641,
643,
643,
643,
644,
644,
645,
647,
647,
649,
650]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 37',
[45,
700,
600,
120,
[651,
653,
653,
655,
655,
655,
655,
655,
655,
655,
655,
656,
656,
658,
658,
660,
660,
660,
660,
660,
660,
660,
661,
661,
661,
663,
663,
663,
663,
663,
665,
665,
667,
668,
668,
668,
668,
669,
671,
671,
673,
673,
673,
673,
675,
675,
677,
677,
678,
680,
680,
681,
681]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[45,
700,
600,
90,
[624,
624,
626,
627,
627,
628,
628,
628,
630,
632,
633,
635,
636,
638,
638,
638,
640,
640,
640,
640,
641,
642,
642,
644,
644,
644,
646,
646,
647,
647,
649,
651,
652,
653,
655,
655,
656,
656,
657,
657,
657,
659,
660,
662,
662,
663,
663,
663,
664]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 21',
[45,
700,
600,
240,
[638,
638,
638,
638,
638,
640,
641,
642,
643,
644,
646,
646,
648,
648,
650,
651,
653,
653,
653,
655,
655,
655,
657,
659,
659,
659,
660,
660,
660,
660,
660,
662,
664,
665,
665,
665,
666,
668,
668,
668,
668,
669,
671,
671,
671,
672,
674,
674,
674,
674,
674]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 38',
[45,
700,
600,
90,
[662,
662,
662,
662,
663,
663,
663,
663,
664,
664,
664,
666,
667,
667,
667,
668,
669,
669,
670,
671,
671,
672,
672,
674,
674,
674,
674,
676,
676,
678,
679,
680,
682,
682,
682,
684,
684,
684,
684,
684,
686,
687,
687,
687,
687,
687,
689,
690,
690,
690,
691,
693]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
60,
[658,
660,
660,
661,
661,
661,
661,
663,
663,
663,
663,
665,
665,
665,
666,
666,
667,
669,
669,
669,
670,
670,
671,
671,
672,
672,
672,
672,
672,
672,
672,
674,
674,
674,
674,
674,
674,
676,
676,
676,
678,
679,
681,
681,
681,
681,
681,
681,
683,
683,
683,
683,
683,
685,
686,
687,
687,
687,
689,
691,
692,
694,
694,
694,
694,
696,
696,
696,
698,
699,
701,
702,
702,
703,
703,
703,
704,
706,
707,
707,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 17',
[45,
700,
600,
240,
[631,
631,
631,
631,
631,
631,
633,
633,
634,
634,
634,
635,
635,
636,
637,
637,
637,
637,
639,
641,
641,
643,
643,
645,
646,
646,
646,
646,
647,
647,
647,
649,
649,
649,
649,
650,
652,
652,
652,
652,
652,
653,
654,
654,
655,
656,
657,
657,
657,
658,
658]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 42',
[45,
700,
600,
240,
[601,
601,
601,
601,
602,
602,
602,
602,
603,
603,
603,
605,
606,
606,
606,
606,
608,
609,
610,
610,
610,
611,
613,
615,
617,
617,
619,
619,
620,
620,
621,
623,
624,
625,
626,
628,
628,
629,
631,
633,
633,
633,
635,
636,
637,
639,
639,
641]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
120,
[674,
676,
677,
677,
678,
678,
679,
679,
681,
682,
684,
686,
687,
687,
687,
687,
687,
689,
690,
692,
694,
696,
697,
697,
697,
698,
700,
700,
702,
702,
703,
703,
704,
705,
707,
709,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| regression: scenario 2 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Failed |
| regression: scenario 5 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Failed |
| control: steady recovery | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: fractional minutes | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: warming before occupancy | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit boundary | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: scenario 1 | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
SHA-256 / 1b1af57344ddbeab68376ce018b9b5eb9d589c6055cf201ae5ea0e0dd9c39be7
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(occ_minute, occ_sp, unocc_sp, rate, temps):
recovering = False
out = []
for minute, temp in enumerate(temps):
left = occ_minute - minute
need = occ_sp - temp
if not recovering:
required = round(max(0, need) * 60 / rate)
if left <= 0 or (left <= required and left <= 180):
recovering = True
out.append(occ_sp if recovering else unocc_sp)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: scenario 2',
[60,
700,
600,
240,
[603,
603,
605,
606,
606,
607,
607,
608,
608,
608,
608,
608,
608,
608,
608,
608,
610,
611,
612,
613,
615,
615,
615,
617,
617,
619,
619,
620,
620,
620,
622,
624,
624,
624,
625,
625,
625,
626,
626,
628,
630,
631,
632,
634,
636,
638,
638,
638,
638,
639,
640,
642,
644,
645,
645,
646,
646,
647,
648,
650,
652,
654,
656,
656,
656,
657,
659,
659]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 5',
[60,
700,
600,
240,
[639,
639,
639,
639,
640,
640,
640,
642,
642,
642,
642,
644,
646,
646,
646,
648,
648,
649,
650,
651,
652,
652,
652,
654,
654,
654,
655,
655,
655,
656,
656,
657,
657,
658,
658,
658,
659,
660,
660,
661,
662,
663,
665,
666,
668,
669,
669,
671,
671,
673,
673,
675,
675,
675,
676,
676,
676,
677,
679,
680,
680,
680,
680,
682,
682,
683]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
30,
[604,
604,
605,
605,
605,
607,
609,
611,
611,
611,
612,
612,
614,
615,
617,
619,
620,
620,
620,
620,
621,
621,
623,
623,
623,
623,
624,
625,
626,
626,
628,
629,
630,
630,
631,
632,
633,
633,
633,
635,
636,
638,
640,
640,
640,
641,
643,
643,
645,
646,
646,
646,
648,
648,
648,
648,
648,
648,
648,
650,
651,
651,
651,
652]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 10',
[45,
700,
600,
90,
[661,
663,
664,
666,
666,
666,
667,
668,
670,
671,
671,
671,
673,
674,
674,
676,
676,
676,
676,
676,
678,
678,
678,
678,
678,
678,
678,
680,
681,
681,
681,
682,
684,
686,
688,
688,
688,
689,
689,
689,
689,
689,
689,
690,
692,
692,
694]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 17',
[30,
700,
600,
240,
[650,
651,
651,
651,
651,
653,
654,
654,
654,
654,
655,
655,
655,
655,
656,
657,
657,
657,
659,
659,
661,
662,
663,
663,
663,
663,
663,
663,
663,
663,
664,
665,
667]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
240,
[689,
689,
689,
689,
690,
692,
693,
695,
696,
697,
697,
699,
700,
702,
703,
703,
703,
703,
704,
704,
706,
707,
707,
708,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 15',
[60,
700,
600,
240,
[600,
601,
601,
601,
601,
601,
602,
604,
606,
607,
609,
611,
612,
613,
615,
615,
615,
615,
617,
618,
618,
620,
620,
621,
621,
621,
621,
622,
623,
624,
624,
624,
624,
624,
625,
625,
625,
627,
629,
629,
629,
629,
629,
630,
630,
630,
632,
632,
634,
634,
636,
636,
638,
638,
639,
639,
641,
643,
643,
643,
644,
644,
645,
647,
647,
649,
650]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 37',
[45,
700,
600,
120,
[651,
653,
653,
655,
655,
655,
655,
655,
655,
655,
655,
656,
656,
658,
658,
660,
660,
660,
660,
660,
660,
660,
661,
661,
661,
663,
663,
663,
663,
663,
665,
665,
667,
668,
668,
668,
668,
669,
671,
671,
673,
673,
673,
673,
675,
675,
677,
677,
678,
680,
680,
681,
681]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[45,
700,
600,
90,
[624,
624,
626,
627,
627,
628,
628,
628,
630,
632,
633,
635,
636,
638,
638,
638,
640,
640,
640,
640,
641,
642,
642,
644,
644,
644,
646,
646,
647,
647,
649,
651,
652,
653,
655,
655,
656,
656,
657,
657,
657,
659,
660,
662,
662,
663,
663,
663,
664]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 21',
[45,
700,
600,
240,
[638,
638,
638,
638,
638,
640,
641,
642,
643,
644,
646,
646,
648,
648,
650,
651,
653,
653,
653,
655,
655,
655,
657,
659,
659,
659,
660,
660,
660,
660,
660,
662,
664,
665,
665,
665,
666,
668,
668,
668,
668,
669,
671,
671,
671,
672,
674,
674,
674,
674,
674]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 38',
[45,
700,
600,
90,
[662,
662,
662,
662,
663,
663,
663,
663,
664,
664,
664,
666,
667,
667,
667,
668,
669,
669,
670,
671,
671,
672,
672,
674,
674,
674,
674,
676,
676,
678,
679,
680,
682,
682,
682,
684,
684,
684,
684,
684,
686,
687,
687,
687,
687,
687,
689,
690,
690,
690,
691,
693]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
60,
[658,
660,
660,
661,
661,
661,
661,
663,
663,
663,
663,
665,
665,
665,
666,
666,
667,
669,
669,
669,
670,
670,
671,
671,
672,
672,
672,
672,
672,
672,
672,
674,
674,
674,
674,
674,
674,
676,
676,
676,
678,
679,
681,
681,
681,
681,
681,
681,
683,
683,
683,
683,
683,
685,
686,
687,
687,
687,
689,
691,
692,
694,
694,
694,
694,
696,
696,
696,
698,
699,
701,
702,
702,
703,
703,
703,
704,
706,
707,
707,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 17',
[45,
700,
600,
240,
[631,
631,
631,
631,
631,
631,
633,
633,
634,
634,
634,
635,
635,
636,
637,
637,
637,
637,
639,
641,
641,
643,
643,
645,
646,
646,
646,
646,
647,
647,
647,
649,
649,
649,
649,
650,
652,
652,
652,
652,
652,
653,
654,
654,
655,
656,
657,
657,
657,
658,
658]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 42',
[45,
700,
600,
240,
[601,
601,
601,
601,
602,
602,
602,
602,
603,
603,
603,
605,
606,
606,
606,
606,
608,
609,
610,
610,
610,
611,
613,
615,
617,
617,
619,
619,
620,
620,
621,
623,
624,
625,
626,
628,
628,
629,
631,
633,
633,
633,
635,
636,
637,
639,
639,
641]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
120,
[674,
676,
677,
677,
678,
678,
679,
679,
681,
682,
684,
686,
687,
687,
687,
687,
687,
689,
690,
692,
694,
696,
697,
697,
697,
698,
700,
700,
702,
702,
703,
703,
704,
705,
707,
709,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| regression: scenario 2 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Failed |
| regression: scenario 5 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Failed |
| control: steady recovery | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: fractional minutes | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: warming before occupancy | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit boundary | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: scenario 1 | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
SHA-256 / 0bd804740a6464f12ab10d82b026ab480d83f57d34344c7248b2ebacc61fc0f8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(occ_minute, occ_sp, unocc_sp, rate, temps):
recovering = False
out = []
for minute, temp in enumerate(temps):
left = occ_minute - minute
need = occ_sp - temp
if not recovering:
required = -(-max(0, need) * 60 // rate)
if left <= 0 or (left <= required and left <= 180):
recovering = True
out.append(occ_sp if recovering else unocc_sp)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: scenario 2',
[60,
700,
600,
240,
[603,
603,
605,
606,
606,
607,
607,
608,
608,
608,
608,
608,
608,
608,
608,
608,
610,
611,
612,
613,
615,
615,
615,
617,
617,
619,
619,
620,
620,
620,
622,
624,
624,
624,
625,
625,
625,
626,
626,
628,
630,
631,
632,
634,
636,
638,
638,
638,
638,
639,
640,
642,
644,
645,
645,
646,
646,
647,
648,
650,
652,
654,
656,
656,
656,
657,
659,
659]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 5',
[60,
700,
600,
240,
[639,
639,
639,
639,
640,
640,
640,
642,
642,
642,
642,
644,
646,
646,
646,
648,
648,
649,
650,
651,
652,
652,
652,
654,
654,
654,
655,
655,
655,
656,
656,
657,
657,
658,
658,
658,
659,
660,
660,
661,
662,
663,
665,
666,
668,
669,
669,
671,
671,
673,
673,
675,
675,
675,
676,
676,
676,
677,
679,
680,
680,
680,
680,
682,
682,
683]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
30,
[604,
604,
605,
605,
605,
607,
609,
611,
611,
611,
612,
612,
614,
615,
617,
619,
620,
620,
620,
620,
621,
621,
623,
623,
623,
623,
624,
625,
626,
626,
628,
629,
630,
630,
631,
632,
633,
633,
633,
635,
636,
638,
640,
640,
640,
641,
643,
643,
645,
646,
646,
646,
648,
648,
648,
648,
648,
648,
648,
650,
651,
651,
651,
652]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 10',
[45,
700,
600,
90,
[661,
663,
664,
666,
666,
666,
667,
668,
670,
671,
671,
671,
673,
674,
674,
676,
676,
676,
676,
676,
678,
678,
678,
678,
678,
678,
678,
680,
681,
681,
681,
682,
684,
686,
688,
688,
688,
689,
689,
689,
689,
689,
689,
690,
692,
692,
694]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 17',
[30,
700,
600,
240,
[650,
651,
651,
651,
651,
653,
654,
654,
654,
654,
655,
655,
655,
655,
656,
657,
657,
657,
659,
659,
661,
662,
663,
663,
663,
663,
663,
663,
663,
663,
664,
665,
667]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[60,
700,
600,
240,
[689,
689,
689,
689,
690,
692,
693,
695,
696,
697,
697,
699,
700,
702,
703,
703,
703,
703,
704,
704,
706,
707,
707,
708,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 15',
[60,
700,
600,
240,
[600,
601,
601,
601,
601,
601,
602,
604,
606,
607,
609,
611,
612,
613,
615,
615,
615,
615,
617,
618,
618,
620,
620,
621,
621,
621,
621,
622,
623,
624,
624,
624,
624,
624,
625,
625,
625,
627,
629,
629,
629,
629,
629,
630,
630,
630,
632,
632,
634,
634,
636,
636,
638,
638,
639,
639,
641,
643,
643,
643,
644,
644,
645,
647,
647,
649,
650]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 37',
[45,
700,
600,
120,
[651,
653,
653,
655,
655,
655,
655,
655,
655,
655,
655,
656,
656,
658,
658,
660,
660,
660,
660,
660,
660,
660,
661,
661,
661,
663,
663,
663,
663,
663,
665,
665,
667,
668,
668,
668,
668,
669,
671,
671,
673,
673,
673,
673,
675,
675,
677,
677,
678,
680,
680,
681,
681]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[45,
700,
600,
90,
[624,
624,
626,
627,
627,
628,
628,
628,
630,
632,
633,
635,
636,
638,
638,
638,
640,
640,
640,
640,
641,
642,
642,
644,
644,
644,
646,
646,
647,
647,
649,
651,
652,
653,
655,
655,
656,
656,
657,
657,
657,
659,
660,
662,
662,
663,
663,
663,
664]],
[700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 21',
[45,
700,
600,
240,
[638,
638,
638,
638,
638,
640,
641,
642,
643,
644,
646,
646,
648,
648,
650,
651,
653,
653,
653,
655,
655,
655,
657,
659,
659,
659,
660,
660,
660,
660,
660,
662,
664,
665,
665,
665,
666,
668,
668,
668,
668,
669,
671,
671,
671,
672,
674,
674,
674,
674,
674]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 38',
[45,
700,
600,
90,
[662,
662,
662,
662,
663,
663,
663,
663,
664,
664,
664,
666,
667,
667,
667,
668,
669,
669,
670,
671,
671,
672,
672,
674,
674,
674,
674,
676,
676,
678,
679,
680,
682,
682,
682,
684,
684,
684,
684,
684,
686,
687,
687,
687,
687,
687,
689,
690,
690,
690,
691,
693]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
60,
[658,
660,
660,
661,
661,
661,
661,
663,
663,
663,
663,
665,
665,
665,
666,
666,
667,
669,
669,
669,
670,
670,
671,
671,
672,
672,
672,
672,
672,
672,
672,
674,
674,
674,
674,
674,
674,
676,
676,
676,
678,
679,
681,
681,
681,
681,
681,
681,
683,
683,
683,
683,
683,
685,
686,
687,
687,
687,
689,
691,
692,
694,
694,
694,
694,
696,
696,
696,
698,
699,
701,
702,
702,
703,
703,
703,
704,
706,
707,
707,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700]]],
[['regression: scenario 17',
[45,
700,
600,
240,
[631,
631,
631,
631,
631,
631,
633,
633,
634,
634,
634,
635,
635,
636,
637,
637,
637,
637,
639,
641,
641,
643,
643,
645,
646,
646,
646,
646,
647,
647,
647,
649,
649,
649,
649,
650,
652,
652,
652,
652,
652,
653,
654,
654,
655,
656,
657,
657,
657,
658,
658]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['regression: scenario 42',
[45,
700,
600,
240,
[601,
601,
601,
601,
602,
602,
602,
602,
603,
603,
603,
605,
606,
606,
606,
606,
608,
609,
610,
610,
610,
611,
613,
615,
617,
617,
619,
619,
620,
620,
621,
623,
624,
625,
626,
628,
628,
629,
631,
633,
633,
633,
635,
636,
637,
639,
639,
641]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: steady recovery',
[30,
700,
600,
120,
[650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650,
650]],
[600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit',
[200,
700,
600,
30,
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: fractional minutes',
[60,
700,
600,
90,
[655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655,
655]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: warming before occupancy',
[40,
700,
600,
60,
[680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
680,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700,
700]],
['control: lead limit boundary',
[200,
700,
600,
30,
[610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610,
610]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700,
700]],
['control: scenario 1',
[200,
700,
600,
120,
[674,
676,
677,
677,
678,
678,
679,
679,
681,
682,
684,
686,
687,
687,
687,
687,
687,
689,
690,
692,
694,
696,
697,
697,
697,
698,
700,
700,
702,
702,
703,
703,
704,
705,
707,
709,
709,
709,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710,
710]],
[600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
600,
700,
700,
700,
700]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| regression: scenario 2 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| regression: scenario 5 | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: steady recovery | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: fractional minutes | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: warming before occupancy | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
| control: lead limit boundary | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | [600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 700, 700, 700, 700, 700] | Passed |
| control: scenario 1 | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | [700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700] | Passed |
SHA-256 / cb21a4be1708ae131d08afe1162e6338e0bb999ef2b9142583fbbefca93d8a26
Verification & scope
A deterministic bounded teaching model of one thermostat or HVAC controller decision evaluated per sample. Temperatures are integer tenths of a degree Fahrenheit unless stated otherwise. The contract is a stipulated toy convention, not a claim of conformance to any manufacturer, ASHRAE guideline or code. 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:51:48.781554+00:00.
Case digest / 777866a710fac5557b85d1b7234edc5f4c0b93403f3210d3dabfe457172149f0