Mit dem folgenden Code kann ich eine Liste mit Zufallszahlen erstellen, z.B. für den Maximalwert 5: 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
%\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} gefragt 06 Mär '18, 03:19 cis |
Sowas nennt man auch self-avoiding walk. Öffne in Overleaf
\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} Falls man die Liste schon hat kann man auch den Knuth Shuffle machen. Öffne in Overleaf
\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} beantwortet 06 Mär '18, 05:31 Henri "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
(06 Mär '18, 13:15)
saputello
|