Version 0.2 — Tau Prolog only, but with a step-through debugger: watch the actual resolution trace, one clue at a time, alongside a plain-English account of what each step establishes. (Version 0.1, which runs all three engines side by side without a trace view, is preserved separately.)
Setup
Six iGEM teams competed in six different years, 2020–2025, each in a different country, each working with a different signature organism, each with a different project name, and each earning a different special recognition. Using only the clues below, figure out which team goes with which year.
Countries
Netherlands · China · USA · Hong Kong · Canada · Germany
Best Food & Nutrition Project nom. · Silver medal only · Best Therapeutics Project nom. · Best Sustainable Development Project nom. · Gold medal, no special nomination · Safety & Security Prize winner
Clues
Which country, organism, project, and award go with each year, 2020–2025?
Your answer
Pick one option per column for each year, then check your work.
Year
Country
Organism
Project
Recognition
Watch Tau Prolog solve it
This runs the real Prolog resolution once, records every step Tau Prolog's own (undocumented but built-in) debugger hook exposes, then lets you step through the 21 checkpoints that matter — one per clue — forwards or backwards.
Source — currently executing
Click "Run & trace" to solve the puzzle and load a trace.
Grounded call at this step
Reasoning
What's known so far
Year
Country
Organism
Project
Recognition
What's original code on this page, and where the rest comes from
Tau Prolog is vendored unmodified from its published package. The puzzle is an ordinary Prolog program (permutation + member/nth1 — the standard textbook technique for zebra-style puzzles). For this version, each clue was pulled out into its own tiny named predicate (clue1/1, clue2/3, ...) purely so the trace has clean, readable checkpoints to filter for — it changes nothing about how the puzzle is solved.
The debugger hook itself is not a new library — it's Tau Prolog's own internal machinery. Thread.prototype.step already checks this.debugger and records every resolution step into this.debugger_states if it's turned on; we just flip that flag and read the array back afterward. Term.prototype.select() and Term.prototype.apply(), also Tau Prolog's own, are what pull "the subgoal currently being tried" and "its arguments under the current bindings" out of each recorded step.
The clue text, reasoning blurbs, and the "what's known so far" reveal order are hand-written for this puzzle (mapping each clue to the grid cell(s) it pins down) — content, not a technique, so nothing to cite there.
The stepper itself (prev/next/play, building the raw and human panes, the DOM comparisons that grade your grid) is ordinary event handling and DOM manipulation — the kind covered in the "Modern JavaScript Tutorial" (javascript.info) chapters on the Document, Events, and Forms.