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.