Ich habe hier eine Herausforderung beantwortet und diese Aufgabe war Teil der Herausforderung. Ich habe eine 73-Byte-Lösung in Javascript. Aber ich denke, es ist zu viel für eine einfache Sache.
Herausforderung
Als Eingabe zwei Ganzzahlen gegeben:
N
die Länge des erwarteten ArraysR
Der Intervallbereich beginnt mit eins:,1..R
nicht0..R-1
Geben Sie in jedem Lauf Ihres Programms / Ihrer Funktion ein anderes Array von Längen N
mit Werten aus, zwischen denen 1..R
kein Wert mehr als einmal vorkommt.
Sie müssen R-value
in Ihrem Code verwenden.
Beschränkungen
Sie können davon ausgehen: 2 <= N <= R
.
Ich würde wirklich gerne eine Javascript-Lösung sehen, die kürzer als meine 73 Bytes ist.
Aber natürlich ist es offen für alle Sprachen!
Wenn Ihre Sprache kein Array zurückgeben kann, können Sie alle Zahlen ausdrucken;)
code-golf
random
permutations
entfernt
quelle
quelle
R=N=1
) Dann empfehle ich, die Bereiche0..R
als Alternative zuzulassen, da dies für viele Sprachen natürlicher ist.shuffle(0..N)
new Date
liefern aber ungleichmäßige Werte. Des Weiteren glaube ich, dass Sie Golf spielen könnennew Date%r+1
;)Antworten:
Dyalog APL, 1 Byte
Nur ein eingebautes. Probieren Sie es hier aus .
quelle
JavaScript (ES6),
6866 BytesAufgerufen als
F(N)(R)()
, woF
ist die Funktionszuordnung undN
/R
sind die Werte.Du hast in Js nach weniger als 73 Bytes gefragt;)
BEARBEITEN: Die Antwort von @ C5H8NNaO4 funktioniert innerhalb der Tatsache, dass die Regeln keine einheitlichen Werte angeben müssen
1..R
. Vorausgesetzt, hier ist eine Version arbeitet in 63 Bytes (genannt alsF(R)(N)
):quelle
Oktave,
22 199 Bytesrandperm(r,n)
macht genau das, was verlangt wird. Beachten Sie, dass dies in Matlab nicht funktioniert (zumindest nicht in älteren Versionen).quelle
@(n,r)randperm(r,n)
randperm
mit zwei Eingängen funktioniert in neueren Matlab-Versionen. Es gibt auchrandsample
, aber es dauert mehr Bytes, es sei denn, Sie können loswerden@(...)
(ich denke, das ist erlaubt)@randperm
=)TI-84 BASIC OS 4.0, 12 Byte
Der TI-84 + CSE (2013) und der CE (2015) sind im Wesentlichen derselbe eingeschränkte BASIC-Dialekt wie der TI-84 +, es gibt jedoch einige neue Funktionen. Eines davon ist das dritte Argument von randIntNoRep.
quelle
MATL , 2 Bytes
Eingaben sind: zuerst
R
, dannN
.Probieren Sie es online!
Erläuterung
Die Funktion
Zr
nimmt zwei Eingaben (implizit in diesem Fall) und führt eine ersatzlose Zufallsstichprobe durch. Die erste EingabeR
gibt an, dass die Grundgesamtheit ist[1,2,...,R]
. und die zweite EingabeN
gibt die Anzahl der Proben an, die aus der Grundgesamtheit entnommen werden sollen.quelle
J,
43 BytesEin Byte gespart dank Zgarb! ( Durchgestrichene Vier ist immer noch eine reguläre Vier: D )
nennen wie
N (1+?) R
zB3 (1+?) 10
. Dies verwendet den "Roll" -Operator und macht genau das, was beschrieben ist, außer unter0...n-1
. Wenn wir dies tun könnten, wäre die Antwort 1 Byte,quelle
Pyth, 6 Bytes
Probieren Sie es hier aus!
Die Reichweite steht in der ersten Zeile und die Länge in der zweiten.
Erläuterung
Nicht konkurrierende 5-Byte-Version
Die letzte Ergänzung zu Pyth fügt bei Bedarf implizite
Q
s am Ende des Programms hinzu. Wir können dies hier verwenden, indem wir das Eingabeformat umkehren, sodass die Länge und dann der Bereich an erster Stelle stehen.Probieren Sie es hier aus!
Hier
E
ist der Bereich, mit dem wir eine 1-basierte ListeS
erstellen, mit mischen.S
und die erstenQ
Elemente mit nehmen<
.<
erwartet eine ganze Zahl, die implizit mit a addiert wirdQ
.quelle
Reng v.2.1,
1401039897 BytesDies sollte auch in früheren Versionen funktionieren.
Sie können es hier ausprobieren! Eingabe ist
maximum length
, wie z10 3
.Darauf bin ich so stolz, dass du es nicht mal weißt. Wenn mich jemand mit einer Java-Antwort schlägt, ist das mein Tag. Wenn ich eine Java-Antwort verpasse, denke ich auch an meinen Tag.
Ich werde es später erklären, sobald ich mich erholt habe. Im Allgemeinen jedoch:
Dies erzeugt die Zufallszahlen. Der andere Teil prüft, ob Duplikate vorhanden sind, und wiederholt den Vorgang, falls vorhanden. Andernfalls werden die Ergebnisse mit Leerzeichen gedruckt.
Hier sind einige Beispiele:
quelle
CJam, 8 Bytes
Probieren Sie es hier aus!
Dies ist ein unbenannter Block, der den Bereich oben auf dem Stapel und die Länge unten erwartet und eine Liste auf dem Stapel hinterlässt.
Erläuterung
quelle
Common Lisp, 90
52 nur für den Ausdruck
Ungolfed
Wenn ich use-package und lambda nicht mitzähle , lautet der verbleibende Ausdruck wie bei anderen Antworten
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
52 Byte.quelle
Rubin,
2723 BytesAnonyme Funktion, einigermaßen kurz und bündig.
-4 Bytes von @manatwork
quelle
->n,r{[*1..r].sample n}
Verwenden Sie Code Block Markup anstelle von Inline Code Markup, damit Skripte wie Code Golf UserScript Enhancement Pack die Codegröße daneben einfügen können.𝔼𝕊𝕄𝕚𝕟 10 Zeichen / 13 Byte
Try it here (Firefox only).
Erläuterung
quelle
Bash + Coreutils, 16
Ich halte das für selbsterklärend:
Eingabe
N
undR
als Befehlszeilenparameter.Oder wie @rici bei gleicher Punktzahl feststellt:
Ideone.
quelle
shuf -n$1 -i1-$2
(gleiche Länge).PowerShell v2 +, 30 Byte
Übernimmt Eingaben
$n
und erstellt$r
einen Bereich1..$r
, leitet dieseGet-Random
mit einer-C
Anzahl von weiter$n
, wodurch$n
eindeutige Elemente aus dem Bereich ausgewählt werden. Die Ausgabe wird als implizites Array in der Pipeline belassen.quelle
Im Ernst, 5 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Clojure, 38 Bytes
Eine anonyme Funktion, die N als erstes und R als zweites nimmt.
quelle
Perl 6, 32 Bytes
quelle
Python 3.5 -
5453 Bytes:Dies verwendet die
sample()
Funktion des Zufallsmoduls, um ein Array mit der Länge "a" zurückzugeben, das aus zufälligen, eindeutigen Elementen im Bereich besteht1 => c
.quelle
D, 29 Bytes (nur Ausdruck)
Unter der Annahme, dass std.random und std.range importiert wurden und dass n und r als Variablen definiert sind, kann das Programm in dem einzelnen Ausdruck gelöst werden:
quelle
ES6, 72
Wie in @ Mwr247 die Antwort , können Sie es mit nennen
F(R)(N)
,F
wobei die Funktion Ausdruckquelle
Mathcad, 67 "Bytes"
Erstellt einen Spaltenvektor aus aufeinanderfolgenden ganzen Zahlen im Bereich 1..R., verknüpft ihn mit einem Spaltenvektor der Länge R aus (einheitlichen) Zufallszahlen, sortiert die resultierende Rx2-Matrix in der Zufallszahlenspalte und extrahiert dann die ersten n Zahlen aus der randomisierte Spalte von ganzen Zahlen.
quelle
Python, 56 (der offensichtliche Weg)
quelle
from random import*;lambda N,R:sample(range(1,R+1),k=N)
ist um ein Byte kürzerfrom random import*
, muss die Zählung vermasselt haben.Perl 5,
5143 BytesZiemlich einfaches anonymes Unterelement, das ein Array von 1 bis R generiert und dann N zufällige Elemente daraus zusammenfügt, um zurückzukehren. Mit anrufen
->(N, R)
.quelle
TI-84 BASIC, 21 Byte
quelle
Ans
als Eingabe für einen aktuellen Meta-Post verwenden.