Introducción
Últimamente, me he estado acostumbrando a escribir con Swype .
He notado que ciertas palabras se pueden producir dibujando una línea recta desde la letra inicial hasta la letra final, o saltando las letras que se repiten.
Por ejemplo, puedo escribir la palabra balloon
deslizando las siguientes letras:
b> a> l> o> n.
Desafío
Definamos la ruta Swype más corta o SSP
, como el número mínimo de segmentos de línea distinguibles necesarios para escribir una cadena. Un segmento de línea es una línea recta continua entre dos o más letras. Cualquier cambio en la dirección comienza un nuevo segmento de línea, aunque algunas palabras se pueden Swyping dibujando solo una línea recta.
Utilice este diseño de teclado QWERTY simple :
q w e r t y u i o p
a s d f g h j k l
z x c v b n m
En el ejemplo anterior, la palabra balloon
tendrá un SSP
de 4
como se detalla en la secuencia a continuación:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
La cadena qwerty
tiene SSP
= 1, ya que no se requiere ningún cambio de dirección al Swyping esta palabra.
Entrada
Una cadena de una sola palabra que contiene cualquier a-z
vía STDIN, argumento de función o línea de comando.
Salida
Imprima a través de STDOUT, return o la alternativa más cercana a su idioma, el número que n
representa la cadena SSP
.
Una nueva línea final opcional en salida. Lagunas estándar no permitidas. La presentación más corta en bytes gana.
Notas
- Un cambio de dirección inicia un nuevo segmento de línea.
- Las letras que se repiten solo se cuentan una vez (por ejemplo:
bookkeeper
deben tratarse comobokeper
). - Normalmente, Swpye corrige las letras perdidas mirando las letras vecinas y completando su mejor conjetura. Para este desafío, suponga que no hay aumentos de lenguaje natural, texto predictivo o corrección de errores.
- Las
A-Z
entradas en mayúsculas se tratan como sus equivalentes en minúsculas. - Ignora cualquier número
0-9
en la entrada. - Caminos diagonales se les permite - es decir, una línea recta que cubre letras
o
,k
,n
, por ejemplo, cuentan como1
segmento. Esta regla se aplica a cualquier pendiente diagonal (por ejemploc
, las letrash
,i
están en línea).
Ejemplos
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3
Respuestas:
CJam,
7876736862 bytesTenga en cuenta que el código contiene caracteres no imprimibles.
Tomar prestada la inteligente idea de @ isaacg de usar RLE para contar las rutas guardadas 6 bytes.
Pruébelo en línea en el intérprete de CJam . Si el enlace no funciona, copie el código de esta pasta .
Cómo funciona
fuente
Pyth,
535049 bytesFormato de compresión del teclado gracias a @Dennis.
Esta respuesta contiene algunos caracteres no imprimibles. Consulte los enlaces a continuación para obtener el código correcto.
Demostración . Arnés de prueba.
Explicación:
fuente