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

  1. Wir erstellen in der Funktion einen neuen, lokalen und leeren Array namens *chars*. (In Lua werden Arrays "table" genannt).
  2. 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.
  3. 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).
  4. 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).
  5. Wir vertauschen nun die Werte im Array bzgl. aktuelle Stelle und diese Zufallsstelle
  6. Das wiederholen wir solange, bis der Array ganz von hinten nach vorne durchlaufen wurde.
  7. Wir geben den nun zufällig sortierten Array als String wieder zurück, indem wir die table.concat Funktion auf den Array anwenden.