Su tarea es calcular el número total de pulsaciones de teclas necesarias para ingresar un texto dado en un teléfono celular antiguo.
Los mapas de teclas son:
1:1
2:abcABC2
3:defDEF3
4:ghiGHI4
5:jklJKL5
6:mnoMNO6
7:pqrsPQRS7
8:tuvTUV8
9:wxyzWXYZ9
0:<space><newline>0
Para escribir exaMPle TExt 01
, presionaría 33 99 2 6666 77777 555 33 0 8888 33333 99 8 0 <a 1-sec pause here in real life but we'll ignore it>000 1
un total de 37 pulsaciones de teclas.
La *
clave muestra un mapa de caracteres especiales:
.,'?!
"-()@
/:_;+
&%*=<
>£€$¥
¤[]{}
\~^¡¿
§#|`
con el primero ( .
) resaltado. Puede moverse para resaltar el carácter requerido usando las teclas de navegación rectangulares y se necesita presionar otra vez para seleccionar.
Para insertar $
, presionaría, *↓↓↓↓→→→<select>
es decir, un total de 9 pulsaciones de teclas.
- La entrada será de un archivo llamado
source
ubicado en el directorio / directorio actual de su programa. EDITAR: Por solicitudes en comentarios, estoy agregandoSTDIN
como un método de entrada válido. Disculpas por cambiar la especificación después de recibir respuestas. - Debe salida
Total key presses <total_keypresses>
- Si el archivo de entrada contiene algún carácter que no está en el mapa de teclas dado, entonces su programa debe salir
Invalid character <character> in source
y salir.
En resumen, la entrada y salida de su programa debe parecerse a la de esta secuencia de comandos de Python (sin golf):
# This Python file uses the following encoding: utf-8
from __future__ import print_function
import sys
general_dict = { '1':1,
'a':1, 'b':2, 'c':3, 'A':4, 'B':5, 'C':6, '2':7,
'd':1, 'e':2, 'f':3, 'D':4, 'E':5, 'F':6, '3':7,
'g':1, 'h':2, 'i':3, 'G':4, 'H':5, 'I':6, '4':7,
'j':1, 'k':2, 'l':3, 'J':4, 'K':5, 'L':6, '5':7,
'm':1, 'n':2, 'o':3, 'M':4, 'N':5, 'O':6, '6':7,
'p':1, 'q':2, 'r':3, 's':4, 'P':5, 'Q':6, 'R':7, 'S':8, '7':9,
't':1, 'u':2, 'v':3, 'T':4, 'U':5, 'V':6, '8':7,
'w':1, 'x':2, 'y':3, 'z':4, 'W':5, 'X':6, 'Y':7, 'Z':8, '9':9,
' ':1, '\n':2, '0':3
}
special_chars = ['.',',',"'",'?','!','"','-','(',')','@','/',':','_',';','+','&','%','*','=','<','>','£','€','$','¥','¤','[',']','{','}','\\','~','^','¡','¿','§','#','|','`']
for x in special_chars:
general_dict[x]=(special_chars.index(x)/5) + (special_chars.index(x)%5) + 2
key_press_total = 0
with open('source') as f: # or # with sys.stdin as f:
for line in f:
for character in line:
if character in general_dict:
key_press_total+=general_dict[character]
else:
print('Invalid character',character,'in source')
sys.exit(1)
print('Total key presses',key_press_total)
Este es el código de golf, el programa más corto en bytes gana.
Descargo de responsabilidad desvergonzado: hice este desafío para tener traducciones del script de python anterior en diferentes idiomas que se utilizarán para calificar este desafío en el sandbox .
1ce5a2fdd0316e37c0a07d151d02db766a3adbb7
.Respuestas:
GolfScript, 219 caracteres
Enfoque básico utilizando una tabla de búsqueda:
Tratar aquí .
fuente
source
, no STDIN"#{File.read('source')}"
"#{File.read'source'}"
Ruby 2.0, 232
Esquema de codificación muy simple hasta ahora: más del 75% de los caracteres se utilizan para literales de cadena / matriz ...
fuente
CJam, 207 bytes
Este programa tiene 207 caracteres. Con la codificación adecuada (Windows-1252), cabe en 207 bytes.
Tenga en cuenta que Stack Exchange convierte las pestañas (que uso como delimitador en la tabla de búsqueda) en espacios, por lo que no puede copiar y pegar el código anterior.
Uso
Codificación de Windows-1252
Codificación UTF-8
fuente
PHP,
711708676 caracteres (lectura de STDIN ahora)Mi primer golf hasta ahora :)
Quería probar un enfoque poco convencional. En lugar de tener una lista de cada personaje y cuántos clics se necesitan para crearlo, estoy usando los valores ASCII del personaje y calculo las pulsaciones de teclas necesarias. Pensé que me ahorraría algunos personajes primero, ahora creo que es incluso más largo que un enfoque de matriz.
Mi principal problema son las teclas 7 y 9, que tienen 4 letras, en lugar de 3. Por lo tanto, necesitaba crear un par de fallos, que volaron mi código en casi 200 caracteres.
Versión sin golf
Supongo que todavía hay mucho margen de mejora, pero estoy bastante contento con esto.
Otra cosa mala es el uso requerido de
iconv()
para la lista de caracteres especiales. Algunos de estos (€
,¥
, ...) no son compatibles de forma nativa por PHP.fuente
utf8_decode
funcionaría bien para todos los personajes , excepto de€
. Es por eso que tuve que usariconv
en su lugar. Mi código no calcula estos caracteres especiales como lo hace con los caracteres normales, ya que no están en orden y no puedo trabajar de manera confiable con sus respectivos valores ASCII. Está usando una lista normal para ellos.Python 3, 239 caracteres
fuente
JavaScript (E6) 291
Editar
Versión de shell, utilizando el shell de spydermonkey. Leer desde un archivo 'fuente', escribir en sdtout
Primer intento, funciona en la consola FireFox usando ventanas emergentes para entrada y salida
Legible
fuente
VBScript 435
No es compatible con caracteres no ASCII. Estaba bastante lejos de mi código, así que pensé en publicarlo como referencia. No creo que nadie más haya usado este enfoque.
fuente