Mis padres tienen un dispositivo de cine en casa. El control remoto está roto, lo que hace que sea increíblemente difícil navegar hacia la derecha en un menú. La mayoría de las veces no funciona, pero cuando lo hace se mueve hacia la derecha increíblemente rápido.
Obviamente, esto es frustrante, pero es más frustrante cuando desea ingresar un título de película que requiere navegar por un teclado que se ve así:
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 1 2 3 4
5 6 7 8 9 0
Su tarea es tomar como entrada un título de película y calcular cuán "frustrante" es escribir ese título de película. El número de frustración de una cadena en particular es el número de letras que requieren moverse directamente desde la letra anterior a ellas. No nos importa qué tan a la derecha estén, ya que si comenzamos a movernos a la derecha, casi instantáneamente llegamos al final de la línea, y no nos importa el movimiento hacia arriba, hacia abajo o hacia la izquierda porque son fáciles.
Por ejemplo, si quisiéramos escribir
keyboard
- Comenzamos en
k
gratis. e
está justo arriba,k
así que no necesitamos movernos a la derecha.y
está completamente a la izquierda, así que no hay necesidad de moverse a la derecha.b
sin embargo, está en la siguiente columna hacia la derecha, por lo que debemos movernos a la derecha para llegar a ella.o
está en la siguiente columna, así que tenemos que movernos hacia la derecha para llegar a ella.a
está de vuelta en la primera columna, así que nos movemos a la izquierda para llegar a ella.r
está todo el camino a la derecha, así que nos movemos directamente hacia él.d
son dos columnas a la izquierda der
la columna de.
Los personajes que necesitan moverse hacia la derecha bor
significan que esto es frustración 3.
Reglas adicionales
Este es un desafío de código de golf, por lo que sus respuestas se puntuarán en bytes con menos bytes mejor. La entrada siempre consistirá en caracteres alfanuméricos, puede admitir letras mayúsculas o minúsculas y solo necesita admitir una. La entrada nunca estará vacía.
Casos de prueba
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(no es una película real, pero algunas respuestas tienen problemas con tales casos de prueba)90 -> 1
Respuestas:
JavaScript (Node.js) ,
615554 bytesGuardado 1 byte gracias a @nwellnhof
Toma la entrada como una matriz de caracteres.
Pruébalo en línea!
¿Cómo?
Para todos los caracteres pero dígitos mayores que , la columna indexada en 0 viene dada por:0 0 X
donde es el código ASCII del personaje.do
Para dígitos positivos , debemos hacer en su lugar:norte
Ejemplos:
Comentado
fuente
"blast2"
."234"
.Jalea , 11 bytes
Un enlace monádico que acepta una lista de caracteres (mayúsculas).
Pruébalo en línea!
¿Cómo?
Primero reemplaza cualquier
'0'
s con'4'
s (por lo que el resto del código los trata como si estuvieran en la columna más a la derecha). Luego se convierte en ordinales, agrega uno y módulo por6
para obtener índices de columna basados en 0. Luego compara a los vecinos con is-less-than y suma el resultado.fuente
Perl 6 ,
4539 bytesPruébalo en línea!
Funciona con letras mayúsculas.
(2-ord(c))%46%6
calcula la coordenada x invertida.fuente
Limpio , 85 bytes
Pruébalo en línea!
fuente
Ruby , 56 bytes
Pruébalo en línea!
Versión ingenua preliminar, se jugará golf.
fuente
Japt
-x
, 14 bytesPruébalo en línea!
Puerto de esta respuesta Jelly. Toma la entrada como una matriz de caracteres, con letras mayúsculas.
Explicación:
fuente
Java (OpenJDK 8) , 73 bytes
¡No es una mala solución para Java! Ese cero en el lado derecho me costó varios bytes.
Pruébalo en línea!
Explicado
fuente
05AB1E ,
1211 bytes-1 byte gracias a @Kevin Cruijssen
Otro puerto de la respuesta de Jonathan Allan Jelly. Toma entrada en mayúsculas.
Explicación:
Pruébalo en línea!
fuente
0'4
puede ser¾4
guardar un byte ( sugerencia 05AB1E relevante ).K (ngn / k) ,
32 3128 bytesPruébalo en línea!
fuente
Retina 0.8.2 , 46 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Enumere el alfabeto y los dígitos en el orden en el OSK y asigne cada uno a un número de columna (1 indexado).
Convierta cada número de columna a unario.
Cuente el número de columnas seguidas por una columna más grande (es decir, hacia la derecha). El
&`
permite que los partidos que se solapan.fuente
Python 2 , 84 bytes
Pruébalo en línea!
fuente
Mathematica, 102 bytes
Pura función. Toma una lista de caracteres como entrada y devuelve un número como salida. Esta es una solución bastante ingenua, las sugerencias de golf son bienvenidas.
fuente
PHP,
74 8177 bytesEjecutar como tubería
-nR
o probarlo en línea .fuente
C (gcc) ,
82 7977 bytesPruébalo en línea!
Esta función solo admitirá entradas en minúsculas
Ungolfed y comentó:
Si mi función puede aceptar cadenas de caracteres anchas, se puede reducir a 76 bytes con:
Pruébalo en línea!
Esta versión solo acepta entradas como en
int*
lugar dechar*
Ediciones:
c
)fuente