Tu amigo no es muy bueno con las computadoras, así que, como una broma práctica, alguien revolvió las letras (az) en su teclado. Cuando se sentó e intentó escribir su nombre mirando el teclado, se dio cuenta de que las letras estaban codificadas y le pidió ayuda.
Eres inteligente, así que sabes que si escribe su nombre y luego vuelve a escribir repetidamente lo que aparece en la pantalla en lugar de su nombre, eventualmente ingresará su nombre. También es amable y reorganiza las teclas, pero desea saber cuántos giros se necesitarían para tener éxito.
Su tarea es escribir un programa o función que, dada la combinación de las letras y el nombre del amigo, calcule el número de turnos.
Detalles de entrada:
- Se proporcionan dos cadenas como entrada en una estructura conveniente para su idioma.
- La primera cadena es la lista de las nuevas letras minúsculas en orden alfabético de las antiguas. (El primer carácter es el que está en la posición de
a
, el último está en la posición dez
). Siempre se producirá algún cambio en la cadena. - La segunda cadena es el nombre. Podría contener cualquier carácter ascii imprimible, pero solo los caracteres alfabéticos en mayúscula y minúscula se mezclarán si los hay. El nombre en sí podría no ser barajado en todos
Detalles de salida:
- La salida es un número entero, el número de vueltas mínimamente requerido. Newline es opcional.
Ejemplos:
Entrada:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(d, e, f posiciones cambiadas)
Salida:
3
(Los nombres que se muestran son: Mr. John Fod
=> Mr. John Eof
=> Mr. John Doe
)
Entrada:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
(el cifrado ROT13 )
Salida:
2
(Cualquier nombre de entrada que contenga letras tomará 2
rondas para producir el nombre original).
Entrada:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Salida:
140
Este es el código de golf, por lo que gana la entrada más corta.
fuente
aebcdjfghiqklmnopzrstuvwxy
(salida 1260 paraMr John Doe
). Este es el máximo posible: consiste en ciclos de orden 4, 5, 7, 9 (y sin cambiosa
), y cada nombre que contenga al menos una letra de cada ciclo producirá 1260. Y supongo que tomar el alfabeto como entrada o el uso de un nombre no afectado también son casos importantes.EOF
es totalmente increíble.Respuestas:
Pyth, 16 bytes
Pruébalo aquí
La entrada debe darse en dos líneas, nombre y luego permutación. La permutación debe ser citada. El nombre puede ser citado o no citado. Por ejemplo:
Da 140.
Explicación:
fuente
CJam,
31 27 2524 bytesToma entrada en forma de:
es decir, primera línea - alfabetos, segunda línea - nombre.
Cómo funciona :
Pruébalo en línea aquí
fuente
Rubí, 58
Explicación
Enumerable#find
(¡gracias @Ventero!) YString#tr!
para reemplazar caracteres hasta que el reemplazadoString
coincida con el nombre real.fuente
""+n
es un poco más corto quen.dup
, y puede guardar otro byte haciendo un uso creativo enEnumerable#find
lugar de usar un contador explícito:(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
y+a.upcase
A-Z+a.upcase
yn.downcase!\n
tienen la misma duración :)CJam,
3231 bytesPruébalo aquí. Toma la permutación en la primera línea y el nombre en la segunda línea de la entrada.
Explicación
fuente
Pyth 26
Pruébelo en línea aquí.
Hay bastantes consecuencias desafortunadas que le cuestan a este programa bytes, como tener que almacenar G en K para usarlo en la reducción, así como también tener que usar no (no (J)) para iniciar el filtro. Debido a esto, espero que todavía se pueda jugar golf.
Este es un programa que toma datos como:
(Tenga en cuenta la falta de comillas en el primer argumento)
Explicación que vendrá después de un agotamiento paralizante;)
fuente
Haskell 131 bytes
Llame
f
con la cadena de permutación y el nombre para obtener el resultado.Explicación
fuente
GolfScript (33 bytes)
Toma la entrada como dos cadenas entre comillas (simple o doble) separadas por cualquier cantidad de espacio en blanco; p.ej
Demostración en línea
Disección
La transliteración se basa en el hecho de que todos los caracteres están afectados (es
{'ABC'?'abc'=}%
con elA$
reemplazo de la cadena ordenada'ABC'
y elA
reemplazo de la permutación'abc'
); Las alternativas más generales no ahorran lo suficiente porque el filtro de caracteres alfabéticos es muy barato.Esto también se basa en
-1$
acceder al fondo de la pila, que es un truco GS relativamente raro.fuente