Funktionen
Die Shuffle Funktion
Algorithmus nach Fisher-Yates. (auch bekannt als Richard Durstenfeld und Donald E. Knuth "Knuth Shuffle")
function shuffle(str)
local chars = {}
for i=1, #str do
chars [i] =str:sub(i,i)
end
for i = #chars, 2, -1 do
local j = math.random(i)
chars[i], chars[j] = chars[j], chars[i]
end
return table.concat(chars)
end
Erklärung
- Wir erstellen in der Funktion einen neuen, lokalen und leeren Array namens *chars*. (In Lua werden Arrays "table" genannt).
- Mit der ersten Schleife (sie läuft von 1 bis zu der Länge des Strings mittels #str ), schreiben wir alle einzelzeichen des übergebenen Strings in diesen Array. Also ein Buchstabe pro Feld.
- In der zweiten Schleife durchlaufen wir nun alle Felder des Arrays rückwärts bis zum zweiten Feld. Wir beginnen also am Ende des Arrays mittels #chars und verringern die Position (-1).
- Wir weisen dort einer lokalen variablen j einen Zufallswert zu, der als maximalen Wertebereich den aktuellen wert der aktuellen position hat (zu Beginn also die Länge des gesamten Arrays).
- Wir vertauschen nun die Werte im Array bzgl. aktuelle Stelle und diese Zufallsstelle
- Das wiederholen wir solange, bis der Array ganz von hinten nach vorne durchlaufen wurde.
- Wir geben den nun zufällig sortierten Array als String wieder zurück, indem wir die table.concat Funktion auf den Array anwenden.