NumPy allowed · plain Python earns 10 bonus points
Implement hash-based deterministic train/test splitting, which stays stable as new data arrives (unlike a random shuffle-and-cut split that reshuffles everything on every re-run).
Implement hash_split(record_id, test_pct). Hash record_id with hashlib.md5, take the first 4 bytes as a big-endian unsigned int, compute bucket = (that_int % 10000) / 100.0 (in [0,100)), and return 'test' if bucket < test_pct else 'train'.
hash_split(record_id: str, test_pct: float) -> str