Simplest way: number of magnets corresponds to train ID. Small space between magnets (calculated from Hall sensor refresh rate and max train speed). Count number of Hall sensor trips (maybe with debounce) within some time period (calculated from the minimum train speed during crossing and the magnet spacing).
Disadvantage: Train minimum speed must be reasonable. Requires n(n+1)/2 magnets, or 36 for 8 trains.
More reliable way: two columns of magnets, slightly offset, spaced as above. Two Hall sensors in a row under the track. Col 1 is clock. Col 2 is data. Whenever Hall 1 (clock) goes high, read Hall 2 (data) (maybe for a short period for debounce). To keep things simple and stay away from speed assumptions, put the same number of clock magnets on all trains: log2(train count), rounded up, for example 4 for 16 trains.
Disadvantage: Requires twice as many Hall sensors. Requires about log2(N)1.5 magnets per train, so 96 magnets for 16 trains, as opposed to 16 for the original method. Those tiny neodymium magnet bars are cheap, though.
BONUS: Train speed measurement. Speed is the clock magnet spacing divided by time between clock Hall trips. Now you can run a Pi algorithm (e.g. PID) to move trains at a target speed regardless of load, at least in the regions with Hall sensors.
If you are willing to assume the train speed is constant while passing the sensors and do more complex signal analysis on the Pi, the intermediate clock magnets can be removed, reducing the magnet count to N(2 + log2(N)0.5)=64.
Have two rows of sensors set up like this:
* * * * * * * *
Though if you do that, you'd need to worry about ambiguity from trains going different directions along the track. With your scheme, you have to figure out which column is the clock, but that's doable because it's the one with all 1s. (If the data is all 1s, then it's not clear but which column is which. You can still figure out the train number but not which way it's going.)
With my solution, I suppose you could just add a leading pair of magnets in both columns, which adds two magnets (and the space for them) to the cost.
Also, I'm not a hardware guy, but it seems like magnet polarity matters for hall effect sensors. So maybe you could so something like a single column of magnets but flipped north up or south up depending whether you want to indicate a 0 or a 1. I'm not sure whether you'd need two hall effect sensors (in opposite orientations) or a different type of hall effect sensor.
The least decorated layout there was the most interesting, as it was computer controlled. Even better, a small child could program it by writing instructions on paper and handing them to the controller who then put them into the computer
For a 10 year old, this was magical! This may have triggered my interest in computers
They walk away having written a bare-metal real-time operating system, so I guess that's something. I stuck to the less soul-destroying classes.
* Impressions 
* Optimizing The Kernel 
* The 72-hour bug 
* Train Tracking 
Notably, QNX started as a CS 452 project.
I'm not too sure about the future of that course. The last I heard (Winter 2019), the professor, Bill Cowan, had decided to stop teaching. Last term, they were clearing out the CS 452 lab and were moving the trains elsewhere. I had wanted to take the course then, but unfortunately the course wasn't being offered, and it was my last term before graduating.
I get that one can be seen as a simplified model of the other, but can anyone expand further on the attraction?
Program errors are much more fun with trains. :)
I pass the physical presence of this place frequently https://railsofsheffield.com/ & their window displays make me drool.
I guess my loft is going to be repurposed when I retire :)
Might of been in part one, but if you're even remotely into model trains or just a passing fascination into them, well worth a watch. But a most enjoyable documentary and a style that will fit even the non-train buffs abound.
Been thinking about building an El onto the crowning for a while, though.