{"abstract":"A hundred-number block reports 99 numbers and a single number is rejected.","category":"Phone number formatting","checks":9,"contract":"Input \"START-END\" (spaces ignored). END may be a shorter tail that replaces the last digits of START. Both parts must be digits and END no longer than START. The block is START..END inclusive and must hold 1..100 numbers. Return [start, full end, count] or None.","contract_signature":"x","evaluation_group":"w2-phone-number-formatting-did-range","failed_approach":"Adding the +1 only for shorthand input leaves full-form ranges one short.","family":"w2-phone-number-formatting-did-range-inclusive-count","id":"FA-96676","implementations":{"attempt":{"sha256":"19324d35e6d0b02e79b236e28af328b458bc924a3c6c1a761141ea079b974a8d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    s = x.replace(' ', '')\n    if s.count('-') != 1:\n        return None\n    a, b = s.split('-')\n    if not (a.isdigit() and b.isdigit()) or len(b) > len(a):\n        return None\n    end = a[:len(a) - len(b)] + b\n    count = int(end) - int(a) + 1 if len(b) < len(a) else int(end) - int(a)\n    if count < 1 or count > 100:\n        return None\n    return [a, end, count]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['two-digit shorthand', '5550100-11', ['5550100', '5550111', 12]], ['shorthand crossing a hundred', '5550195-211', ['5550195', '5550211', 17]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 01', ['5550100', '5550101', 2]], ['space after the separator', '5550100- 01', ['5550100', '5550101', 2]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-12', ['5550100', '5550112', 13]], ['shorthand crossing a hundred', '5550195-222', ['5550195', '5550222', 28]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 02', ['5550100', '5550102', 3]], ['space after the separator', '5550100- 02', ['5550100', '5550102', 3]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-13', ['5550100', '5550113', 14]], ['shorthand crossing a hundred', '5550195-233', ['5550195', '5550233', 39]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 03', ['5550100', '5550103', 4]], ['space after the separator', '5550100- 03', ['5550100', '5550103', 4]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-14', ['5550100', '5550114', 15]], ['shorthand crossing a hundred', '5550195-244', ['5550195', '5550244', 50]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 04', ['5550100', '5550104', 5]], ['space after the separator', '5550100- 04', ['5550100', '5550104', 5]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-15', ['5550100', '5550115', 16]], ['shorthand crossing a hundred', '5550195-255', ['5550195', '5550255', 61]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 05', ['5550100', '5550105', 6]], ['space after the separator', '5550100- 05', ['5550100', '5550105', 6]], ['letters rejected', 'FAKE-01', None]]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"3e0c00a33513d7e18969c42636c01c76e991bd2b69cf0f5db3f618ce7d35b3f7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    s = x.replace(' ', '')\n    if s.count('-') != 1:\n        return None\n    a, b = s.split('-')\n    if not (a.isdigit() and b.isdigit()) or len(b) > len(a):\n        return None\n    end = a[:len(a) - len(b)] + b\n    count = int(end) - int(a)\n    if count < 1 or count > 100:\n        return None\n    return [a, end, count]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['two-digit shorthand', '5550100-11', ['5550100', '5550111', 12]], ['shorthand crossing a hundred', '5550195-211', ['5550195', '5550211', 17]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 01', ['5550100', '5550101', 2]], ['space after the separator', '5550100- 01', ['5550100', '5550101', 2]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-12', ['5550100', '5550112', 13]], ['shorthand crossing a hundred', '5550195-222', ['5550195', '5550222', 28]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 02', ['5550100', '5550102', 3]], ['space after the separator', '5550100- 02', ['5550100', '5550102', 3]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-13', ['5550100', '5550113', 14]], ['shorthand crossing a hundred', '5550195-233', ['5550195', '5550233', 39]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 03', ['5550100', '5550103', 4]], ['space after the separator', '5550100- 03', ['5550100', '5550103', 4]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-14', ['5550100', '5550114', 15]], ['shorthand crossing a hundred', '5550195-244', ['5550195', '5550244', 50]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 04', ['5550100', '5550104', 5]], ['space after the separator', '5550100- 04', ['5550100', '5550104', 5]], ['letters rejected', 'FAKE-01', None]], [['two-digit shorthand', '5550100-15', ['5550100', '5550115', 16]], ['shorthand crossing a hundred', '5550195-255', ['5550195', '5550255', 61]], ['full hundred block', '5550100-5550199', ['5550100', '5550199', 100]], ['block of one hundred and one', '5550100-5550200', None], ['descending by one', '5550105-04', None], ['single number', '5550105-5550105', ['5550105', '5550105', 1]], ['spaced separator', '5550100 - 05', ['5550100', '5550105', 6]], ['space after the separator', '5550100- 05', ['5550100', '5550105', 6]], ['letters rejected', 'FAKE-01', None]]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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 deterministic toy contract over synthetic, obviously fictitious telephone numbers and toy country tables. The rules are stipulated for this model only and make no claim of conformance with any numbering plan or telecommunications standard. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-phone-number-formatting-did-range-inclusive-count","generated_at":"2026-09-29T14:52:25.056993+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Number blocks are ordered and ported in shorthand; a wrong expansion provisions numbers that belong to someone else.","root_cause":"The count is END - START without the +1.","sha256":"3417c6b9152f838d21b3d225de96655e2e54302387d866b9615fdff1ce4012e6","title":"DID range shorthand expansion: block size excludes the end number · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.924,"exit_code":1,"observations":[{"actual":["5550100","5550111",12],"check":"two-digit shorthand","expected":["5550100","5550111",12],"passed":true},{"actual":["5550195","5550211",17],"check":"shorthand crossing a hundred","expected":["5550195","5550211",17],"passed":true},{"actual":["5550100","5550199",99],"check":"full hundred block","expected":["5550100","5550199",100],"passed":false},{"actual":["5550100","5550200",100],"check":"block of one hundred and one","expected":null,"passed":false},{"actual":null,"check":"descending by one","expected":null,"passed":true},{"actual":null,"check":"single number","expected":["5550105","5550105",1],"passed":false},{"actual":["5550100","5550101",2],"check":"spaced separator","expected":["5550100","5550101",2],"passed":true},{"actual":["5550100","5550101",2],"check":"space after the separator","expected":["5550100","5550101",2],"passed":true},{"actual":null,"check":"letters rejected","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two-digit shorthand\", \"actual\": [\"5550100\", \"5550111\", 12], \"expected\": [\"5550100\", \"5550111\", 12], \"passed\": true}, {\"check\": \"shorthand crossing a hundred\", \"actual\": [\"5550195\", \"5550211\", 17], \"expected\": [\"5550195\", \"5550211\", 17], \"passed\": true}, {\"check\": \"full hundred block\", \"actual\": [\"5550100\", \"5550199\", 99], \"expected\": [\"5550100\", \"5550199\", 100], \"passed\": false}, {\"check\": \"block of one hundred and one\", \"actual\": [\"5550100\", \"5550200\", 100], \"expected\": null, \"passed\": false}, {\"check\": \"descending by one\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"single number\", \"actual\": null, \"expected\": [\"5550105\", \"5550105\", 1], \"passed\": false}, {\"check\": \"spaced separator\", \"actual\": [\"5550100\", \"5550101\", 2], \"expected\": [\"5550100\", \"5550101\", 2], \"passed\": true}, {\"check\": \"space after the separator\", \"actual\": [\"5550100\", \"5550101\", 2], \"expected\": [\"5550100\", \"5550101\", 2], \"passed\": true}, {\"check\": \"letters rejected\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.275,"exit_code":1,"observations":[{"actual":["5550100","5550111",11],"check":"two-digit shorthand","expected":["5550100","5550111",12],"passed":false},{"actual":["5550195","5550211",16],"check":"shorthand crossing a hundred","expected":["5550195","5550211",17],"passed":false},{"actual":["5550100","5550199",99],"check":"full hundred block","expected":["5550100","5550199",100],"passed":false},{"actual":["5550100","5550200",100],"check":"block of one hundred and one","expected":null,"passed":false},{"actual":null,"check":"descending by one","expected":null,"passed":true},{"actual":null,"check":"single number","expected":["5550105","5550105",1],"passed":false},{"actual":["5550100","5550101",1],"check":"spaced separator","expected":["5550100","5550101",2],"passed":false},{"actual":["5550100","5550101",1],"check":"space after the separator","expected":["5550100","5550101",2],"passed":false},{"actual":null,"check":"letters rejected","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"two-digit shorthand\", \"actual\": [\"5550100\", \"5550111\", 11], \"expected\": [\"5550100\", \"5550111\", 12], \"passed\": false}, {\"check\": \"shorthand crossing a hundred\", \"actual\": [\"5550195\", \"5550211\", 16], \"expected\": [\"5550195\", \"5550211\", 17], \"passed\": false}, {\"check\": \"full hundred block\", \"actual\": [\"5550100\", \"5550199\", 99], \"expected\": [\"5550100\", \"5550199\", 100], \"passed\": false}, {\"check\": \"block of one hundred and one\", \"actual\": [\"5550100\", \"5550200\", 100], \"expected\": null, \"passed\": false}, {\"check\": \"descending by one\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"single number\", \"actual\": null, \"expected\": [\"5550105\", \"5550105\", 1], \"passed\": false}, {\"check\": \"spaced separator\", \"actual\": [\"5550100\", \"5550101\", 1], \"expected\": [\"5550100\", \"5550101\", 2], \"passed\": false}, {\"check\": \"space after the separator\", \"actual\": [\"5550100\", \"5550101\", 1], \"expected\": [\"5550100\", \"5550101\", 2], \"passed\": false}, {\"check\": \"letters rejected\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}