Unit object,
Proof of concept combining the methods outlined in my answers given to
How to make objects follow a ellipse? (Duplication around ellipse)
and
Continuous Looping animation - Differing rotational speeds
Make a single unit, copy & offset each to fill the path.
Using an object that is one unit of your data. Create enough copies to fit the curve. Can quickly work out how many copies fit by using array modifier and setting fit curve, calculate by dimension divided by unit dimension, or add a curve modifier and adjust count. The modifiers are no longer required and can be removed.
Here's one I prepared earlier. Basically we are copying the unit and sliding its offset further along the curve by adding offset to driver expression

with the unit object "set up" (ie has the constraint and driver_) run the following script from the text editor
from bpy import context
from random import random
frames = 45
copies = 112
prob = 0.7
unit = context.object
driver = unit.animation_data.drivers[0].driver
unit.select_set(True)
expr = f"((frame - 1) / {frames}) % 1"
driver.expression = expr
for i in range(1, copies): # copies - 1
if random() > prob:
continue
tower = context.object.copy()
# comment following to have linked copies (same mesh)
#tower.data = tower.data.copy() # an unlinked dupe (own mesh)
driver = tower.animation_data.drivers[0].driver
driver.expression = f"({i / copies} + ({expr})) % 1"
#tower.constraints[0].offset_factor = i / copies
context.collection.objects.link(tower)
# only copies selected after run script
unit.select_set(False)
Set up so after running only copies selected, so if unhappy, hit X and remove the copies change settings & run again.
frames
: How many frames it takes to traverse the path
copies
: How many copies required
prob
: The probability of copy being data 1.
Improvements,
Could do a number of things.
Instead of not copying when blank data, copy them all and drive the render visibility. Would enable us to randomize data on next circuit for example
Make each chunk an array and drive each chunks array count.
Use some binary input data, 00110101111000100
instead of random choice
Make a better gif to illustrate.
Read the question better. If need be can edit for multiple objects. As it is each object shares one mesh. Could swap out to other meshes (esp. if dimensions match)