Eine Lotteriegesellschaft möchte eine zufällige Lotterielosnummer mit einer Länge von 10 Zeichen generieren.
Schreiben Sie einen Code in einer beliebigen Sprache, um eine solche Zahl zu erstellen, bei der jede Ziffer nur einmal vorkommt. 9354716208
In dieser Zahl kommen beispielsweise alle Ganzzahlen von 0 bis 9 nur einmal vor. Diese Nummer sollte eine Zufallszahl sein.
- Die generierte Nummer sollte auf dem Bildschirm angezeigt werden.
- Es muss in der Lage sein, alle Permutationen aller zulässigen Zeichen zu generieren.
- Der Code muss so klein wie möglich sein (in Byte).
Antworten:
J (4 Bytes)
Konnte nicht widerstehen.
In J ist, wenn
F
dyadischF~ x
ist, dasselbe wiex F x
.quelle
[0..10)
, sodass im Grunde eine zufällige Permutation von '0123456789' gemeint ist.J, 5 Zeichen und APL, 8 Zeichen
J
J hat den eingebauten Deal Operator (
?
). Wir können also 10 von 10 nehmen (10?10
).APL
APL hat den gleichen Operator, der leider mit eins anstelle von null beginnt. Wir subtrahieren daher eine von jeder Nummer (
1-⍨X
MittelwertX-1
aufgrund des Pendlerbetreibers).quelle
10#.
⎕IO←0
dass Sie keinen subtrahieren müssen. Sowohl für J als auch für APL können Sie mit commute ein Byte speichern,?~10
und?⍨10
da die monadische Anwendung der abgeleiteten Funktion das rechte Argument auch als linkes Argument verwendet. Beachten Sie jedoch, dass dadurch der J-Code mit dem von Marinus identisch wird .Python 2.7 (
646357)Keine Chance hier im Vergleich zu den schweren Sprachen des Betreibers und wegen des Mangels an standardmäßig geladenem Zufall :) Dies ist die kürzeste, die ich mir einfallen lassen konnte;
Es wird ein Bereich erstellt und 10 Nummern ohne Ersatz abgetastet.
(Danke an @xfix für das kürzere Importformat und @blkknght für den Hinweis auf meinen etwas überkomplizierten Sampling-Bereich)
Python 2.7 (40)
Wenn Sie es über die interaktive Eingabeaufforderung ausführen und durch Kommas getrennt lesen können, können Sie es auf 40 setzen.
quelle
from random import*
ein Zeichen speichern. Das sieht aus wie meine Perl 6-Lösung, ist aber ausführlicher, aber es ist großartig zu sehen, dass so etwas in Python funktionieren kann, auch wenn es ausführlicher ist."0123456789"
anstatt die Zuweisung vonrange
und zu verwendenstr
.PHP, 29 Zeichen
<?=str_shuffle('0123456789');
Bei PHP ist das schließende Tag nicht erforderlich. Aber wenn das gegen die Regeln verstößt, können Sie es ersetzen. mit?> für 1 nettoerhöhung.
quelle
Rubin, 18
Führen Sie dies in
irb
:Wenn Sie möchten, dass dies ein eigenständiges Programm ist, dessen Ausgabe an
stdout
(die Regeln scheinen dies nicht zu erfordern ), fügen Sie zu Beginn die folgenden 4 Zeichen hinzu:quelle
(0..9).to_a
zu[*0..9]
.[*0..9].shuffle
?PHP - 37 Zeichen
Ich hatte eine 18-Zeichen-Lösung, die theoretisch funktionieren sollte, aber PHP ist komisch.
Oder, wenn Sie eine xkcd-Antwort wünschen:
EDIT: Danke xfix, es ist jetzt 5 Zeichen kürzer und vollständig. WIEDER BEARBEITEN: Live-Beispiel .
quelle
echo
braucht nicht Pars, und wennecho
die erste Anweisung im Programm ist, können Sie ersetzen<?php echo
mit<?=
. Auchjoin
ist ein Alias fürimplode
.<?=
und?>
. Es ist gültiger PHP-Code ohne diese.echo
ist die gleiche Länge wie<?=
und?>
kombiniert, und ohne die, es funktioniert nicht in Codepad. Trotzdem danke. : PPerl 6 (
1816 Zeichen)Dies erzeugt ein Array mit allen zufälligen Elementen (
pick *
) von0
bis9
und gibt das Ergebnis (print
) aus.Beispielausgabe:
quelle
pick
.[~]
(Wird gemäß Perl 6-Grammatik als Listop analysiert) erfordert ein Leerzeichen (oder eine Paren-Anweisung), wenn Argumente enthalten sind. Andernfalls beschwert sich der Perl 6-Compiler über "zwei Terme hintereinander". In älteren Versionen von Perl 6 wurde es nicht benötigt, aber das ist Vergangenheit. An Perl 6 wird noch gearbeitet.print
anstelle vonsay [~]
und speichern Sie 2 Zeichen :)GolfScript, 12 Zeichen
Erzeugt einfach die Liste der Ziffern (
10,
) und sortiert sie{...}$
nach zufälligen Schlüsseln - was eine zufällige Reihenfolge der Ziffern ergibt.Beispiele ( online versuchen ):
quelle
9rand
mit99rand
Would (meistens) fix , dass;9.?rand
wäre praktisch perfekt .R (23 Zeichen)
Beispielausgabe:
quelle
TI-BASIC, 5 Bytes
quelle
randIntNoRep(0,9:.1sum(Ans10^(cumSum(1 or Ans
.Oktave (14)
randperm
schafft leider eine auswahl von 1..n, also muss man am ende 1 subtrahieren um 0-9 zu bekommen.quelle
In SQL Server
Siehe Demo
ODER etwas Ähnliches (mit freundlicher Genehmigung von @manatwork) unter Verwendung von Rekursion und XML.
quelle
select i+0from(select 0i union select 1union select 2union select 3union select 4union select 5union select 6union select 7union select 8union select 9)f order by newid()for xml path('')
. (Übrigens, großer Trick dasnewid()
.)with c as(select 0i union all select i+1from c where i<9)select i+0from c order by newid()for xml path('')
.(VALUES (1),(2),...)
Javascript (
797868 Zeichen)Anstatt ein Array mit den Zahlen 0-9 zu erstellen und zu sortieren, habe ich mich entschieden, Zufallszahlen zu generieren. Wenn eine Nummer gefunden wurde, die noch nicht im Array enthalten war, wurde sie hinzugefügt. Dies wird zehnmal wiederholt und alarmiert dann die Ausgabe.
for(a="";!a[9];){~a.indexOf(b=~~(Math.random()*10))||(a+=b)}alert(a)
quelle
||
Kurzschlussauswertung einsparen, anstattif
wiefor(a="";!a[9];){b=Math.floor(Math.random()*10);~a.indexOf(b)||(a+=b)}alert(a)
for(a="";!a[9];){~a.indexOf(b=Math.floor(Math.random()*10))||(a+=b)}alert(a)
for(a="";!a[9];){~a.indexOf(b=~~(Math.random()*10))||(a+=b)}alert(a)
Mathematica, 27
quelle
Shell / Coreutils, 23
quelle
shuf -i0-9|tr -d \\n
shuf -zi0-9
JavaScript, 82 Zeichen
BEARBEITEN: Dank Rob W wird die Codelänge auf 90 Zeichen reduziert.
BEARBEITEN: Dank George Reith wird die Codelänge auf 82 Zeichen reduziert (mit for-Schleife).
Ganz einfach: Wählen Sie ein zufälliges Element des
[0,1,2,3,4,5,6,7,8,9]
Arrays und hängen Sie es an die Ausgabe an. Reduzieren Sie dann das Array und wiederholen Sie die Wiedergabe.Alte Version (106 Zeichen):
Lesbare Version:
Bessere Version (90 Zeichen):
Letzte Version (82 Zeichen):
JSFiddle: http://jsfiddle.net/gthacoder/qH3t9/ .
quelle
a='0123456789'.split(t=''),l=10;while(l--)t+=a[r=0|Math.random()*l],a.splice(r,1);alert(t)
.Math.random(x)
Schnäppchenjäger : ===0|x
. Ersetzen Sie geschweifte Klammern und Semikolons durch Kommas. Verwenden Sie das Ergebnis einer Zuweisung direkt als Wert, anstatt eine Zwischenvariable zu verwenden. Zum Schluss initialisieren Sie das ursprüngliche Array mit.split(r='')
. Dies ist kürzer als das Erstellen eines Arrays mit Array-Literalen und das Zuweisen des Zeichenfolgenwerts in einem separaten Ausdruck.Math.floor(x) === 0|x
.l=11
und ändern Sie Ihre while-Schleife aufwhile(--l)
a="0123456789".split(t='');for(l=11;--l;t+=a.splice(0|Math.random()*l,1));alert(t)
- Ihr Code passt perfekt in Argumente für Initialisierung, Bedingung und Ausdruck von for-Schleifen. Dier
Variable ist redundant.145 Bytes
Ungolfed
Golf gespielt
quelle
Enumerable.Range(0,10)
, und Sie brauchen nicht die geschweiften Klammern in derforeach
Schleife.JavaScript (80 Zeichen)
JS-Fiddle: http://jsfiddle.net/IQAndreas/3rmza/
quelle
alert("0123456789".split("").sort(n=>.5-Math.random()).join(""))
return
und.5
K / Kona (6)
Ist wie bei J
?
der Deal-Operator; Das-
zwingt die Werte, sich nicht zu wiederholen.quelle
Mathematica 40
Die Nummer wird als Zeichenfolge erstellt, damit bei Bedarf Null als erstes Zeichen angezeigt werden kann.
Ausgabebeispiele
Erläuterung
"0"~CharacterRange~"9"
ist eine Infixnotation für "CharacterRange [" 0 "," 9 "]". Beides gibt die Liste zurück, {"0", "1", "2", "3", "4", "5", " 6, 7, 8, 9}.RandomSample[list]
Standardmäßig wird eine Permutation der Liste zurückgegeben. (Es kann auch für andere Arten der Abtastung verwendet werden, wenn Parameter enthalten sind. ZBRandomSample[list, 4]
wird eine Zufallsstichprobe von 4 Zeichen ohne Wiederholungen zurückgegeben.quelle
Scala, 37
quelle
Forth, 72
Vielleicht noch Platz zum Golfen, aber Forth machte es schwer. Ich glaube.
quelle
Prolog, 177/302 Zeichen
Ich bin ein Anfänger in Prolog, also ist dies wahrscheinlich nicht der am meisten komprimierte Code.
Kehrt zurück:
Wenn Sie möchten, dass es eine Ganzzahl zurückgibt:
Kehrt zurück:
Verwenden Sie stattdessen:
Gibt die Zahlen in umgekehrter Reihenfolge an:
Im Gegensatz zu einigen anderen Codes gibt dies alle Möglichkeiten zurück (ohne Wiederholungen).
quelle
q / kdb [6 Zeichen]
erzeugt 10 eindeutige Zufallszahlen.
quelle
√ å ı ¥ ® Ï Ø ¿ , 4 Bytes
quelle
Clojure, 42
quelle
Javascript, 83 Zeichen
Während des Betriebs, bis das Array 10 Elemente enthält.
Wenn Sie eine Zufallszahl von 0 bis 9 generieren, prüfen Sie, ob das Array diese Zahl enthält, und fügen Sie sie dem Array hinzu.
quelle
Dies ist nicht viel kleiner als die Antwort von JMK, aber hier ist eine etwas kleinere C # -Lösung (135):
Verdichtet (134):
Alternative Version (135):
Verdichtet:
Sie sind gleich lang, aber es hängt wirklich nur davon ab, ob Sie die ForEach-Funktion von Linq oder die Join-Funktion von String verwenden möchten. Ich konnte 10 Zeichen in der Länge entfernen, indem ich den Bereich "0123456789" in einer Zeichenfolge buchstabierte, anstatt Enumerable.Range (0, 10) zu verwenden.
quelle
LOGO , 64 Zeichen
pick gibt einen zufälligen Eintrag aus der angegebenen Liste zurück. butmember gibt eine Liste zurück, in der alle Vorkommen des angegebenen Elements entfernt wurden. Hinweis: Nicht alle Logo-Implementierungen unterstützen den
butmember
Befehl.quelle
Schläger
4543quelle