Imagine el siguiente reloj de 24 horas que puede controlarse con las teclas de flecha:
╔══╗ ┌──┐
║00║:│00│
╚══╝ └──┘
HH mm
Al presionar la flecha hacia arriba dos veces ( ↑↑
) aumentará la entrada de hora enfocada actualmente:
╔══╗ ┌──┐
║02║:│00│
╚══╝ └──┘
HH mm
Presionando la flecha derecha ( →
) enfocará la otra entrada.
┌──┐ ╔══╗
│02│:║00║
└──┘ ╚══╝
HH mm
Al presionar la flecha hacia abajo tres veces ( ↓↓↓
) ahora disminuirá esta entrada.
┌──┐ ╔══╗
│02│:║57║
└──┘ ╚══╝
HH mm
En pocas palabras:
- La flecha hacia arriba (
↑
) aumentará la entrada actualmente activa. - La flecha hacia abajo (
↓
) disminuirá la entrada activa. - La flecha derecha (
→
) moverá el foco a la entrada correcta. - La flecha izquierda (
←
) moverá el foco a la entrada izquierda. - El movimiento hacia arriba y hacia abajo se repetirá como se esperaba para una entrada de tiempo.
- El movimiento hacia la izquierda y hacia la derecha no gira.
El reto
El reloj comienza 00:00
con la entrada de hora activa (consulte el primer esquema). Dada una lista de comandos de entrada, genera el tiempo resultante en HH:mm
formato.
La entrada puede ser una cadena o una lista (o su idioma equivalente), donde las diferentes direcciones de entrada pueden ser una de las siguientes opciones:
↑↓←→
udlr
^v<>
- la tecla de flecha real presiona si su programa tiene una GUI
Se aplican lagunas estándar.
Casos de prueba
↑↑→↓↓↓ = 02:57
↓→↑←↑→↓ = 00:00
↓→→↓ = 23:59
←←←←→↑ = 00:01
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓→↓ = 23:59
0123
) facilitaría mucho el desafío en ciertos idiomas sin beneficiar a otros.Respuestas:
HTML en Google Chrome 67 en chino (simplificado), 39 bytes
Chrome muestra diferentes componentes de la interfaz de usuario en diferentes idiomas. Incluso una simple entrada de tiempo: AM / PM se mostrará si está utilizando inglés (EE. UU.). Si quieres probar esto cambiando el idioma de tu Chrome. No masifique cómo volver a cambiarlo.
fuente
AM/PM
para míC (gcc) ,
117107bytesPruébalo en línea!
fuente
t,i,m[8];e(char*_){for(*m=i=2[m]=0;t=*_++;t<63?i=t%4:(i[m]+=t&8?1:119));printf("%02d:%02d",*m%24,2[m]%60);}
Pruébelo en línea!Stax ,
36353332 bytesEjecutar y depurarlo
Usos
lrud
.Explicación:
fuente
Python 2 , 105 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 103 bytes
Toma la entrada como una cadena, usando
udlr
.Pruébalo en línea!
fuente
C # (.NET Core) ,
149132 bytesPruébalo en línea!
Utilizando
^v<>
.Este me hizo darme cuenta de que el operador de módulo en C # no funciona como se esperaba, porque en C #
-1 % 60 = -1
, así que necesito hacer esa operación extraña al final.fuente
Lua (marco love2d),
311308 bytesVersión sin codificar:
Probablemente todavía no sea 100% fácil de leer porque todos los ifs se intercambian con una declaración trinaria (..y ..o) :)
si comenzó en main.lua con amor, aparecerá una ventana emergente y puede presionar las teclas de flecha para cambiar los números
fuente
MATL ,
575655 bytesPruébalo en línea!
Representa hora y minutos usando números complejos, siendo la parte real horas y la parte imaginaria minutos.
Con comentarios:
fuente
PHP ,
145134133 bytes(-11 bytes por más golf)
(-1 byte utilizando el método de bucle de Davіd )
Para ejecutarlo:
Ejemplo:
O Pruébelo en línea!
Notas:
error_reporting=0
opción se utiliza para no generar advertencias.u d l r
fuente
JavaScript,
104103 bytesToma la entrada como una matriz de caracteres, usando
<>^v
.Pruébalo en línea
fuente
Haskell, 236 bytes
f
es la función principal y tiene el tipoString -> String
:Esencialmente
u
yv
son funciones recursivas de tipo recíprocamenteInteger -> Integer -> String -> String
. Toman la hora, los minutos y una lista de caracteres sobre el conjunto{v,^,<,>}
, y devuelven la cadena de tiempo.u
actúa como si el marcador de hora estuviera resaltado, llamando recursivamenteu
si el encabezado de la lista está dentro{v,^}
yv
si el encabezado de la lista está dentro{<,>}
.v
es similar pero para el dial de minutos.Todo lo demás es solo salvar personajes.
fuente
Lua , 132 bytes
Pruébalo en línea!
Explicación
Esta es una función anónima (una forma de usarla se muestra en el enlace).
fuente
HH:mm
formato, en lugar de una tablaJava 8, 121 bytes
La respuesta C del puerto de Jonathan Frech . Acepta . Pruébelo en línea aquí .
^v<>
fuente
Jalea , 36 bytes
Creo que
O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:
debería funcionar para 32, peroœṡ
parece que actualmente tiene un error .Un programa completo que imprime el resultado en STDOUT (como enlace monádico, en realidad devuelve una lista mixta de enteros (aunque de un solo dígito) y caracteres (el
:
).Utiliza el
udlr
opción de entrada.Pruébalo en línea!O ver un pruebas .
¿Cómo?
fuente
APL (Dyalog Classic) ,
9784 bytesPruébalo en línea!
Requiere
⎕IO←1
fuente
QBasic , 229 bytes
Un script que toma entradas como pulsaciones de teclas y salidas a la consola.
Nota: los terminales
"
se incluyen solo para resaltar la sintaxis y no contribuyen al recuento de bytesComentado
fuente
(m+y)
?m
fue por minutos por alguna razón ... Veo que tu versión comentada es más legible.PowerShell,
109103 bytes-6 byte gracias AdmBorkBork
Script de prueba:
Salida:
Explicación
La idea básica es utilizar a
[hashtable]
, quekeys
son comandos de control yvalues
bloques de script. El código ejecuta el bloque de script para cada comando a partir de argumentos.fuente
$i=0
convertir su índice de matriz como$t[+$i]
para guardar algunos bytes. Pruébalo en línea!Perl 6 ,
101 91 8986 bytesPruébalo en línea!
Bloque de código anónimo que toma una cadena de
uldr
caracteres y regresa en el formato dadofuente
perl -F // -E, 72 bytes
fuente
Python, 120 bytes
fuente
ld
orru
hacei
que abandone el rango (0,1) y luegoo[i]
se accede a ella?unput()
. A partir de los requisitos, pensé que las acciones L y R nunca se repetirán (es decir, noLL
)lll
que no es lo mismo quer
. Tenerll
orr
es entrada válida, también está en los casos de prueba, vea el tercero, por ejemplo.23:59
. Pruébalo en línea!Haskell , 186 bytes
Pruébalo en línea!
fuente
R,
368355bytesDefinitivamente no es el mejor enfoque, pero funciona.
Funcionalidad: Ejecute la función, escriba cada letra en el pliegue (in / de) o muévase hacia la izquierda / derecha, escribiendo "s" finaliza el "juego". El problema es que aceptará una y solo una letra a la vez.
-13 bytes Consolidó algunos valores en una fila, sobrescribió T como F en lugar de usar break, encontró varios espacios para eliminar y en su lugar se almacenó una cadena en una variable
También estoy editando un formato alternativo para aceptar una cadena R y / o un vector, publicaremos la próxima semana.
fuente
SmileBASIC, 123 bytes
BUTTON()
devuelve un número entero donde cada bit representa un botónBUTTON(2)
solo devuelve los botones que se presionaron (no se mantienen)WAIT
se requiere porqueBUTTON
solo se actualiza una vez por fotograma (1/60 de segundo). De lo contrario, la misma presión del botón se detectaría varias veces.Esto definitivamente puede ser más corto
fuente
05AB1E ,
3837 bytesUsa
udlr
las instrucciones, pero también podría usar^v<>
el mismo número de bytes (los caracteres↑↓←→
no forman parte de la página de códigos de 05AB1E, por lo que usarlos aumentaría mucho el número de bytes, ya que la codificación debería cambiarse a ASCII).Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué
Ž9¦
es2460
.fuente