Word ladder (shortest path)
← run 2 · raw JSON · challenge definitions
40
score
tests (60%)0/5 passed
deliverables (20%)100%
content checks (20%)100%
01 what the model was asked
Create ladder.py with exactly one function:
ladder_length(begin: str, end: str, word_list: list[str]) -> int
A transformation sequence goes from begin to end, changing exactly one letter per step; every intermediate word (and end itself) must appear in word_list. Return the number of words in the SHORTEST such sequence counting both endpoints, or 0 if none exists. begin does not need to be in word_list. All words are lowercase and the same length.
Example: begin="hit", end="cog", word_list=["hot","dot","dog","lot","log","cog"] -> 5 (hit -> hot -> dot -> dog -> cog).
Use only the Python standard library. A breadth-first search is the intended approach; brute-force recursion will be too slow for the larger test.
required deliverables + checks
✓deliverable: ladder.py
✓ladder.py must contain “def ladder_length”
pytest suite it was graded against
test_ladder.py · 27 lines · 744 B
import time from ladder import ladder_length def test_classic_example(): assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log", "cog"]) == 5 def test_unreachable_end(): assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log"]) == 0 def test_single_step(): assert ladder_length("a", "c", ["a", "b", "c"]) == 2 def test_shortest_is_found(): words = ["hot", "hit", "hat", "cat", "cot", "cog", "dog"] assert ladder_length("hit", "cot", words) == 3 def test_larger_input_is_fast(): words = [a + b + c for a in "abcdefgh" for b in "abcdefgh" for c in "abcdefgh"] start = time.monotonic() assert ladder_length("aaa", "hhh", words) == 4 assert time.monotonic() - start < 2.0
02 what it did — full transcript
promptthe exact instruction sent to the model
view full prompt
You are completing a coding task in one shot. Write complete files that satisfy the spec below. Tests (pytest) will be run against your files; you cannot run them yourself.
Reply with ONE JSON object and nothing else:
{"files": {"<relative path>": "<complete file content>", ...}}
Required deliverable files: ladder.py
SPEC:
Create ladder.py with exactly one function:
ladder_length(begin: str, end: str, word_list: list[str]) -> int
A transformation sequence goes from begin to end, changing exactly one letter per step; every intermediate word (and end itself) must appear in word_list. Return the number of words in the SHORTEST such sequence counting both endpoints, or 0 if none exists. begin does not need to be in word_list. All words are lowercase and the same length.
Example: begin="hit", end="cog", word_list=["hot","dot","dog","lot","log","cog"] -> 5 (hit -> hot -> dot -> dog -> cog).
Use only the Python standard library. A breadth-first search is the intended approach; brute-force recursion will be too slow for the larger test.
reply185 tokens
view raw reply
```json
{"files": {"ladder.py": "from collections import deque\n\ndef ladder_length(begin: str, end: str, word_list: list[str]) -> int:\n if begin == end:\n return 0\n visited = set([begin])\n queue = deque([(begin, 1)])\n while queue:\n current_word, steps = queue.popleft()\n for i in range(len(current_word)):\n for c in 'abcdefghijklmnopqrstuvwxyz':\n new_word = current_word[:i] + c + current_word[i+1:]\n if new_word == end:\n return steps + 2\n if new_word in word_list and new_word not in visited:\n visited.add(new_word)\n queue.append((new_word, steps + 1))\n return 0"}}write_fileladder.py · 677 B
graded 40.00 passed, 5 failed
pytest output
FFFFF [100%]
=================================== FAILURES ===================================
_____________________________ test_classic_example _____________________________
test_ladder.py:7: in test_classic_example
assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log", "cog"]) == 5
E AssertionError: assert 6 == 5
E + where 6 = ladder_length('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log', 'cog'])
_____________________________ test_unreachable_end _____________________________
test_ladder.py:11: in test_unreachable_end
assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log"]) == 0
E AssertionError: assert 6 == 0
E + where 6 = ladder_length('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log'])
_______________________________ test_single_step _______________________________
test_ladder.py:15: in test_single_step
assert ladder_length("a", "c", ["a", "b", "c"]) == 2
E AssertionError: assert 3 == 2
E + where 3 = ladder_length('a', 'c', ['a', 'b', 'c'])
____________________________ test_shortest_is_found ____________________________
test_ladder.py:20: in test_shortest_is_found
assert ladder_length("hit", "cot", words) == 3
E AssertionError: assert 4 == 3
E + where 4 = ladder_length('hit', 'cot', ['hot', 'hit', 'hat', 'cat', 'cot', 'cog', ...])
__________________________ test_larger_input_is_fast ___________________________
test_ladder.py:26: in test_larger_input_is_fast
assert ladder_length("aaa", "hhh", words) == 4
E AssertionError: assert 5 == 4
E + where 5 = ladder_length('aaa', 'hhh', ['aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', ...])
=========================== short test summary info ============================
FAILED test_ladder.py::test_classic_example - AssertionError: assert 6 == 5
FAILED test_ladder.py::test_unreachable_end - AssertionError: assert 6 == 0
FAILED test_ladder.py::test_single_step - AssertionError: assert 3 == 2
FAILED test_ladder.py::test_shortest_is_found - AssertionError: assert 4 == 3
FAILED test_ladder.py::test_larger_input_is_fast - AssertionError: assert 5 == 4
5 failed in 0.04s
03 what it wrote
1
files
18
lines
17
source lines
1
functions
0
classes
8
cyclomatic
5
max nesting
16.0
avg fn lines
stdlib imports: collections
| File | LOC | SLOC | Fns | Complexity | Depth | Imports |
|---|---|---|---|---|---|---|
| ladder.py | 18 | 17 | 1 | 8 | 5 | collections |
ladder.py · 18 lines · 677 B
from collections import deque def ladder_length(begin: str, end: str, word_list: list[str]) -> int: if begin == end: return 0 visited = set([begin]) queue = deque([(begin, 1)]) while queue: current_word, steps = queue.popleft() for i in range(len(current_word)): for c in 'abcdefghijklmnopqrstuvwxyz': new_word = current_word[:i] + c + current_word[i+1:] if new_word == end: return steps + 2 if new_word in word_list and new_word not in visited: visited.add(new_word) queue.append((new_word, steps + 1)) return 0
04 how it was graded
1
model calls
0
invalid actions
0
self test runs
185
tokens out
—
tokens in
13.8s
wall time
agent actions: —
final pytest output
FFFFF [100%]
=================================== FAILURES ===================================
_____________________________ test_classic_example _____________________________
test_ladder.py:7: in test_classic_example
assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log", "cog"]) == 5
E AssertionError: assert 6 == 5
E + where 6 = ladder_length('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log', 'cog'])
_____________________________ test_unreachable_end _____________________________
test_ladder.py:11: in test_unreachable_end
assert ladder_length("hit", "cog", ["hot", "dot", "dog", "lot", "log"]) == 0
E AssertionError: assert 6 == 0
E + where 6 = ladder_length('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log'])
_______________________________ test_single_step _______________________________
test_ladder.py:15: in test_single_step
assert ladder_length("a", "c", ["a", "b", "c"]) == 2
E AssertionError: assert 3 == 2
E + where 3 = ladder_length('a', 'c', ['a', 'b', 'c'])
____________________________ test_shortest_is_found ____________________________
test_ladder.py:20: in test_shortest_is_found
assert ladder_length("hit", "cot", words) == 3
E AssertionError: assert 4 == 3
E + where 4 = ladder_length('hit', 'cot', ['hot', 'hit', 'hat', 'cat', 'cot', 'cog', ...])
__________________________ test_larger_input_is_fast ___________________________
test_ladder.py:26: in test_larger_input_is_fast
assert ladder_length("aaa", "hhh", words) == 4
E AssertionError: assert 5 == 4
E + where 5 = ladder_length('aaa', 'hhh', ['aaa', 'aab', 'aac', 'aad', 'aae', 'aaf', ...])
=========================== short test summary info ============================
FAILED test_ladder.py::test_classic_example - AssertionError: assert 6 == 5
FAILED test_ladder.py::test_unreachable_end - AssertionError: assert 6 == 0
FAILED test_ladder.py::test_single_step - AssertionError: assert 3 == 2
FAILED test_ladder.py::test_shortest_is_found - AssertionError: assert 4 == 3
FAILED test_ladder.py::test_larger_input_is_fast - AssertionError: assert 5 == 4
5 failed in 0.04s