Conteggio nella base biiettiva 62


20

Il compito è generare tutte le stringhe da "a" a "999", inclusi i caratteri maiuscoli in questo modo:

'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'

e così via (riempiendo gli spazi vuoti), iniziando facoltativamente con la stringa vuota.

Ingresso:

  • La quantità di caratteri consecutivi che il programma deve stampare fino a.

Produzione:

  • Un array contenente ciascuna stringa O una stringa per riga

chiarimenti:

  • L'ordine non ha importanza, puoi stampare prima lettere maiuscole o minuscole se lo desideri.

  • L'output può restituire qualsiasi tipo di enumerabile, non deve essere un array specifico, anche se dubito che stampare tutte le combinazioni non sia il modo più semplice di procedere.

  • Un input di 3stampa tutta la stringa da 'a'(o '') a '999'‚un input 5fino a '99999'e così via.


Cosa intendi per emissione di un array?
Federico,

Quindi solo lettere e numeri? Che ordine usi? Nei numeri ASCII vengono prima le lettere maiuscole, poi le lettere minuscole
Luis Mendo,

Un enumerabile contenente tutti i valori, ad esempio ['a', 'b', 'c' ..]. Dovresti vedere l'output su ciascuna riga tramite STDOUT o essere in grado di assegnarlo tramite a = (function return).
Simon Landry,

1
@ edc65 A quanto ho capito, l'input è il numero massimo di caratteri da combinare. Quindi per l'ingresso 4, vai da aa 9999, per 5 è aa 99999, e così via.
Alex A.

3
OK, grazie per averlo chiarito. Ciò ha risparmiato molti byte. :) Penso che l'attuale titolo sia un po 'confuso poiché sembra che tu abbia bisogno della base biiettiva 62.
Dennis

Risposte:


13

Gelatina , 7 byte

ØWṖṗR;/

Questo è un collegamento monadico che accetta un numero intero come input e restituisce una matrice di stringhe.

Provalo online!

Come funziona

Ø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
Quando scrivi la tua lingua per codegolf, non potresti semplicemente fork, modificarlo e utilizzare una soluzione da 1 byte?
Florian Wendelborn,

9
No. Abbiamo regole rigide per i linguaggi di programmazione ammissibili, e uno è che un interprete funzionante deve esistere prima che la sfida fosse pubblicata. Potrei aggiungere un built-in per questo compito ora, ma potrei usarlo solo nelle sfide future.
Dennis,

8
Com'è ridicolo? Se fosse consentito, ogni sfida sarebbe risolta con 1 byte
Zibelas,

7
@UncleZeiv la code page Jelly è collegata nel titolo del post
edc65

7
@UncleZeiv C'è davvero solo un set di caratteri che lo fa, che è la tabella codici Jelly.
isaacg,

8

Haskell, 65 byte

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

Esempio di utilizzo: k 3-> ["a","b","c",....,"997","998","999"].

Come funziona

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()]

Emette un elenco di stringhe non vuote. Antepone ricorsivamente ogni carattere alfanumerico a ciascun output per n-1e stringa vuota.


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]:[]

Salvato 3 byte utilizzando toUpperCase. Il calcolo dei 62 caratteri mi richiede altri 10 byte.


4
Non riesco a far funzionare il tuo codice, dice che la funzione f non è definita.
Simon Landry,

1
@SimonLandry Whoops, ho dimenticato f=all'inizio. (Dimentico sempre di farlo per risposte ricorsive.)
Neil

Non funziona per i motivi sopra.
CalculatorFeline

@CatsAreFluffy L'ho inserito f=, ulteriori problemi sono dovuti al modo in cui stai cercando di chiamarlo.
Neil,

4

Gomma alla cannella, 15 byte

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

Non abbastanza breve, nonostante questo sia il tipo esatto di sfida per cui è stata fatta la Cinnamon Gum :(

Compresso convertendo dalla base biiettiva 96 alla base 256. Provalo online. Gli ingressi maggiori di 2 causeranno problemi su TIO.

Spiegazione

Questo si decomprime alla regex [a-zA-Z0-9]{1,%s}. La hmodalità sostituisce quindi l'ingresso in %se genera tutte le stringhe corrispondenti al regex.


4

Rubino, 82 byte

Costruisce prodotti cartesiani del personaggio impostato alla lunghezza data. Il set di caratteri viene generato afferrando tutti i caratteri tra 0e ze filtrando anche i caratteri non di parole _.

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

4

05AB1E , 9 8 byte

Codice:

ƒžj¨Nã€,

Spiegazione:

ƒ          # 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

Utilizza la codifica CP-1252 . Provalo online! .


4

Python 2.7, 136 134 byte

Grazie a Maltysen e NonlinearFruit per aver salvato 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)]

Prende ascii_letterse digitsdal modulo stringa e utilizza il prodotto cartesiano come productda itertools per calcolare tutte le combinazioni.

Produzione

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
è possibile rimuovere gli spazi tra parentesi e lettere.
Maltysen,

Prova i in range(n)conrepeat=i+1
NonlinearFruit

+1 per l'ingresso negativo. È integrato nella rangefunzione?
Kevin Cruijssen,

3

Pyth - 13 12 byte

1 byte salvato grazie a @Jakube.

sm^s+rBG1UTh

Provalo online qui .

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

Ben fatto! Vuoi fornire una spiegazione?
Simon Landry,

Ho pensato che ci fosse un comando per scorrere le stringhe in ordine lessicografico?
Leaky Nun,

@KennyLau nvm, non fa numeri.
Maltysen,

rBG1salva un byte sopra+GrG1
Jakube

@Jakube oh, Bifurcate funziona con argomenti? Grazie.
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

Provalo su Ideone .


Aveva quasi la stessa idea, ma qualche byte in più ...
Byte Commander

Wow 2 risposte da te @Dennis, lo stai uccidendo! :)
Simon Landry,

2

MATL , 12 byte

:"3Y24Y2h@Z^

Questo richiede un numero come input.

Provalo online!

Spiegazione

:       % 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 caratteri / 27 byte

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

Try it here (Firefox only).

No. No. No.

Spiegazione

ⒶïⓜᵖɱĬ⟦ᶛ+ᶐ+⩤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

La prima volta che vedo questa lingua e non riesco a trovarla utilizzando Google, ti va di aggiungere un link alla sua documentazione e (o) codice sorgente? :)
Simon Landry,

1
github.com/molarmanful/ESMin
Mama Fun Roll

Il nome della lingua è davvero di 4 spazi?
Bálint,

No, ma il tuo browser potrebbe non visualizzare correttamente i caratteri duplicati. In ASCII, si chiama ESMin.
Mama Fun Roll

1

Perl, 113 byte + spazio bianco

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

Usa "perl -E" sopra, con un argomento che è un numero. Probabilmente avrei potuto decentemente non aver contato l'ultima "mappa dire" nel conteggio dei caratteri.


1

J, 50 byte

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

La metà dei byte, 25 per l'esattezza, viene spesa per generare le lettere e le cifre necessarie.


1

APL, 38 37 byte

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

Devo chiedere, come ci si può aggirare se non si può COMMUTARE? (⎕ucs 96+⍳26),⎕d=>⎕d,⍨⎕ucs 96+⍳26
Zacharý

Posso assicurarti che posso fare il pendolare (senza parlare di "fare lo stesso viaggio regolarmente tra lavoro e casa", perché è noioso). Sembra che tu abbia scoperto che può essere facile migliorare le soluzioni degli altri. Soprattutto se non hai un lavoro a tempo pieno. Poi c'è la vita reale che rende tutto ancora più difficile ...
lstefano il

0

Utilità Bash + GNU, 90

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

Immettere come parametro della riga di comando. L'output è un elenco separato da spazi bianchi.

Funziona con input upt e compresi 3. Esaurire la memoria con 4 - eval printfprende l'intero set di 63 n elementi dell'espansione bash.


0

Utilità Bash + GNU, 66

Approccio diverso (e penso leggermente nuovo) all'altra mia risposta :

dc -e"64 $1^[d2 48^r-P1-d0<m]dsmx"|base64 -w8|sed s_^/*__\;/[+/]/d
  • dcconto alla rovescia da 2 48 -1 a 2 48 -64 n e Prints ciascun numero risultante come bytestream (cioè di base 256). Se l'input è compreso tra 1 e 4 inclusi, questo è garantito per essere esattamente 6 byte per numero.
  • base64 converte questo in output base64 e quindi 8 byte per cifra base64, uno per riga.
  • sedspoglia principale /(base64 cifre, 63), e quindi rimuove le righe che contengono +o /(base64 cifre 62 e 63). Questo lascia la sequenza richiesta.

0

R , 73 byte

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

yinizia come stringa vuota, xcome caso base 'a','b','c',...,'8','9'. outeraccetta ciascuno dei suoi argomenti di input e applica la funzione paste0a ciascuna combinazione di elementi in ye xche concatena le stringhe. ysalva il risultato, lo catstampa e scorre ripetutamente il numero STDIN di questo.

Provalo 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)[]

allargato

  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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.