Here’s my approach building on Dan’s solution (and also on Andrei’s):
expression for the text-layer named “list”:
<pre style=”position: relative;”>
list=[];
runningTotal = 0;
for (i=0; i<5; i++) {
n=linear(noise([time, i*123]),-1,1,0.01,1);
runningTotal+=n;
list.push(runningTotal);
}
list.map(e => e * thisComp.width/runningTotal).slice(0,4);
<div class=”open_grepper_editor” title=”Edit & Save To Grepper”></div>
The linear() is there to makes absolutely sure there’s no overlap, as it turns out, even the noise() function can go slightly out of bounds…
And each vertical line’s position gets this expression:
<pre style=”position: relative;”>list = thisComp.layer(“list”).text.sourceText.split(“,”);
[list[index-1],value[1]];<div class=”open_grepper_editor” title=”Edit & Save To Grepper”></div>
(assuming the indexes of the 4 line layers are 1-4)