Build a TV home screen that shows a smart home's device status instead of ads
Exact prompt
# TV home screen for a (synthetic) smart home `home.json` describes one synthetic home: `as_of`, `local_utc_offset_hours`, `night`, `offline_after_minutes`, `temp_drift_f`, `rooms` (display order) and `devices`. Only these listed devices exist; nothing is contacted. Write `solve.py` (Python 3 standard library only, no network). `python solve.py input.json answer.json` (first argument unused; read `home.json` from the current directory) writes `answer.json` and `home.html`. Fresh homes are generated when scoring. ## Rules 1. Timestamps carry their own offsets (`Z`, `-04:00`, `-07:00`, `+01:00` ...); compare instants, not wall-clock text. 2. A device is `offline` when as_of - last_seen > `offline_after_minutes` (strictly), else `online`. 3. Tile state (`data-state`) for an online device: light/plug `on`|`off`; lock `locked`|`unlocked`; contact `open`|`closed`; leak `wet`|`dry`; camera `recording`|`idle`; thermostat = current temperature in Fahrenheit with 1 decimal (e.g. `68.5`). Celsius values convert as F = C x 9/5 + 32, rounded half-up to 1 decimal (do the same for setpoints). An offline device's state is `unknown`. 4. It is night when the local hour of as_of (using `local_utc_offset_hours`) is >= night.start_hour or < night.end_hour. 5. Alerts (offline devices raise only `offline`, nothing else). Kinds, in severity order: `leak` (leak sensor wet), `unlocked_at_night` (lock unlocked at night), `door_open` (contact open and as_of - open_since > 30 min), `offline`, `temp_drift` (|current F - setpoint F| > temp_drift_f, both 1-decimal F values), `low_battery` (battery not null and < 20). One device can raise several alerts. 6. Alert order: severity, then the device's room position in `rooms`, then device name (case-insensitive), then id. 7. Summary: `lights_on` (online lights that are on), `online`, `offline`, `alerts` (count), `avg_temp_f` (mean of online thermostats' 1-decimal F values, rounded half-up to 1 decimal; null if none). 8. Room slug: lower-case, every run of non-alphanumeric characters becomes `-`, leading/trailing `-` removed (`Kid's Room` -> `kid-s-room`). ## answer.json `{"rooms": [{"name", "slug", "devices": [{"id", "status", "state"}] sorted by name case-insensitive}] in rooms order, "alerts": [{"device": id, "kind"}] in alert order, "summary": {"lights_on", "online", "offline", "alerts", "avg_temp_f"}}` ## Visual output: home.html (a 1920x1080 TV screen) Static and self-contained: no `<script>`, `<img>`, `<link>`, `<iframe>`/`<object>`/`<embed>`, `on*` handlers, external URLs, CSS url(http)/@import or fetches. - One `<section id="room-<slug>">` per room, in `rooms` order, containing one element `id="dev-<id>"` per device with `data-status` and `data-state` as above. - An element `id="alerts"` containing one element `id="alert-1"`, `id="alert-2"`, ... per alert in order, each with `data-device` and `data-kind`. - An element `id="summary"` with `data-lights-on`, `data-online`, `data-offline`, `data-alerts`, `data-avg-temp-f` (1 decimal, or `none`). - In a 1920x1080 browser viewport the page must fit without scrolling, `#alerts` must be fully on screen, and every device tile must be at least 40x40 px and on screen. Styling is otherwise up to you. ## Scoring Hidden checks (partial credit; all must pass): `html_static_rooms_in_order`, `device_tiles_status_state`, `alerts_rules_and_order`, `summary_counts`, `browser_fits_1080p_no_network` (headless browser, network blocked) on the given home; `fresh_run_1`, `fresh_run_2` (answer.json and home.html on new homes). 30-second limit per run.
The page looks right long before the data is right: one naive timestamp parse flips several devices online/offline and changes every alert, count and tile. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).
Success criteria: 1. html_static_rooms_in_order 2. device_tiles_status_state 3. alerts_rules_and_order 4. summary_counts 5. browser_fits_1080p_no_network 6. fresh_run_1 7. fresh_run_2
Best model for this task so far: Claude Haiku 5.5 (effort default (no --effort flag) · thinking on) (success, $0.02, 2m).
Latest output per model
All runs (5)
80% pass rate across 5 eligible runs: 4 pass, 0 partial, 1 fail. Partial and failed runs are listed below with everything else.ⓘ
| Model | Cost | Time | Step-insⓘ | Autonomy | Outcome | Trustⓘ | Date | Compare |
|---|---|---|---|---|---|---|---|---|
| MMistral Small 3.2 24B Instruct (Venice)thinking on | $0.0086 | 2m | 0 | Fully autonomous | fail | Trust 80% | 2026-10-23 | |
| OGPT-6.1 Soldefault · thinking on | $0.09 | 2m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-22 | |
| AClaude Haiku 5.5default · thinking on | $0.02 | 2m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 | |
| AClaude Opus 5.5default · thinking on | $0.52 | 2m | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 | |
| AClaude Sonnet 5.5default · thinking on | $0.12 | 52s | 0 | Fully autonomous | pass | Trust 80% | 2026-10-20 |
Embed this result
A live badge for this use case. It links back here and updates as new runs are published.
Get new runs and ranking changes weekly
Which models got better or cheaper on real tasks like this one.