El rompecabezas:
Considere un juego de consola / de mano con un d-pad donde se le requiere ingresar un tipo de nombre. Esto apareció en muchos juegos anteriores antes de que el uso de QWERTY se popularizara en las consolas (por ejemplo, creo que la Wii usa un diseño de teclado QWERTY para la entrada). Por lo general, el teclado en pantalla tiene el efecto de *:
Defecto:
0 1 2 3 4 5 6 7 8 9
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 _ + ^ =
Con el caso cambiado:
0 1 2 3 4 5 6 7 8 9
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 - + ^ =
Es decir, todas las claves alfanuméricas y lo siguiente:
_
: Un solo espacio
-
: Un guión
+
: Cambiar mayúsculas y minúsculas solo para la siguiente letra
^
: Alternar bloqueo de mayúsculas (es decir, cambiar mayúsculas y minúsculas)
=
: Entrar, completar
* Obviamente reemplacé teclas como "BKSP" y "ENTER" con versiones más cortas
Y luego el hardware incluiría un d-pad (o alguna forma de control donde se podía ir up
, down
, left
y right
)
La pantalla también te permite moverte de un lado a otro directamente. Es decir, si se concentrara en la letra J
, presionar right
le permitiría moverse a la letra A
.
Cada vez que ingresaba mi nombre, siempre intentaba encontrar la forma más rápida de hacerlo.
Gol:
Su programa tomará una entrada de cadena que puede incluir cualquier carácter alfanumérico, incluido un espacio y un guión, y su objetivo es generar la menor cantidad de pulsaciones de teclas en el d-pad para generar la cadena requerida.
Consideraciones:
No necesita incluir la tecla presionada para presionar el carácter real.
El foco siempre comienza en A
Enter, =
debe presionarse al final
Ejemplo:
input: Code Golf
output: 43
Explicado:
A
-> C
= 2
C
-> ^
= 6 (moviéndose hacia la izquierda)
^
-> o
= 5
o
-> d
= 2
d
-> e
= 1
e
-> +
= 5
+
-> _
= 1
_
-> +
= 1
+
-> G
= 3
G
-> o
= 3
o
-> l
= 3
l
-> f
= 5
f
-> =
= 6
Tenga en cuenta que es más rápido presionar +
dos veces para a _
y a G
que presionar ^
una vez, luego cambiar de nuevo.
La presentación ganadora (permitiré al menos 1w) será la solución más corta (en bytes). Como esta es mi primera pregunta, espero que sea clara y no demasiado difícil.
Respuestas:
Rubí (369 bytes)
Toma información de la línea de comando.
Ahorré un montón de bytes gracias a @Charlie :)
fuente
j=(K.index(c.upcase) or 36)
se puede reemplazar conj=K.index(c.upcase)||36
para guardar 4 bytes.def d(x,y)
puede reemplazarse condef d x,y
para guardar un byte, y lo mismo ocurre condef v
.v(...) if
parav(...)if
por otro byte. En la última línea,v(...)
se puede reemplazar conv ...
para guardar 1 byte ytrue
con!!0
para guardar otro byte.&&
con&
y||
con|
.K=...
) se puede reemplazar con un rango (K='0123456789'+('A'..'Z').to_a.join+' +^='
)Swift 1.2,
812588670 bytesEditar: Se eliminaron 224 bytes al reemplazar las grandes matrices de números con un Rango y convertirlo en una Matriz.
Edit2: Agregado bucle verticalmente
Para ejecutar, coloque el código en un
.swift
archivo y ejecútelo conswift <filename> <your name>
Esto utiliza el enfoque simple donde los dos 'teclados' se almacenan como matrices.
B:(I)->(I,I)={a in(a%10,a/10)}
Convierte un índice de la matriz en una posición x, y en el teclado virtual.func C(e:I,f:I)->I{let(a,b)=B(e),(c,d)=B(f) return abs(d-b)+min(abs(c-a),abs(10-(c-a)))}
Toma un índice de inicio / fin y devuelve el número mínimo de movimientos para pasar de una a otra (teniendo en cuenta el ajuste horizontal)func D(c:S,_ e:I=10,_ f:Bool=false,_ g:Bool=false)->I
Es la principal función recursiva que realiza la mayoría de los cálculos. Se calcula la distancia desde la posición actual al carácter objetivo, a menos que el caso debe cambiar, entonces se calcula tanto el desplazamiento y las tapas de bloqueo métodos y toma el más pequeño.Ejecutando
swift codegolf.swift Code Golf
impresiones43
fuente
Python
679661619602589576539520496482 BytesEjecute esto y solicitará una entrada (sin texto de solicitud). Para la entrada
Code Golf
que imprime43
.Programa completo:
Salida extendida del programa completo:
fuente
C 675 bytes
Toma información del argumento de la línea de comando. Utiliza recursivo principal:
fuente