← Back

Continual-learning test · draft v0

The scored test.

All 28 levels once, in order, with no instructions. Work out each game by playing, then meet them again later. The score is how few moves you need, and whether you still remember.

Game Alevel 1 of 2Learn0 / 200 moves

Use your keyboard: ↑ ← ↓ → or W A S D to move, space to interact (it works only in some spots), R to restart.

No instructions: work out each game by playing.

Your score so farLearn —Remix —Return —0 of 28 levels · game 1 of 14

How the test works

No instructions. Nothing says what the goal is or what anything does. Arrow keys or WASD move, space (or E) interacts with things, which only works in some spots, R restarts the level. No need to click the board first.

Three parts. Learn: six new games (A to F), each starting with an easy level. Remix: three games (G to I) that mix earlier rules. Return: five earlier games again, with new levels, after the remixes. 28 levels in all.

Scoring. Each level’s par is the fewest moves possible, found by a computer search of every option. A level scores par ÷ your moves, up to 100%. Every key press counts, restarts included. Use more than 20 × par moves (at least 100) and the level scores 0. Each part’s score is the average of its levels; the total is the average of the three parts.

What it measures. A system that keeps learning should get quicker within each game, reuse old rules in the remixes, and still know the games when it returns. The return part is the memory test.

Scores so far

PlayerLearnRemixReturnTotal
Perfect play100%100%100%100%
Random keys (20 runs)4.4%0.3%0.6%1.8%

Random keys finish about 5 of 28 levels, mostly the easy first ones. No trained AI or human group has been scored yet; your own score stays in this browser.

Run your AI

An AI plays through a small Python or command-line interface that runs these exact rules. It gets the same grid of colours you see, as numbers, plus the game letter, part and move count. Nothing else.

from arcade import Arcade

with Arcade() as env:
    obs = env.reset()
    while not obs["done"]:
        action = my_agent(obs)          # 0 up, 1 right, 2 down, 3 left, 4 use, 5 restart
        obs, result = env.step(action)  # result is set when a level ends
    print(env.score()["score"])

Draft v0: these are public practice levels. Official scores will need a hidden set of levels, and human results to compare against.