Odpowiadałem tutaj na jedno wyzwanie i to zadanie było częścią wyzwania. Mam 73 bajtowe rozwiązanie w javascript. Ale myślę, że to za dużo na prostą rzecz.
Wyzwanie
Jako dane wejściowe podano dwie liczby całkowite:
N
długość oczekiwanej tablicyR
zakres interwału zaczyna się od jednego:1..R
nie0..R-1
Wyprowadzaj w każdym uruchomieniu programu / funkcji jedną inną tablicę długości N
z wartościami 1..R
w taki sposób, że żadna wartość nie występuje więcej niż jeden raz.
Musisz użyć R-value
w swoim kodzie.
Ograniczenia
Możesz założyć: 2 <= N <= R
.
Naprawdę chciałbym zobaczyć rozwiązanie javascript krótsze niż moje 73 bajty.
Ale oczywiście jest otwarty na wszystkie języki!
Jeśli twój język nie może zwrócić tablicy, możesz wydrukować wszystkie liczby;)
code-golf
random
permutations
oddalony
źródło
źródło
R=N=1
). Następnie zalecam stosowanie zakresów0..R
jako alternatywy, ponieważ jest to bardziej naturalne dla wielu języków.shuffle(0..N)
new Date
daje niejednorodne wartości. Co więcej, uważam, że możesz grać w golfanew Date%r+1
;)Odpowiedzi:
Dyalog APL, 1 bajt
Po prostu wbudowany. Wypróbuj tutaj .
źródło
JavaScript (ES6),
6866 bajtówWywoływany jako
F(N)(R)()
, gdzieF
jest przypisanie funkcji iN
/R
są wartościami.Prosiłeś o mniej niż 73 bajty w Js;)
EDYCJA: Odpowiedź @ C5H8NNaO4 działa w ramach faktu, że reguły nie określają wartości, muszą być jednolite w poprzek
1..R
. Biorąc to pod uwagę, oto wersja działa w 63 bajtach (nazywana jakoF(R)(N)
):źródło
Oktawa,
22 199 bajtówrandperm(r,n)
robi dokładnie to, co jest wymagane. Zauważ, że to nie działa (przynajmniej nie w starszych wersjach) w Matlabie.źródło
@(n,r)randperm(r,n)
randperm
z dwoma wejściami działa w najnowszych wersjach Matlaba. Jest teżrandsample
, ale zajmuje więcej bajtów, chyba że możesz się go pozbyć@(...)
(myślę, że to dozwolone)@randperm
=)TI-84 BASIC OS 4.0, 12 bajtów
TI-84 + CSE (2013) i CE (2015) są zasadniczo tym samym ograniczonym dialektem BASIC co TI-84 +, ale jest kilka nowych funkcji. Jednym z nich jest trzeci argument randIntNoRep.
źródło
MATL , 2 bajty
Dane wejściowe to: najpierw
R
, a następnieN
.Wypróbuj online!
Wyjaśnienie
Funkcja
Zr
pobiera dwa dane wejściowe (w tym przypadku domyślnie) i wykonuje losowe próbkowanie bez zamiany. Pierwsze dane wejścioweR
określają, że populacja jest[1,2,...,R]
; a drugie dane wejścioweN
wskazują liczbę próbek do pobrania z populacji.źródło
J,
43 bajtyJeden bajt zapisany dzięki Zgarb! ( Przekreślone cztery to wciąż zwykłe cztery: D )
zadzwoń jak
N (1+?) R
np3 (1+?) 10
. Korzysta z operatora „Roll” i robi dokładnie to, co opisano, z wyjątkiem sekcji0...n-1
. Gdybyśmy mogli to zrobić, odpowiedź miałaby 1 bajt,źródło
Pyth, 6 bajtów
Wypróbuj tutaj!
Zasięg występuje w pierwszej linii, a długość w drugiej.
Wyjaśnienie
Niekonkurencyjna 5-bajtowa wersja
Ostatni dodatek do Pytha dodaje niejawne
Q
s na końcu programu, jeśli to konieczne. Możemy użyć tego tutaj poprzez odwrócenie formatu wejściowego, aby najpierw była długość, a potem zakres.Wypróbuj tutaj!
Oto
E
zakres, który zamieniamy w listę opartą na 1S
, tasujemy ją.S
i bierzemy pierwszeQ
elementy<
.<
oczekuje liczby całkowitej, która jest domyślnie dodana do znakuQ
.źródło
Reng v.2.1,
1401039897 bajtówPowinno to również działać we wcześniejszych wersjach.
Możesz spróbować tutaj! Dane wejściowe to
maximum length
, takie jak10 3
.Jestem z tego bardzo dumny, nawet nie wiesz. Jeśli ktoś pobije mnie odpowiedzią Java, to sprawi, że mój dzień. Jeśli pobiję odpowiedź w Javie, pomyśl również o moim dniu.
Wyjaśnię to później, kiedy wyzdrowieję. Ogólnie jednak:
To generuje liczby losowe. Druga część sprawdza, czy są duplikaty, a jeśli tak, proces jest powtarzany. W przeciwnym razie wyniki są drukowane, a spacje łączą się z wynikami.
Oto kilka przykładów:
źródło
CJam, 8 bajtów
Wypróbuj tutaj!
Jest to nienazwany blok, który oczekuje zakresu na górze stosu i długości na dole i pozostawia listę na stosie.
Wyjaśnienie
źródło
Common Lisp, 90
52 tylko dla wyrażenia
Nie golfił
Podobnie jak inne odpowiedzi, jeśli nie liczę use-package i lambda , pozostałe wyrażenie to
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
52 bajty.źródło
Ruby,
2723 bajtówFunkcja anonimowa, dość krótka i słodka.
-4 bajty z @manatwork
źródło
->n,r{[*1..r].sample n}
Proszę używać znaczników bloku kodu zamiast wbudowanego znacznika kodu, aby skrypty takie jak Code Golf UserScript Enhancement Pack mogły wstawić obok niego rozmiar kodu.𝔼𝕊𝕄𝕚𝕟, 10 znaków / 13 bajtów
Try it here (Firefox only).
Wyjaśnienie
źródło
Bash + coreutils, 16
Myślę, że to jest oczywiste:
Dane wejściowe
N
iR
parametry wiersza polecenia.Lub, jak wskazuje @rici, dla tego samego wyniku:
Ideone.
źródło
shuf -n$1 -i1-$2
(jednakowa długość).PowerShell v2 +, 30 bajtów
Staje wejście
$n
i$r
konstruuje zakres1..$r
, że do ruryGet-Random
z-C
ount z$n
, który wybierze$n
unikalne elementy z tego zakresu. Dane wyjściowe są pozostawiane w potoku jako niejawna tablica.źródło
Poważnie, 5 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Clojure, 38 bajtów
Anonimowa funkcja zajmująca N najpierw, a R drugą.
źródło
Perl 6, 32 bajty
źródło
Python 3.5 -
5453 bajty:Korzysta z
sample()
funkcji modułu losowego, aby zwrócić tablicę o długości „a” składającej się z losowych, unikalnych elementów w zakresie1 => c
.źródło
D, 29 bajtów (tylko wyrażenie)
Zakładając, że std.losowy i std.range zostały zaimportowane i że n i r są zdefiniowane jako zmienne, program można rozwiązać w jednym wyrażeniu:
źródło
ES6, 72
Podobnie jak w @ Mwr247 za odpowiedź , można nazwać go
F(R)(N)
,F
będąc wyrazem funkcjiźródło
Mathcad, 67 „bajtów”
tworzy wektor kolumny kolejnych liczb całkowitych z zakresu 1..R, łączy go z wektorem kolumny o długości R (jednolitych) liczb losowych, sortuje wynikową macierz Rx2 w kolumnie liczb losowych, a następnie wyodrębnia pierwsze n liczb z losowa kolumna liczb całkowitych.
źródło
Python, 56 (oczywisty sposób)
źródło
from random import*;lambda N,R:sample(range(1,R+1),k=N)
jest krótszy bajtfrom random import*
popsuło liczenie.Perl 5,
5143 bajtówCałkiem proste anonimowe podwodne, które generuje tablicę od 1 do R, a następnie dzieli z niej N losowych elementów w celu zwrócenia. Zadzwoń z
->(N, R)
.źródło
TI-84 BASIC, 21 bajtów
źródło
Ans
danych wejściowych zgodnie z najnowszym meta postem.