Immat

Immat: a license plate collection game built with Flutter.

2022-06-06

Introducing Immat — a license plate collection game. This was my very first experiment with the Flutter framework, and it’s now available on the Google Play Store.

Get it on Google Play

The game

A few months ago, my uncle set us a quirky challenge: Find a car with a specific license plate number.

In France, plates have the format AA-123-AA (two letters, three digits, two letters). The goal was to spot any of the 1,000 cars with the letters “BR-NA” — the name of a small town on the Croatian coast — and send my uncle a photo.

My family quickly got into the game, scanning plates and jotting down interesting finds. Just four letters… but a finite set, and only 1,000 of each combination.

At the same time, I was learning Flutter. So I built Immat — a simple app to record discovered plates and display your growing collection.

Home
Home
Digit-based collection
Digit-based collection
Letter-based collection
Letter-based collection

How absurd is it?

Quite absurd.

Let’s start with the simplest goal: collect all 999 possible three-digit combinations.

When you already have x numbers, you’ll need to see roughly (999 - x) / x cars on average to find a new plate. At first it’s easy: up to the 500th plate, more than half the cars you see are new, taking fewer than 700 sightings. But reaching 900 plates requires around 2,300 sightings… and the final one? You’ll have just a 1/999 chance each time.

And with letters?

For letters, the goal is to complete all plates starting with two specific letters — say BR-.... In France, combinations aren’t random: plates are assigned sequentially, so by the time I built the app, they’d reached around G....

You’re now hunting for 23 × 23 - 1 different plates1, each existing only 999 times across the country’s ~85 million registered plates.

But…

One day, my father did spot the elusive BR-NA plate. So maybe, just maybe, you’ll get lucky too.


1 The “SS” combination is banned, and the letters O, U, and I are avoided because they’re too close to 0, V, and 1.