pengantar
Dalam obrolan pribadi, seorang teman saya tampaknya baru-baru ini menemukan sistem keamanan yang memiliki dua batasan berikut pada pin yang valid:
- Setiap digit harus unik (yaitu "1" hanya dapat muncul sekali)
- Urutan digit tidak masalah ("1234" = "4321")
Jadi untuk menggambarkan betapa buruknya sistem gembok ini, mari sebutkan semua PIN yang valid!
Memasukkan
Input Anda akan terdiri dari bilangan bulat tunggal, positif, yang menunjukkan panjang PIN.
Keluaran
Output Anda terdiri dari daftar bilangan bulat atau string non-negatif *, yang menyebutkan semua PIN yang valid dengan panjang yang diberikan.
* Lebih tepatnya sesuatu yang dapat digunakan manusia untuk mencoba semua kombinasi jika Anda ingin mencetaknya. Ini berarti mengatur set angka dan array dari array dari angka-baik saja.
Yang menang?
Ini adalah kode-golf sehingga jawaban tersingkat dalam byte menang! Aturan dan celah standar berlaku.
Kasus sudut
- Perilaku output tidak terdefinisi jika bilangan bulat lebih besar dari 10 adalah input.
- Urutan digit dalam setiap entri keluaran tidak ditentukan, karena entri dengan nol sebenarnya mengandung kata nol, yaitu Anda tidak boleh menghapus "0123" menjadi "123" tetapi "1230", "1203" dan "1023" semuanya valid seperti "0123".
Uji Kasus
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]
sumber
Jawaban:
Jelly , 4 byte
Cobalah online!
Penjelasan
Perilaku untuk
n > 10
daftar kosong.sumber
05AB1E , 5 byte
Cobalah online!
Penjelasan
sumber
ù
apa-apa. Cukup yakin saya pernah menggunakan filter sebelumnya. Seberapa baru itu?JavaScript (ES7), 89 byte
Mengembalikan daftar daftar digit (sebagai karakter), atau daftar kosong jika n> 10 .
Cobalah online!
Bagaimana?
Kami pertama-tama menghasilkan daftar semua digit desimal sebagai karakter dengan menghitung 2 29 = 536870912 , menambahkan '4' yang hilang dan memisahkan:
Kami kemudian menghitung Powerset:
Akhirnya, kami memfilter hasil menurut panjangnya:
sumber
Python 3 , 57 byte
Cobalah online!
Temukan semua kombinasi
0 .. 9
panjangl
.Perilaku untuk
n > 10
daftar kosong.sumber
Bahasa Wolfram (Mathematica) , 22 byte
Cobalah online!
sumber
Python 2 , 62 bytes
Mengembalikan serangkaian string.
Cobalah online!
sumber
Pyth, 4 byte
Coba di sini
Penjelasan
sumber
R , 17 byte
Cobalah online!
Kesalahan untuk input lebih besar dari
10
.Mengembalikan di
matrix
mana setiap kolom adalah PIN.sumber
Ruby , 30 byte
Cobalah online!
sumber
MATL , 6 byte
Cobalah online!
Tidak menghasilkan apa-apa (array kosong) untuk
k>10
.sumber
Haskell ,
5650 byte-6 byte berkat Hat Wizard .
Cobalah online!
sumber
Java (JDK 10) , 105 byte
Cobalah online!
sumber
Haskell , 47 byte
Cobalah online!
Penjelasan
Ketika jumlah digit nol, hanya ada satu kombinasi, yaitu yang kosong:
Ketika jumlah digit
n
dann/=0
kombinasinya adalah semua cara untuk menambahkan digit ke kombinasinyaf$n-1
sehingga tidak ada digit yang ditambahkan ke kombinasi yang sudah mengandungnya.sumber
Gaia ,
43 byteCobalah online!
Sudah lama sejak saya memposting jawaban di Gaia! Terima kasih kepada Tn. Xcoder karena telah menghemat satu byte!
sumber
@
.Retina ,
5136 byteCobalah online! Tidak menghasilkan apa-apa untuk
n>10
. Penjelasan:Ganti input dengan 10
_
dtk.Ulangi sisa program
n
.Awali setiap angka dengan
_
diulang sesuai dengan digit pertama.Cocokkan semua
_
, tetapi sertakan semua yang berikut ini_
di dalam pertandingan juga, untuk itu kami harus mengaktifkan pertandingan yang tumpang tindih.Untuk setiap
_
ditemukan, awali angka_
s ke kiri ke angka.Ini agak rumit jadi mungkin kasus yang sebenarnya akan lebih baik. Misalkan kita sudah menjalankan loop dua kali, sehingga semua PIN 2 digit telah dibuat, dan saat ini kami sedang mengerjakannya untuk membuat PIN 3 digit. Kita akan melihat apa yang terjadi pada
36
: Digit pertama adalah3
, jadi tiga_
s diawali, untuk dibuat___36
. Ini kemudian menciptakan kecocokan berikut, ditandai di sini dengan`'
s:$%'
evalutes ke36
dalam semua tiga kasus, menghasilkan 3 digit PIN036
,136
dan236
.Jika kami kemudian membuat PIN 4 digit, maka
036
tidak akan ada_
awalan, dan karenanya tidak akan menghasilkan kecocokan sama sekali dalam hasil akhir.sumber
^0
dan¶
dengan biaya 5 byte.Proton , 43 byte
Cobalah online!
Proton akhirnya mengungguli Python: DI pikir
(import itertools)
akan mengembalikan nilai tetapi ternyata saya gagal. Juga mengimpor*
setelah itu tidak berfungsi karena tidak ada dalam lambda, itu adalah ekspresi tingkat atas.sumber
Japt, 5 byte
Output array array digit. Keluarkan semua kombinasi jika inputnya
0
atau array kosong jika inputnya<0
atau>10
.Cobalah
Penjelasan
sumber
Stax , 4 byte
Cobalah online!
Vd
adalah"0123456789"
.,
mendorong input ke tumpukan utama.S
mendapat kombinasi ukuran yang ditentukan.Di tautan tio,
m
digunakan di footer untuk mencetak setiap output.sumber
Standar ML ,
124122121 byteCobalah online! Contoh penggunaan:
!2
hasil[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[1,0],[1,2],[1,3], ...]
.Tidak Terkumpul:
Beberapa alternatif:
125123 byteCobalah online! Menentukan fungsi anonim yang terikat
it
.127124 byteCobalah online!
sumber
JavaScript (Node.js) , 53 byte
Cobalah online!
sumber
Oracle 18 SQL, 169 byte
Bukan bahasa golf tetapi:
Diharapkan input berada dalam tabel
i
dengan koloma
:Cobalah online di Oracle Live SQL (diperlukan login gratis lalu salin-tempel solusi ke lembar kerja) atau SQLFiddle (tidak ada login tetapi membutuhkan +7 byte untuk bekerja pada versi Oracle yang lebih rendah).
sumber
CJam ,
1311 byteCobalah online!
Secara teknis tidak berjalan pada tio.run, karena ruang tumpukan habis. Namun, ini berfungsi dengan baik untuk keypad keypad hingga 9 digit, dan harus berjalan baik dengan lebih banyak RAM.
Disimpan 2 byte berkat Dennis
sumber
Bash ,
11399 byteCobalah online!
sumber
r 0
tidak bekerjar
adalah fungsi rekursif: itu tidak dimaksudkan untuk diluncurkan dengan hanya 1 parameter.p 0
perilaku tidak ditentukan dalam pertanyaan.JavaScript (Firefox 30-57), 67 byte
Port jawaban Retina saya, tetapi berfungsi
n=0
juga (mengembalikan daftar string kosong, berbeda dari daftar kosong untukn>10
).sumber
Arang , 21 bytes
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Dorong string kosong ke daftar yang telah ditentukan.
Ulangi setiap digit.
Tambahkan digit ke setiap string dalam daftar.
Tambahkan hasilnya ke daftar asli.
Cetak semua string dengan jumlah digit yang benar.
sumber
Perl 6 , 20 byte
Cobalah online!
Inilah tepatnya
combinations
(untuk subrutin atau.combinations
pada daftar).https://docs.perl6.org/routine/combinations
sumber
J , 32 byte
.. dengan frustrasi lebih lama dari Mathematica dan R
f=:{[:(#@>"0]/.])[:<@I.@#:@i.2^]
TIOsumber