El programa debe imprimir todas las combinaciones de letras (minúsculas o mayúsculas, no importa) en orden alfabético. Debe comenzar con a
y la última combinación impresa debe ser password
.
La salida debe 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
Respuestas:
Perl, 19 caracteres
Utiliza líneas nuevas como delimitadores, según la aclaración anterior. Ejecute con
perl -M5.010
(o soloperl -E 'say for a..password'
) para habilitar Perl 5.10+say
. Por meta , esto no cuenta como caracteres adicionales.(Si insiste en los espacios como delimitadores,
$,=$";say a..password
solo son dos caracteres más largos. Sin embargo, también es muy lento y desperdicia la memoria, hasta el punto de ser inutilizable en la práctica, ya que intenta construir la lista completa en la memoria antes de imprimirla).fuente
Ruby, 33 caracteres (versión óptima pero más larga)
Me gusta el
'a'.upto('password')
; te dice exactamente lo que está haciendo. Ruby es genial y expresivo así.:D
Por supuesto,
print c,' '
también sería mucho más claro, pero usar$>
es dos caracteres más cortos.Ruby,
2925 caracteres (versión lenta)Este es más corto, pero imprime todas las fichas a la vez, por lo que lleva mucho, mucho tiempo ejecutarlo.
fuente
(?a..'password').to_a
se puede acortar a[*?a..'password']
Perl,
333224 caracteresUna solución en 32 caracteres:
no hay mucho que decir sobre éste. Podría reducir esto a 27 caracteres si pudiera usar nuevas líneas en lugar de espacios para separar las entradas.
Ilmari Karonen señala que
..
internamente llama++
, por lo que una mejor solución (25 caracteres) sería:Al aprovechar las opciones de línea de comandos de Perl, aquí hay una solución equivalente de 24 caracteres:
Las reglas para contar las banderas de Perl están aquí, para aquellos que no están familiarizados con ellas.
Por supuesto, la solución de 21 caracteres de Ilmari es aún más corta, pero requiere una máquina que pueda asignar una matriz de 129,052,722,140 cadenas.
fuente
.$"
lugar de," "
salvar a un personaje?Perl 6, 20 caracteres
No necesitas otras cosas
fuente
Pitón 2, 91
fuente
PHP
383736 caracteresDebe establecer la codificación en ISO 8859-1 y desactivar las advertencias.
fuente
$w
se establece inicialmente en 'a' y luego se incrementa hasta que alcanza el primer valor después de 'contraseña' (la última cadena no se imprime).for
ciclo regular . No hay nada extraño en este código, excepto los últimos 2 caracteres, que son espacios en blanco invertidos en bits. De todos modos, sí, lo probé con una palabra más corta.passwoqs
apassword
. Debido a que la codificación del teclado no es ISO 8859-1, tuve que reemplazar~ß
con un espacio en blanco.$w<passwore
en lugar de$w!=passwore
.Ruby (40 caracteres)
Interprete una cadena de letras az como un número en la base 26, con a = 1, b = 2, ..., z = 26.
Entonces "contraseña" puede considerarse como el número N =
Si dejamos
s = "a"
(es decir: 1) y hacemos llamadas (N-1) as.succ!
, s será"password"
(N). En otras palabras, N = 1 + (N-1).Para un ejemplo que se ejecutará más rápidamente, para demostrar que el cálculo de N es correcto, considere
"pass"
como el objetivo, donde N esy
Como también queremos imprimir
"a"
, necesitamosAsí que de vuelta a la "contraseña" completa.
N = 129052722140
, dejando:Busqué una forma más compacta de,
129052722140 == 0x1e0c2443db
pero no pude encontrar una.(Actualizado para corregir la falta de impresión
"a"
, gracias a Cary).fuente
N
lugar deN-1
en mis iteraciones! Gracias, editaré para arreglar. (Aunque 129052722140 es un número interesante para Google :).)s=?a
,s.succ!
comienza en 'b' '.s=?a
yN-1
obtienes 'b c ... contraseña'; cons =
<backtick> yN
obtienes 'una b ... contraseña'. El SO solicitó la salida para comenzar'a'
. Eso es todo.Javascript, 73
Aquí hay una versión de 73 caracteres del código de @Briguys, que imprime solo combinaciones de letras
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
fuente
APL (Dyalog),
4634Teóricamente, se imprimiría hasta CONTRASEÑA, pero encontré un error de espacio de trabajo completo después de ZZZZ: la matriz de 5 dimensiones es demasiado impresionante.
EDITAR: Debe haber pasado demasiado tiempo desde la última vez que jugueteé con APL. ¡Cómo me atreví a perder la comparación de identidad (
≡
)!Explicación
{...}
: Declara una función que ...⎕A∘.,⍵
: toma el producto externo sobre la concatenación (cada combinación de un elemento del operando izquierdo concatenado con un elemento del operando derecho, al igual que el producto cartesiano) entre las 26 mayúsculas alfa (⎕A
) y el argumento (⍵
){...}¨
: Y para cada elemento del conjunto resultante, conéctelo a una función que ...⍞←⍵
: lo imprima'PASSWORD '≡
y compárelo con'PASSWORD '
→
: Si la comparación devuelve verdadero (1
), entonces cancele el programa.⍵
: De lo contrario, solo devuelve la cadena impresa.∇
: Finalmente, la función externa se repite.(Luego está tomando el producto externo sobre el concat entre el 26 alfa y el 26 alpha, que da todas las combinaciones de 2 letras, y luego el producto externo sobre el concat entre las combinaciones de 2 letras y el 26 alpha, etc. ... hasta que alcanzar CONTRASEÑA que desencadena el aborto)
' '
: ¡¡La chispa!! Eso inicia la función recursiva con el carácter de espacio.fuente
Python 2 -
153 152 151149 bytesSe guardó un byte usando MAYÚSCULAS y otro usando nuevas líneas en lugar de espacios.
fuente
Golfscript 41
Por falta de
'z'+1 == 'aa'
lógica, Golfscript no puede ganar este.168036262484,
crear matriz de 0 a 168036262483(;
soltar el 0{
..}%
iterar sobre la matriz27base
convertir elemento a base 27 matriz{96+}%
agregue 96 a cada dígito' '+
convertir a cadena y agregar un espacio al final.96?0<*
truncar cadena a cero si contiene char 96fuente
En Ruby,
3940...o
129052722140
. (Editar: anteriormente lo había hecho129052722
. Había perdido algunos dígitos cortando y pegando. El hexadecimal anterior (0x7B13032
) era por un número incorrecto). Prestadoa=?`
de @Doorknob para guardar un personaje.fuente
a=?`
, se ve un poco extraño y tiene un espacio extra al final, pero al menos 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
Es fácil confirmar que esto es correcto simplemente imprimiendo algunas secuencias.Javascript:
5756 caracteres (gracias C5H8NNaO4)Aquí hay una solución que incluye números como posibles caracteres ("0", "1", "2", .., "passwor9", "passwora", "passworb", "passworc", "contraseña")
Aquí hay un violín para probar (con solo las últimas 100 iteraciones para que no bloquee su navegador).
fuente
print every **letter** combination
De todos modos, guarde un personaje:{} -> ;
Haskell, 101
fuente
Befunge (72)
Imprime las cadenas 'a' a 'contraseña' separadas por espacios, luego sale.
A continuación se muestra una versión que imprime solo los primeros 9 * 9 = 81 palabras ('a' a 'dd'), para comparar. El
99*
es el número de iteraciones a realizar.fuente
JavaScript
8076violín - se detiene en "pa".
Sin embargo, esto sí repite las cosas.
fuente
i=s=0
para guardar tres caracteres más.var
?i
fue un antes global; ahoras
es un global. Por lo general, puede mantener ambos globos globales en el código de golf.