Dengan serangkaian karakter yang berbeda, dan angka n, buat semua kombinasi berurut dengan pengulangan, dengan panjang 1 hingga n, menggunakan karakter tersebut.
Cara lain untuk mendefinisikannya adalah dengan melihat karakter yang diberikan sebagai digit "kustom" di pangkalan (radix) dari jumlah karakter, maka program harus menghasilkan semua "angka" dengan 1 hingga n digit di pangkalan itu, namun, memimpin "Nol" juga disertakan.
Kombinasi harus dipesan berdasarkan panjangnya (1 karakter pertama, kemudian 2, dll), tetapi selain itu mereka dapat dalam urutan apa pun. Anda dapat memilih cara yang paling mudah untuk menangani input dan output. Kode terpendek menang.
Contoh:
ab, 3
-> a,b,aa,ab,ba,bb,aaa,aab,aba,baa,abb,bab,bba,bbb
0123456789, 2
->0,1,2,3,4,5,6,7,8,9,00,01,...,09,10,11,...,99
sumber
Jawaban:
APL (Dyalog Unicode) , 13 byte SBCS
Cobalah online!
jangan pernah melewatkan kesempatan untuk menggunakan pemindaian :)
meminta string "digit" dan kemudian untuk
n
terima kasih @ Adám karena memberi tahu saya cara mengaktifkan
]box
di TIOsumber
Python 2, 56 byte
n
adalah panjang maksimum dans
diharapkan menjadi daftar karakter. Tidak jelas bagi saya apakah n = 0 atau daftar karakter kosong adalah input yang valid, tetapi fungsi ini juga menanganinya dengan benar.sumber
J, 41 char
sumber
APL (31)
Penggunaan: argumen kiri adalah string dan argumen kanan adalah angka, seperti:
Outputnya dipesan berdasarkan panjang, tetapi dalam grup panjang mereka digeser satu ke kiri, ini paling mudah.
Penjelasan:
,/⍺∘{
...}¨⍳⍵
: for 1..⍵, terapkan fungsi untuk ⍺ dan gabungkan hasilnya bersama-sama.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: untuk setiap angka dari 1 hingga (⍵ = (panjang saat ini)) ^ (⍴⍺ = (jumlah karakter)), konversikan ke basis ⍴⍺ menggunakan ⍵ digit.1+
: tambahkan satu karena array 1-diindeks.⍺[
...]
: gunakan ini sebagai indeks ke dalam string↓⍉
: putar matriks, jadi 'angka' ada di baris, bukan di kolom, lalu pisahkan matriks dengan baris.sumber
?!/\-+*~&=,.|
dan mungkin lebih. Ada pengkodean APL byte tunggal tetapi Unicode lebih mudah digunakan.Haskell, 34 karakter
Penggunaan langsung daftar monad. Satu-satunya golf nyata adalah penggunaan
mapM
alih-alih yang lebih idiomatis (dan lebih pendek)replicateM
yang akan membutuhkan imporControl.Monad
.Pemakaian
sumber
Python,
9794t=t+[s]
tidak dapat disingkat menjadit+=[s]
karena L dan t akan menunjuk ke daftar yang sama.Memasukkan:
'ab', 3
Keluaran:
sumber
Mathematica
29 1928Pemakaian
sumber
MATL,
98 byteCobalah di MATL Online!
(MATL dibuat setelah tantangan ini diposting, tetapi saya percaya itu tidak masalah dengan meta konsensus hari ini.)
(-1 byte, terima kasih kepada @Luis Mendo.)
x
- hapus input string dari stack (secara otomatis menyalinnya ke clipboard G):"
- input implisit dari angka n, loop dari 1 ke n1G
- Tempel kembali string input dari clipboard G pada stack@
- dorong indeks iterasi loop saat iniZ^
- cartesian power: produk cartesian input dengan sendirinya@
beberapa kaliHasil daya kartesian (
@
-digit "angka" di dasar yang diberikan) diakumulasikan pada stack dan secara implisit ditampilkan di akhir.sumber
x:"1G@Z^
Python - 106
Solusi langsung dan tidak kreatif. Jika Anda menemukan peningkatan yang signifikan, silakan kirim sebagai jawaban terpisah.
Input:
"ab",3
Keluaran:
sumber
Python, 100
Berasal dari solusi @ aditsu .
Memasukkan:
'ab', 3
Keluaran:
sumber
Perl 5 +
-nlF -M5.010 -MList::Util+(uniq)
, 41 byteCobalah online!
-1 byte terima kasih kepada @Xcali !
sumber
Pyth, 6 byte
Mengharapkan set karakter sebagai input 1, jumlah digit sebagai 2. Byte dapat disimpan jika ada metode byte tunggal untuk berulang kali mengakses input ke-2, tetapi sayangnya ...
Cobalah online di sini .
sumber
Perl 6 , 33 byte
Cobalah online!
Blok kode anonim yang mengambil string dan angka dan mengembalikan daftar string.
sumber
PHP 180
Saya tidak tahu ... Saya merasa malas.
sumber
Erlang 110
Versi kombinator Y (untuk shell):
sumber
Erlang 89 (118)
Versi modul:
Karakter dihitung tanpa pembukuan wajib (modul dan ekspor).
sumber
Ruby , 73 byte
Cobalah online!
sumber
Japt , 9 byte
Penjelasan untuk diikuti.
Cobalah
Cobalah
sumber
Jelly , 6 byte
Cobalah online!
Pengajuan fungsi, mengambil daftar digit sebagai argumen pertama dan jumlah digit sebagai argumen kedua. Digit itu sendiri dapat berupa tipe data Jelly apa pun, tetapi saya menggunakan bilangan bulat di tautan TIO di atas karena menghasilkan output yang paling baik dalam pembungkus otomatis “function → full program” Jelly.
Penjelasan
Produk Cartesian secara efektif memberi kita semua angka dengan jumlah digit tertentu (sesuai dengan awalan yang sedang kita kerjakan). Jadi kita berakhir dengan daftar daftar kombinasi (dikelompokkan berdasarkan panjang), dan dapat meratakan yang satu tingkat untuk mendapatkan daftar yang tidak dikelompokkan (tapi yang masih diurutkan oleh panjang, sebagai pertanyaan memerlukan, sebagai
Ẏ
doesn dapat mengubah urutan relatif elemen danƤ
mencoba awalan yang lebih pendek terlebih dahulu).sumber
05AB1E , 6 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Alternatif 6-byte:
CATATAN: Keluaran fleksibel: Menampilkan daftar baru untuk setiap panjang, semua pada jalur cetak yang sama.
Mengubahnya ke daftar tunggal akan menjadi 2 byte lebih lama:
Lv²yã`})
( Coba online ).Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
K (ngn / k) , 17 byte
Cobalah online!
sumber