Menghitung di basis kata sifat 62


20

Tugasnya adalah untuk menghasilkan semua string dari 'a' ke '999' termasuk karakter huruf besar seperti:

'a', 'b', 'c' ... 'y', 'z', 'A', 'B', 'C' ... 'Y', 'Z', '0', '1', 2' ... 
'8', '9', 'aa', 'ab', 'ac' ... 'az', 'aA', 'aB' ... 'aZ', 'a0' ... 'a9', 'ba'

dan seterusnya (mengisi celah), secara opsional dimulai dengan string kosong.

Memasukkan:

  • Jumlah karakter berurutan yang harus dicetak oleh program.

Keluaran:

  • Array yang berisi setiap string ATAU satu string per baris

Klarifikasi:

  • Urutan tidak penting, Anda dapat mencetak huruf besar atau kecil terlebih dahulu jika Anda mau.

  • Output dapat mengembalikan semua jenis enumerable, tidak harus berupa array khusus, meskipun saya ragu mencetak semua kombinasi tidak akan menjadi cara termudah untuk pergi.

  • Input 3akan mencetak semua string dari 'a'(atau '') ke '999'‚input 5hingga '99999'dan seterusnya.


Apa yang Anda maksud dengan menghasilkan array?
frederick

Jadi hanya huruf dan angka? Pesanan apa yang Anda gunakan? Dalam ASCII angka datang pertama, kemudian huruf besar, huruf kecil
Luis Mendo

Seorang enumerable yang berisi semua nilai yaitu ['a', 'b', 'c' ..]. Anda harus melihat output pada setiap baris melalui STDOUT atau dapat menetapkannya melalui a = (function return).
Simon Landry

1
@ edc65 Seperti yang saya pahami, input adalah jumlah karakter maksimum untuk digabungkan. Jadi untuk input 4, Anda beralih dari ake 9999, untuk 5 ake 99999, dan seterusnya.
Alex A.

3
OK, terima kasih sudah menjelaskannya. Itu menghemat banyak byte. :) Saya pikir judul saat ini agak membingungkan karena Anda tampaknya membutuhkan basis bijective 62.
Dennis

Jawaban:


13

Jelly , 7 byte

ØWṖṗR;/

Ini adalah tautan monadik yang menerima integer sebagai input dan mengembalikan array string.

Cobalah online!

Bagaimana itu bekerja

ØWṖṗR;/  Main link. Argument: n

ØW       Yield 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'.
  Ṗ      Remove the last element (underscore).
    R    Range; yield [1, ..., n].
   ṗ     Cartesian product. For each k in the range, this yields the arrays of all
         strings of alphanumeric characters.
     ;/  Concatenate the arrays of strings of each length.

1
Saat menulis bahasa Anda sendiri untuk codegolf, tidak bisakah Anda hanya memotongnya, memodifikasinya dan menggunakan solusi 1 byte?
Florian Wendelborn

9
Tidak. Kami memiliki aturan ketat untuk bahasa pemrograman yang dapat diterima, dan satu adalah bahwa penerjemah yang bekerja harus sudah ada sebelum tantangan dipasang. Saya bisa menambahkan built-in untuk tugas ini sekarang, tetapi saya bisa menggunakannya hanya dalam tantangan di masa depan.
Dennis

8
Bagaimana itu konyol? Jika diizinkan, setiap tantangan akan diselesaikan dengan 1 byte
Zibelas

7
@UncleZeiv halaman kode Jelly ditautkan dalam judul tulisan
edc65

7
@UncleZeiv Hanya ada satu set karakter yang melakukannya, yaitu halaman kode Jelly.
isaacg

8

Haskell, 65 byte

a#b=[a..b]
k n=mapM id.('a'#'z'++'A'#'Z'++'0'#'9'<$)=<<(1#)<$>1#n

Contoh penggunaan: k 3-> ["a","b","c",....,"997","998","999"].

Bagaimana itu bekerja

a#b = [a..b]        -- helper function that builds a list from a to b


        (1#n)<$>    -- map the function (1#), i.e. "build the list from 1 up to" 
                1#n -- on the list from 1 to n

                    -- now we have [[1],[1,2],[1,2,3]]

              =<<   -- map over this list (and combine results in a single list)
  (        <$)      -- a function that makes length of input copies of
 'a'#'z'++ ... '9'  -- all characters we need

                    -- now we have [["a..9"],["a..9","a..9"],["a..9","a..9","a..9"]]

mapM id.            -- and make the cartesian product of each sublist 

5

Python, 86 byte

f=lambda n:n*[1]and[x+chr(y)for x in['']+f(n-1)for y in range(128)if chr(y).isalnum()]

Menghasilkan daftar string yang tidak kosong. Secara rekursif mengubah setiap karakter alfanumerik ke setiap output untuk n-1dan string kosong.


5

JavaScript (Firefox 30-57), 108 byte

f=n=>n?[for(s of['',...f(n-1)])for(c of(t='abcdefghijklmnopqrstuvwxyz')+t.toUpperCase()+'0123456789')s+c]:[]

Disimpan 3 byte dengan menggunakan toUpperCase. Menghitung 62 karakter membutuhkan tambahan 10 byte.


4
Saya tidak bisa membuat kode Anda berfungsi, kata fungsi f tidak terdefinisi.
Simon Landry

1
@SimonLandry Whoops, saya lupa f=di awal. (Saya selalu lupa melakukan itu untuk jawaban berulang.)
Neil

Tidak berfungsi karena alasan di atas.
CalculatorFeline

@CatsAreFluffy Saya masukkan f=, masalah lebih lanjut adalah karena cara Anda mencoba menyebutnya.
Neil

4

Cinnamon Gum, 15 byte

0000000: 689b b718 05be a345 9c4b c283 d077 de    h......E.K...w.

Tidak cukup singkat, meskipun ini adalah jenis tantangan yang tepat, Cinnamon Gum dibuat untuk :(

Dikompresi dengan mengonversi dari bijective base 96 ke base 256. Cobalah secara online. Input lebih besar dari 2 akan menyebabkan masalah pada TIO.

Penjelasan

Ini didekompresi ke regex [a-zA-Z0-9]{1,%s}. The hmodus kemudian mengganti input ke %sdan output semua string yang cocok regex.


4

Ruby, 82 byte

Bangun produk kartesius dari karakter yang diatur hingga panjang yang diberikan. Set karakter dihasilkan dengan mengambil semua karakter di antara 0dan zdan menyaring karakter non-kata dan juga _.

->n{a=(?0..?z).grep(/\w/)-[?_];r=[]
n.times{|i|r+=a.product(*[a]*i).map &:join};r}

4

05AB1E , 9 8 byte

Kode:

ƒžj¨Nã€,

Penjelasan:

ƒ          # For N in range(0, input + 1), do:
 žj        #   Push predefined literal [a-zA-Z0-9_]
   ¨       #   Remove the last character (the underscore)
    N      #   Push N
     ã     #   Take the Cartesian product, with N repetitions.
      €,   #   For each element in the array, print with a newline

Menggunakan pengodean CP-1252 . Cobalah online! .


4

Python 2.7, 136 134 byte

Terima kasih kepada Maltysen dan NonlinearFruit karena telah menghemat 2 byte

from itertools import*;from string import*;f=lambda n:[''.join(a) for i in range(1,n+1) for a in product(ascii_letters+digits,repeat=i)]

Mengambil ascii_lettersdan digitsdari modul string dan menggunakan Produk Cartesian sebagai productdari itertools untuk menghitung semua kombinasi.

Keluaran

out = f(3)

print out[:10]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

print out[100:110]
['aM', 'aN', 'aO', 'aP', 'aQ', 'aR', 'aS', 'aT', 'aU', 'aV']

print out[-10:]
['990', '991', '992', '993', '994', '995', '996', '997', '998', '999']

1
Anda dapat menghapus spasi antara tanda kurung dan huruf.
Maltysen

Coba i in range(n)denganrepeat=i+1
NonlinearFruit

+1 untuk input negatif. Apakah itu tertanam dalam rangefungsi?
Kevin Cruijssen

3

Pyth - 13 12 byte

1 byte disimpan berkat @Jakube.

sm^s+rBG1UTh

Cobalah online di sini .

s                    Add up the lists of different lengths  
 m          (Q)      Map implicitly over input
  ^     h(d)         Cartesian product of string to implicit lambda var + 1
   s                 Add up list
    ++               Concat up three things
     G               Alphabet
     rG1             Uppercase alphabet
     UT              All digits

Yang bagus! Mau memberikan penjelasan?
Simon Landry

Saya pikir ada perintah untuk beralih melalui string dalam urutan leksikografis?
Leaky Nun

@ KennyLau nvm, tidak melakukan angka.
Maltysen

rBG1simpan satu byte lebih+GrG1
Jakube

@ Jakube oh, Bifurcate berfungsi dengan argumen? Terima kasih.
Maltysen

3

Python 2, 106 97 byte

from string import*
f=lambda n,r=['']:n and r+f(n-1,[x+y for x in r for y in letters+digits])or r

Cobalah di Ideone .


Punya ide yang hampir sama, tetapi beberapa byte lagi ...
Byte Commander

Wow 2 jawaban dari Anda @ Dennis, Anda membunuhnya! :)
Simon Landry

2

MATL , 12 byte

:"3Y24Y2h@Z^

Ini mengambil angka sebagai input.

Cobalah online!

Penjelasan

:       % Implicitly take input, say N. Generate range [1 2... N]
"       % For each number in that range
  3Y2   %   Predefined literal: string with all letters, uppercase and lowercase
  4Y2   %   Predefined literal: string with all digits
  h     %   Concatenate horizontally
  @     %   Push number of characters corresponding to current iteration
  Z^    %   Cartesian power. Each result is a row 
        % End for each. Implicitly display

1

𝔼𝕊𝕄𝕚𝕟 , 21 karakter / 27 byte

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė)

Try it here (Firefox only).

Nggak. Nggak. Nggak.

Penjelasan

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)ė) // implicit: 
Ⓐïⓜ                    // [...Array(input)].map(($,_)=>...)
    ᵖ                   // push to stack:
     ɱĬ⟦ᶛ+ᶐ+⩤9⨝],⧺_)   // list of n-digit numbers in [a-zA-Z0-9]-ary
                     ė) // formatted into a matrix (no spaces)
                        // implicit stack output, newline-separated

Pertama kali saya melihat bahasa ini dan tidak dapat menemukannya menggunakan Google, mau menambahkan tautan ke dokumentasinya dan (atau) kode sumber? :)
Simon Landry

1
github.com/molarmanful/ESMin
Mama Fun Roll

Apakah nama bahasanya serius 4 spasi?
Bálint

Tidak, tetapi browser Anda mungkin tidak menampilkan karakter doublestruck dengan benar. Di ASCII, itu disebut ESMin.
Mama Fun Roll

1

Perl, 113 byte + spasi putih

@r="";
for (1..shift) {
  @r = sub {
    map { $c=$_; map $c.$_, @{$_[1]} } @{$_[0]}
  }->(\@r, [0..9, "a".."z", "A".."Z"])
}
map say($_), @r

Gunakan "perl -E" di atas, dengan argumen yang merupakan angka. Saya mungkin bisa dengan sopan belum menghitung "peta katakan" terakhir dalam hitungan karakter.


1

J, 50 byte

62&(('0123456789',~(,toupper)u:97+i.26){~#~#:i.@^)

Setengah dari byte, tepatnya 25, dihabiskan untuk menghasilkan huruf dan angka yang dibutuhkan.


1

APL, 38 37 byte

{⊃{⍵,,⍺∘.,⍵}/⍵⍴⊂,¨⎕a,⎕d,⍨⎕ucs 96+⍳26}

Saya harus bertanya, bagaimana cara menyiasati jika mereka tidak bisa KOMUTE? (⎕ucs 96+⍳26),⎕d=>⎕d,⍨⎕ucs 96+⍳26
Zacharý

Saya dapat meyakinkan Anda bahwa saya dapat bepergian (tidak berbicara tentang "melakukan perjalanan yang sama secara teratur antara kerja dan rumah", karena itu membosankan). Anda tampaknya telah menemukan bahwa memperbaiki solusi orang lain dapat dengan mudah. Terutama jika Anda tidak memiliki pekerjaan penuh waktu. Lalu ada kehidupan nyata yang membuat segalanya lebih sulit ...
lstefano

0

Utilitas Bash + GNU, 90

printf -vs %$1s
eval printf '%s\\n' ${s// /{=,{a..z\},{A..Z\},{0..9\}\}}|sed s/^=*//\;/=/d

Input sebagai parameter baris perintah. Output adalah daftar yang dipisahkan oleh spasi.

Bekerja untuk input upt dan termasuk 3. Kehabisan memori dengan 4 - eval printfmengambil seluruh rangkaian elemen 63 n dari ekspansi bash.


0

Utilitas Bash + GNU, 66

Pendekatan berbeda (dan saya pikir sedikit baru) untuk jawaban saya yang lain :

dc -e"64 $1^[d2 48^r-P1-d0<m]dsmx"|base64 -w8|sed s_^/*__\;/[+/]/d
  • dcmenghitung mundur dari 2 48 -1 hingga 2 48 -64 n dan Pmemotong setiap angka yang dihasilkan sebagai bytestream (yaitu basis 256). Jika input antara 1 dan 4 inklusif, ini dijamin tepat 6 byte per angka.
  • base64 mengubahnya menjadi output base64 dan dengan demikian 8 byte per base64 digit, satu byte per baris.
  • sedstrips off memimpin /(base64 digit 63), dan kemudian menghapus garis yang mengandung +atau /(base64 digit 62 dan 63). Ini meninggalkan urutan yang diperlukan.

0

R , 73 byte

y='';x=c(letters,LETTERS,0:9);for(i in 1:scan())cat(y<-outer(y,x,paste0))

ydimulai sebagai string kosong, xsebagai alas 'a','b','c',...,'8','9'. outermengambil setiap argumen inputnya, dan menerapkan fungsi tersebut paste0untuk setiap kombinasi elemen diy dan xyang menggabungkan string. ymenyimpan hasilnya, catmencetaknya, dan iterates melalui STDIN beberapa kali melakukan ini.

Cobalah online!


0

Jq 1.5 , 97 byte

range(.)as$n|[[range(97;123),range(65;91),range(48;58)]|implode/""|combinations($n+1)]|map(add)[]

Diperluas

  range(.) as $n           # for each n-digit sequence
| [
      [                    # build array of ordinals for
        range(97;123),     #   a-z
        range(65;91),      #   A-Z
        range(48;58)       #   0-9
      ]
    | implode/""           # make into array of strings
    | combinations($n+1)   # generate array of n-element combinations
  ]
| map(add)[]               # convert to sequence of strings

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.