Hallo!

Gegeben sind die ganzzahlige Zeit „t“ und das Array „data“.

Anzahl der Einträge im Array: n = data.length

Ich brauche einen Algorithmus, der zu jeder Zeit einen Wert x zwischen
1 und n liefert, damit ein Eintrag data[ x-1 ] ausgegeben werden kann.

Bei aufeinanderfolgenden t soll x nicht gleich sein, also: x(t) != x(t+1)

Außerdem sollen die Ausgaben bunt gemischt werden, so dass jedes x
ungefähr gleich oft vorkommt und Abfolgen sich selten wiederholen.

Es darf keine weitere Datenquelle wie ein Zufallsgenerator genutzt werden.

Der Sinn ist, Fotos auf mehreren Bildschirmen laufen zu lassen. Ich
habe zueinander passende Bilder in data[] zusammengestellt, die
synchron angezeigt werden sollen. Es gibt keine Zentrale, daher muss
jeder Raspberry Pi aus dem Algorithmus und der Zeit wissen, welche
Aufnahme gerade dran ist.

Meine Idee ist, mit „t modulo n“ Gruppen zu bilden, in denen jedes x
genau einmal vorkommt. Die Reihenfolge innerhalb der Gruppe wird dann
mit einem Chaos-Generator ausgewürfelt, der mit t initialisiert wird.
Ich könnte mir vorstellen, dass es eine viel elegantere Lösung gibt.

Viele Grüße
Thomas


Aktueller Stand, der schon ganz OK funktioniert:

function pseudorandom(t, n) {
// return a pseudo random number between 0 and n
var x = 0;
t = t * 347263074; // Add noise
t = t.toString();
if (t == 0) return x;

for (var i = 0; i < t.length; i++) {
x  = ((x << 5) - x) + t.charCodeAt(i);
x |= 0; // Convert to 32bit integer
}
x = Math.abs(x);
x = x % (n+1);
return x;
};

Antwort per Email an