{"abstract":"A ticket with two no-show coupons is charged two penalties.","category":"Airline fare rule evaluation","checks":9,"contract":"Input {'status':[FLOWN|OPEN|NOSHOW per coupon],'fee'}. After the first NOSHOW, every later OPEN coupon becomes VOID (earlier coupons are untouched, FLOWN stays FLOWN). The no-show fee is charged once per ticket. Return [statuses, fee].","evaluation_group":"w2-airline-fare-rules-no-show-sequence","failed_approach":"Charging again after a non-consecutive no-show still double-charges.","family":"w2-airline-fare-rules-no-show-sequence-fee-per-noshow","id":"FA-66771","implementations":{"attempt":{"sha256":"627438225200fe49cb99dd7bf22ac81c54f2b455bd815696ad792e9cccdb89ba","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            if not seen or st[i - 1] != 'NOSHOW': fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN':\n            st[i] = 'VOID'\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"46ace3153e55b9c4aa9f7a5894279ba696b263a2725fa8da90de2cc2f561f0b4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN':\n            st[i] = 'VOID'\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"591bd559c7daea09985ae7dc1e2567df18a6efe2f5bb8f362b66be6f110f669a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            if not seen: fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN':\n            st[i] = 'VOID'\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard conformance. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-airline-fare-rules-no-show-sequence-fee-per-noshow","generated_at":"2026-09-29T14:47:46.800297+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Coupon sequence rules cancel onward segments after a no-show and assess a single penalty.","repair":"Charge the no-show fee once per ticket.","root_cause":"The fee is added at every NOSHOW, not only the first.","sha256":"94914dfcce7ba6773860b9cc575018ca00861c457169112b364edf7ee4733035","title":"No-show fee charged for every missed coupon · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.899,"exit_code":1,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","VOID"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":true},{"actual":[["NOSHOW","VOID","VOID"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":true},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],240],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":false},{"actual":[["NOSHOW","FLOWN","VOID"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":true},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],200],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":false},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": true}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": true}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 240], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": false}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": true}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 200], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": false}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.635,"exit_code":1,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","VOID"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":true},{"actual":[["NOSHOW","VOID","VOID"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":true},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],240],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":false},{"actual":[["NOSHOW","FLOWN","VOID"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":true},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],300],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":false},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": true}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": true}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 240], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": false}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": true}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 300], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": false}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.673,"exit_code":0,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","VOID"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":true},{"actual":[["NOSHOW","VOID","VOID"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":true},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":true},{"actual":[["NOSHOW","FLOWN","VOID"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":true},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":true},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": true}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": true}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": true}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": true}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}