Parece haber esta locura constante por las personas que aprenden tediosamente nuevos diseños de teclado como Dvorak o Neo porque supuestamente los hace más productivos. Sostengo que cambiar la distribución del teclado es una mala idea, ya que puede llevarle meses ponerse al día, y cuando finalmente es un 5% más rápido que el resto, está jodido si necesita escribir en una computadora que no Es tuyo.
Además, todas estas personas olvidan dónde está el verdadero cuello de botella en la comunicación moderna: el teclado del teléfono.
Así es como se ve su teclado telefónico promedio:
La letra 'r' es la tercera letra del botón 7; así que si tuviera que escribir la letra 'r' en un teléfono móvil, presionaría el botón 7 tres veces, para 's' la presionaría 4 veces y para 'a' presionaría el botón 2 una vez.
Teniendo esto en cuenta, poner 'e' después de 'd' probablemente fue una mala decisión: 'e' es la letra más comúnmente utilizada en el alfabeto inglés, por lo tanto, si tuviera que etiquetar el botón 3 "EDF" en lugar de "DEF", usted ahorraría muchas pulsaciones de teclas.
Además, probablemente haya experimentado que escribir 2 letras que comparten el mismo botón es una molestia: si desea escribir "TU", no puede simplemente presionar 8 tres veces, porque eso daría como resultado 'V'. Por lo general, escribiría 'T', luego presionaría el espacio, luego la tecla de retroceso y luego escribiría 'U', que equivale a 5 pulsaciones de botón en lugar de 3.
TL; DR
Dadas estas dos reglas:
- Una letra se escribe presionando un botón n veces, donde n es la posición donde se encuentra la letra en la etiqueta del botón
- Escribir dos letras que se escriben con el mismo botón requiere presionar 2 botones adicionales
¿Cuál es la distribución del teclado del teléfono que requiere la menor cantidad de pulsaciones de botón, dado un texto específico? Solo debe usar los botones 2-9, 1 y 0 están reservados para símbolos especiales.
Entrada
El texto para el que debe encontrar el diseño óptimo se proporciona a través de stdin. No necesita manejar nada más que el alfabeto en minúsculas y puede suponer que la entrada consiste solo en eso. También puede suponer que el texto de entrada es razonablemente grande y que cada letra está allí al menos una vez, si eso ayuda.
Salida
No quiero poner demasiadas restricciones en la salida, ya que eso a veces da ventajas a algunos idiomas sobre otros; así que, sin embargo, su idioma muestra que las matrices están bien, alternativamente, puede separar cada etiqueta con una nueva línea.
Puede haber múltiples diseños óptimos posibles, puede imprimir cualquiera de ellos. Aquí hay un ejemplo simple:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Puntos extra
-35 si su algoritmo no es de fuerza bruta todos los diseños posibles (estoy viendo las 'permutaciones' de Haskell aquí)
-3 si su código cabe dentro de un mensaje de texto (140 caracteres) y publica una foto de usted enviando su código a un amigo.
Este es mi primer desafío en StackExchange. Me encantaría saber si te gusta o si tienes algún otro comentario al respecto.
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
permutaciones únicas, contando reorganizaciones simples de las teclas solo una vez.