Mit dem folgenden Code kann ich eine Liste mit Zufallszahlen erstellen, z.B. für den Maximalwert 5:

alt text

Wie könnte ich erreichen, dass alle Zahlen von 1 bis zum Maximalwert genau einmal vorkommen, also im Beispiel von 1 bis 5.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
%\documentclass[]{article}
\documentclass[border=5mm]{standalone}
\usepackage{amsmath, tikz}
\begin{document}
% Maximalen Zufallswert und Anzahl festlegen
\def\Max{5}
\def\Range{1,...,\Max}
% PermutationsListe erstellen
\newcommand{\PermutationsListe}{}% Name reservieren
\let\PermutationsListe=\empty% Liste erstellen
\makeatletter
\foreach \n in \Range
{%
\pgfmathparse{random(\Max)}% <=> random(1,\Max)
\ifx\empty\PermutationsListe{} \protected@xdef\PermutationsListe{\pgfmathresult}%
\else \protected@xdef\PermutationsListe{\PermutationsListe,\pgfmathresult}%
\fi
}\makeatother
Anzeigen: \PermutationsListe
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 06 Mär '18, 03:19

cis's gravatar image

cis
9.6k104460491
Akzeptiert-Rate: 29%


Sowas nennt man auch self-avoiding walk.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
function saw(n)
local list = {}
local seen = {}
while #list < n do
local x = math.random(n)
if not seen[x] then
list[#list+1] = x
seen[x] = true
end
end
tex.sprint(table.concat(list,","))
end
\end{luacode*}
\begin{document}
\directlua{saw(5)}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Falls man die Liste schon hat kann man auch den Knuth Shuffle machen.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
function shuffle(list)
for i = #list,2,-1 do
local j = math.random(i)
list[i], list[j] = list[j], list[i]
end
tex.sprint(table.concat(list,","))
end
\end{luacode*}
\begin{document}
\directlua{shuffle({1,2,3,4,5})}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 06 Mär '18, 05:31

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 06 Mär '18, 10:19

"Gott segne Lua", würde ich an Deiner Stelle jetzt sagen. Mit Normal-TeX wohl eher nicht...

(06 Mär '18, 11:15) cis

@cis: Geht schon, wäre aber aufwändiger und langsamer. So könnte man beispielsweise eine clist für die Liste verwenden und jeweils vor dem Einfügen des Zufallselements testen, ob das Element bereits vorhanden ist. Oder man fügt erst einmal n Elemente hinzu, normalisiert die Liste dann, zählt wieviele Elemente fehlen, fügt entsprechend viele hinzu, normalisiert … Ähnliches könnte man auch mit einer etoolbox-Liste machen. Aber irgendwann wird es ja Zeit, sich mal mit l3 zu befassen.

(06 Mär '18, 13:15) saputello
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×27

gestellte Frage: 06 Mär '18, 03:19

Frage wurde gesehen: 5,008 Mal

zuletzt geändert: 06 Mär '18, 13:18