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; };