O programa deve imprimir todas as combinações de letras (minúsculas ou maiúsculas, não importa) em ordem alfabética. Ele deve começar com a
e a última combinação impressa deve ser password
.
A saída deve ser:
a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ... passwora passworb passworc password
Respostas:
Perl, 19 caracteres
Usa novas linhas como delimitadores, conforme esclarecimento acima. Execute com
perl -M5.010
(ou apenasperl -E 'say for a..password'
) para ativar o Perl 5.10+say
recurso . Por meta , isso não conta como caracteres extras.(Se você insiste em espaços como delimitadores,
$,=$";say a..password
é apenas dois caracteres a mais. No entanto, também é muito lento e desperdício de memória, a ponto de ser inutilizável na prática, pois ele tenta criar a lista inteira na memória antes de imprimi-la.)fonte
Ruby, 33 caracteres (versão ideal, mas mais longa)
Eu gosto do
'a'.upto('password')
; diz exatamente o que está fazendo. Ruby é ótimo e expressivo assim.:D
Claro,
print c,' '
também seria muito mais claro, mas usar$>
é dois caracteres menor.Ruby,
2925 caracteres (versão lenta)Este é mais curto, mas imprime todos os tokens de uma só vez, por isso leva muito, muito tempo para ser executado!
fonte
(?a..'password').to_a
pode ser reduzido para[*?a..'password']
Perl,
333224 caracteresUma solução em 32 caracteres:
Não há muito a dizer sobre este. Eu poderia reduzir isso para 27 caracteres se pudesse usar novas linhas em vez de espaços para separar as entradas.
Ilmari Karonen ressalta que
..
chamadas internamente++
, portanto, uma solução melhor (25 caracteres) seria:Aproveitando as opções de linha de comando do Perl, aqui está uma solução equivalente a 24 caracteres:
As regras para a contagem de sinalizadores perl estão aqui, para aqueles que não estão familiarizados com eles.
Obviamente, a solução de 21 caracteres da Ilmari ainda é mais curta, mas requer uma máquina que possa alocar uma matriz de 129.052.722.140 strings.
fonte
.$"
vez de," "
salvar um personagem, não seria ?Perl 6, 20 caracteres
Você não precisa de outras coisas
fonte
Python 2, 91
fonte
PHP
38.37.36 caracteresVocê deve definir a codificação para ISO 8859-1 e desativar os avisos.
fonte
$w
é inicialmente definida como 'a' e depois é incrementada até atingir o primeiro valor após 'senha' (a última sequência não é impressa).for
loop regular . Não há nada de estranho nesse código, exceto os dois últimos caracteres, que são um espaço em branco invertido em bits. Enfim, sim, eu testei até uma palavra mais curta.passwoqs
atépassword
. Como a codificação do codepad não é ISO 8859-1, tive que substituir~ß
por um espaço em branco.$w<passwore
no lugar de$w!=passwore
.Ruby (40 caracteres)
Interprete uma sequência de letras az como um número na base 26, com a = 1, b = 2, ..., z = 26.
Portanto, "senha" pode ser pensada como o número N =
Se deixarmos
s = "a"
(isto é: 1) e fizermos (N-1) chamadas paras.succ!
, s será"password"
(N). Em outras palavras, N = 1 + (N-1).Para um exemplo que será executado mais rapidamente, para provar que o cálculo de N está correto, considere
"pass"
como o destino, onde N ée
Como também queremos imprimir
"a"
, precisamosEntão, volte para a "senha" completa.
N = 129052722140
, deixando:Eu procurei por uma forma mais compacta,
129052722140 == 0x1e0c2443db
mas não consegui encontrar uma.(Atualizado para corrigir a falta de impressão
"a"
, graças a Cary.)fonte
N
vez deN-1
nas iterações! Obrigado, vou editar para corrigir. (Embora 129052722140 é um número interessante Google :).)s=?a
,s.succ!
começa em 'b' '.s=?a
eN-1
você obtém 'b c ... password'; coms =
<backtick> eN
você obtém 'a b ... senha'. O SO solicitou a saída para começar'a'
. Isso é tudo.Javascript, 73
Aqui está uma versão com 73 caracteres do código @Briguys ', que imprime apenas combinações de letras
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
fonte
APL (Dyalog),
4634Teoricamente, ele seria impresso até PASSWORD, mas encontrei um erro completo no espaço de trabalho após o ZZZZ: o array 5-dimensional ser impressionante demais.
Edição: Deve ter sido muito tempo desde a última vez que brincou com APL. Como ouso perder a comparação de identidade (
≡
) !!!Explicação
{...}
: Declara uma função que ...⎕A∘.,⍵
: Leva o produto externo à concatenação (todas as combinações de um elemento do operando esquerdo concatenam com um elemento do operando direito, exatamente como o produto cartesiano) entre as 26 letras maiúsculas (⎕A
) e o argumento (⍵
){...}¨
: E para cada elemento do conjunto resultante, conecte-o a uma função que ...⍞←⍵
: imprima'PASSWORD '≡
e compare com'PASSWORD '
→
: Se a comparação retornar true (1
), aborte o programa.⍵
: Caso contrário, retorne a sequência impressa.∇
: Finalmente, a função externa se recupera.(Então, você concederá um produto externo à concatenação entre o alfa 26 e o 26 alfa, que fornece todas as combinações de duas letras, e depois o produto externo concatenará entre as combinações de duas letras e o alfa 26, etc ... Até que você alcançar PASSWORD que aciona a interrupção)
' '
: A faísca !! Isso inicia a função recursiva com o caractere de espaço.fonte
Python 2 -
153 152 151149 bytesSalvo um byte usando UPPERCASE e outro usando novas linhas em vez de espaços.
fonte
Golfscript 41
Por falta de
'z'+1 == 'aa'
lógica, o Golfscript não pode vencer este.168036262484,
criar matriz de 0 a 168036262483(;
largar o 0{
..}%
itere sobre a matriz27base
converter elemento para matriz base 27{96+}%
adicione 96 a cada dígito' '+
converter em string e adicionar um espaço até o final.96?0<*
truncar string para zero se contiver char 96fonte
Em Ruby,
3940...ou
129052722140
. (Edit: anteriormente eu tinha129052722
. Eu tinha perdido alguns dígitos cortando e colando. Hex anterior (0x7B13032
) era para número incorreto.). Emprestadoa=?`
do @Doorknob para salvar um personagem.fonte
a=?`
coisa, parece meio estranho e tem um espaço extra no final, mas pelo menos ele funciona: PORD_BASE_ASCII = 'a'.ord-1; def nbr(word); len = word.size; word.split('').inject(0) {|t,c| offset = c.ord - ORD_BASE_ASCII; t + offset*(26**(len -= 1))}; end
É fácil confirmar que isso está correto, apenas imprimindo algumas seqüências.Javascript:
5756 caracteres (obrigado C5H8NNaO4)Aqui está uma solução que inclui números como caracteres possíveis ("0", "1", "2", .., "passwor9", "passwora", "passworb", "passworc", "password")
Aqui está um teste para testar (com apenas as últimas 100 iterações para não bloquear o navegador).
fonte
print every **letter** combination
De qualquer forma, salvar um personagem:{} -> ;
Haskell, 101
fonte
Befunge (72)
Imprime as seqüências de caracteres 'a' em 'senha' separadas por espaços e sai.
Abaixo está uma versão que imprime apenas as primeiras 9 * 9 = 81 palavras ('a' a 'dd'), para comparação. O
99*
é o número de iterações a serem executadas.fonte
JavaScript
8076violino - para em "pa".
no entanto, isso repete as coisas.
fonte
i=s=0
para salvar mais três caracteres.var
?i
era global antes; agoras
é global. Você pode manter os dois globais no código de golfe, normalmente.