Wprowadzenie
Na prywatnym czacie mój przyjaciel najwyraźniej niedawno natknął się na system bezpieczeństwa, który ma następujące dwa ograniczenia dotyczące ważnych pinów:
- Każda cyfra musi być unikalna (tzn. „1” może pojawić się tylko raz)
- Kolejność cyfr nie ma znaczenia („1234” = „4321”)
Aby zilustrować, jak zły jest ten system kłódek, wyliczyć wszystkie prawidłowe kody PIN!
Wejście
Dane wejściowe będą składały się z jednej dodatniej liczby całkowitej, która oznacza długość kodu PIN.
Wynik
Dane wyjściowe składają się z listy nieujemnych liczb całkowitych lub ciągów *, które wyliczają wszystkie prawidłowe kody PIN o podanej długości.
* A ściślej coś, czego człowiek może użyć, aby wypróbować wszystkie kombinacje, gdybyś wydrukował to dla nich. Oznacza to, że zestaw zestawów cyfr i tablic tablic cyfr jest w porządku.
Kto wygrywa?
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach! Obowiązują standardowe zasady i luki .
Obudowy narożne
- Zachowanie wyjściowe jest niezdefiniowane, jeśli wprowadzona zostanie liczba całkowita większa niż 10.
- Kolejność cyfr w każdym wpisie wyjściowym jest niezdefiniowana, ponieważ wpisy zawierające zero faktycznie zawierają wspomniane zero, to znaczy, że nie można rozdzielić „0123” na „123”, ale „1230”, „1203” i „1023” są prawidłowe tak jak „0123”.
Przypadki testowe
1
[0,1,2,3,4,5,6,7,8,9]
2
[10,20,30,40,50,60,70,80,90,21,31,41,51,61,71,81,91,32,42,52,62,72,82,92,43,53,63,73,83,93,54,64,74,84,94,65,75,85,95,76,86,96,87,97,98]
3
[210,310,410,510,610,710,810,910,320,420,520,620,720,820,920,430,530,630,730,830,930,540,640,740,840,940,650,750,850,950,760,860,960,870,970,980,321,421,521,621,721,821,921,431,531,631,731,831,931,541,641,741,841,941,651,751,851,951,761,861,961,871,971,981,432,532,632,732,832,932,542,642,742,842,942,652,752,852,952,762,862,962,872,972,982,543,643,743,843,943,653,753,853,953,763,863,963,873,973,983,654,754,854,954,764,864,964,874,974,984,765,865,965,875,975,985,876,976,986,987]
4
[3210,4210,5210,6210,7210,8210,9210,4310,5310,6310,7310,8310,9310,5410,6410,7410,8410,9410,6510,7510,8510,9510,7610,8610,9610,8710,9710,9810,4320,5320,6320,7320,8320,9320,5420,6420,7420,8420,9420,6520,7520,8520,9520,7620,8620,9620,8720,9720,9820,5430,6430,7430,8430,9430,6530,7530,8530,9530,7630,8630,9630,8730,9730,9830,6540,7540,8540,9540,7640,8640,9640,8740,9740,9840,7650,8650,9650,8750,9750,9850,8760,9760,9860,9870,4321,5321,6321,7321,8321,9321,5421,6421,7421,8421,9421,6521,7521,8521,9521,7621,8621,9621,8721,9721,9821,5431,6431,7431,8431,9431,6531,7531,8531,9531,7631,8631,9631,8731,9731,9831,6541,7541,8541,9541,7641,8641,9641,8741,9741,9841,7651,8651,9651,8751,9751,9851,8761,9761,9861,9871,5432,6432,7432,8432,9432,6532,7532,8532,9532,7632,8632,9632,8732,9732,9832,6542,7542,8542,9542,7642,8642,9642,8742,9742,9842,7652,8652,9652,8752,9752,9852,8762,9762,9862,9872,6543,7543,8543,9543,7643,8643,9643,8743,9743,9843,7653,8653,9653,8753,9753,9853,8763,9763,9863,9873,7654,8654,9654,8754,9754,9854,8764,9764,9864,9874,8765,9765,9865,9875,9876]
źródło
Odpowiedzi:
Galaretka , 4 bajty
Wypróbuj online!
Wyjaśnienie
Zachowanie dla
n > 10
pustej listy.źródło
05AB1E , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
ù
to coś. Jestem pewien, że wcześniej użyłem filtra. Jak nowy to jest?JavaScript (ES7), 89 bajtów
Zwraca listę list cyfr (jako znaków) lub pustą listę, jeśli n> 10 .
Wypróbuj online!
W jaki sposób?
Najpierw generujemy listę wszystkich cyfr dziesiętnych jako znaków, obliczając 2 29 = 536870912 , dodając brakujące „4” i dzieląc:
Następnie obliczamy zestaw mocy:
Na koniec filtrujemy wyniki według ich długości:
źródło
Python 3 , 57 bajtów
Wypróbuj online!
Znajduje wszystkie kombinacje
0 .. 9
długościl
.Zachowanie dla
n > 10
pustej listy.źródło
Wolfram Language (Mathematica) , 22 bajty
Wypróbuj online!
źródło
Python 2 , 62 bajty
Zwraca zestaw ciągów.
Wypróbuj online!
źródło
Pyth, 4 bajty
Wypróbuj tutaj
Wyjaśnienie
źródło
R , 17 bajtów
Wypróbuj online!
Błędy wejściowe większe niż
10
.Zwraca miejsce, w
matrix
którym każda kolumna jest numerem PIN.źródło
Rubinowy , 30 bajtów
Wypróbuj online!
źródło
MATL , 6 bajtów
Wypróbuj online!
Nic nie zwraca (pusta tablica) dla
k>10
.źródło
Haskell ,
5650 bajtów-6 bajtów dzięki Hat Wizard .
Wypróbuj online!
źródło
Java (JDK 10) , 105 bajtów
Wypróbuj online!
źródło
Haskell , 47 bajtów
Wypróbuj online!
Wyjaśnienie
Gdy liczba cyfr wynosi zero, istnieje tylko jedna kombinacja, czyli pusta:
Gdy liczba cyfr jest równa,
n
an/=0
kombinacje są wszystkimi sposobami dodawania cyfr do kombinacji,f$n-1
tak że żadna cyfra nie jest dodawana do kombinacji, która już ją zawiera.źródło
Gaia ,
43 bajtyWypróbuj online!
Minęło trochę czasu, odkąd opublikowałem odpowiedź w Gai! Dzięki panu Xcoderowi za uratowanie bajtu!
źródło
@
.Retina ,
5136 bajtówWypróbuj online! Nie wyświetla niczego
n>10
. Wyjaśnienie:Wymień wejście na 10
_
s.Powtórz pozostałe
n
czasy programu .Poprzedź każdą cyfrę
_
powtórzeniem zgodnie z pierwszą cyfrą.Dopasuj wszystkie
_
s, ale uwzględnij również wszystkie następujące_
s w meczu, dla których musimy włączyć nakładające się mecze.Dla każdego
_
znalezionego poprzedź liczbę_
s po jego lewej stronie do liczby.Jest to nieco trudne, więc być może rzeczywisty przypadek byłby lepszy. Załóżmy, że już uruchomiliśmy pętlę dwa razy, aby wszystkie 2-cyfrowe kody PIN zostały wygenerowane i obecnie pracujemy nad ich utworzeniem 3-cyfrowych kodów PIN. Zobaczymy, co się stanie
36
: Pierwsza cyfra to3
, więc trzy_
s są poprzedzone, aby___36
. Spowoduje to utworzenie następujących dopasowań, oznaczonych tutaj`'
s:$%'
zmienia się na36
we wszystkich trzech przypadkach, co skutkuje trzycyfrowymi kodami PIN036
,136
oraz236
.Gdybyśmy mieli następnie tworzyć 4-cyfrowe PIN-y,
036
nie mielibyśmy żadnych_
prefiksów, a zatem nie doprowadzilibyśmy do żadnego dopasowania w końcowym wyniku.źródło
^0
i¶
kosztem 5 bajtów.Proton , 43 bajty
Wypróbuj online!
Proton wreszcie przerósł Pythona: DI myślał,
(import itertools)
że zwróci wartość, ale najwyraźniej mi się to nie udało. Również importowanie*
później nie działa, ponieważ nie jest to lambda, jest to wyrażenie najwyższego poziomu.źródło
Japt, 5 bajtów
Wyprowadza tablicę tablic cyfrowych. Wyprowadza wszystkie kombinacje, jeśli dane wejściowe są,
0
lub pustą tablicę, jeśli dane wejściowe są<0
lub>10
.Spróbuj
Wyjaśnienie
źródło
Stax , 4 bajty
Wypróbuj online!
Vd
jest"0123456789"
.,
wypycha dane wejściowe do głównego stosu.S
pobiera kombinacje określonego rozmiaru.W łączu tio
m
służy w stopce do wydrukowania każdego wydruku.źródło
Standardowy ML ,
124122121 bajtówWypróbuj online! Przykładowe użycie:
!2
daje[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[1,0],[1,2],[1,3], ...]
.Nie golfowany:
Niektóre alternatywy:
125123 bajtówWypróbuj online! Definiuje anonimową funkcję, z którą jest związana
it
.127124 bajtówWypróbuj online!
źródło
JavaScript (Node.js) , 53 bajty
Wypróbuj online!
źródło
Oracle 18 SQL, 169 bajtów
Nie jest to język golfowy, ale:
Oczekiwano, że dane wejściowe znajdą się w tabeli
i
z kolumnąa
:Wypróbuj online w Oracle Live SQL (wymagane jest bezpłatne logowanie, a następnie skopiuj i wklej rozwiązanie do arkusza roboczego ) lub SQLFiddle (bez logowania, ale wymaga +7 bajtów do pracy w niższej wersji Oracle).
źródło
CJam ,
1311 bajtówWypróbuj online!
Technicznie nie działa na tio.run, ponieważ kończy się miejsce na stosie. Działa jednak poprawnie dla maksymalnie 9-cyfrowych klawiatur i powinien działać dobrze z większą ilością pamięci RAM.
Zaoszczędzono 2 bajty dzięki Dennisowi
źródło
Bash ,
11399 bajtówWypróbuj online!
źródło
r 0
nie działar
jest funkcją rekurencyjną: nie ma być uruchamiana tylko z jednym parametrem.p 0
zachowanie nie jest określone w pytaniu.JavaScript (Firefox 30-57), 67 bajtów
Port mojej odpowiedzi Retina, ale działa
n=0
również dla (zwracając listę pustych ciągów, w odróżnieniu od pustej listy dlan>10
).źródło
Węgiel drzewny , 21 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wciśnij pusty ciąg do wstępnie zdefiniowanej listy.
Pętla nad każdą cyfrą.
Dołącz cyfrę do każdego łańcucha na liście.
Dołącz wynik do oryginalnej listy.
Wydrukuj wszystkie ciągi z prawidłową liczbą cyfr.
źródło
Perl 6 , 20 bajtów
Wypróbuj online!
To jest dokładnie to, co
combinations
(jako podprogram lub.combinations
lista).https://docs.perl6.org/routine/combinations
źródło
jot , 32 bajty
.. frustrująco dłużej niż Mathematica i R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOźródło