Introducción
Imagine que la línea de caracteres es, de hecho, dos filas. Fila superior - puntos - representa las horas (sistema de 24 horas), mientras que inferior - comas - representa minutos . Un personaje puede representar hora, minuto o ambos , siempre que sea posible.
Al principio, probablemente tendría que convertir minutos desde la medianoche a horas y minutos .
El resultado es la cadena que muestra la hora actual en "formato de punto". El recuento de puntos ( apóstrofe cuenta aquí como un punto y se llamará así ) es el recuento de horas desde la medianoche y el recuento de comas es el recuento de minutos. Mostraré algunos ejemplos para que quede claro.
- (Observación) hh: mm -
result
- (Solo horas) 05:00 -
'''''
- (Solo minutos) 00:08 -
,,,,,,,,
- (horas <minutos) 03:07 -
;;;,,,,
- (horas> minutos) 08:02 -
;;''''''
- (horas = minutos) 07:07 -
;;;;;;;
- (el comienzo del día) 00:00 -
( resultado vacío )
Observe que el carácter "ambos" se puede usar como máximo 23 veces, para 23: xx, donde xx es 23 o más.
Los símbolos
Si el carácter tiene que (ver la regla 5) escapar en su idioma, puede cambiarlo a una de las alternativas. Si dichas alternativas no son suficientes, puede usar otros símbolos, pero sea razonable. Simplemente no quiero escapar para ser una barrera.
;
(punto y coma): marcador para horas y minutos (alt::
)'
(apóstrofe) - marcador por horas (alt:'``°
),
(coma) - marcador de minutos (alt:.
)
Reglas adicionales
- ¡El código con la menor cantidad de bytes gana!
- Tienes que usar ambos símbolos siempre que sea posible. Para 02:04 el resultado no puede ser
'',,,,
, ni;',,,
. Tiene que ser;;,,
- Entrada: puede ser un parámetro de script / aplicación, entrada del usuario (como readline) o variable dentro del código
3.1. Si se usa la variable dentro del código, entonces su longitud debe ser la más larga posible. Es1439
(23:59), así que se vería comot=1439
- La parte común que está simbolizada por el carácter "ambos" (12 en 12:05, 3 en 03:10) debe colocarse al comienzo de la cadena
- Los símbolos pueden reemplazarse por alternativas solo si tendrían que escaparse en su código.
- La entrada se da en minutos después de las 00:00 . Puede suponer que este es un número entero no negativo.
Casos de prueba
Input: 300
Output: '''''
Input: 8
Output: ,,,,,,,,
Input: 187
Output: ;;;,,,,
Input: 482
Output: ;;''''''
Input: 427
Output: ;;;;;;;
Input: 0
Output: (empty)
1439
es23:59
y no1339
. (23 x 60 + 59).Respuestas:
Pyth, 19 bytes
Banco de pruebas
fuente
CJam,
222019 bytesToma información de STDIN:
Pruébalo aquí.
Explicación
Fue realmente afortunado lo bien que las cosas funcionaron juntas aquí, en particular la asignación de horas
'
y minutos a,
tal que el orden de horas y minutos en la pila coincidiera con la representación de cadena del personaje.Este es el único bloque de 3 bytes que he encontrado hasta ahora. Sin embargo, hubo toneladas de soluciones de 4 caracteres:
fuente
GNU Sed, 37
La puntuación incluye +1 para la
-E
opción de sed.No estaba particularmente impresionado con el golf de mi respuesta bash , así que pensé en probar con sed por diversión.
La entrada está en unario, según esta meta-respuesta .
Pruébalo en línea
fuente
Python 2, 56 bytes
Una función que imprime (un carácter más corto que
t=input();
).El método es similar al de Loovjo . El número de
,
es diferente entre minutos y horas, con un mínimo implícito de 0. Porque'
, es la negación. Para;
, calculamin
implícitamente tomando tantas;
horas como sea, luego truncando a la cantidad de minutos.Guarda caracteres para guardar
d
, pero no la cantidad de horas y minutos aquí. El análogo con lambda fue dos caracteres más largo (58), por lo que las asignaciones variables valen la pena.Procesar la entrada directamente tampoco guardaba caracteres (58):
Otra estrategia con rebanar, mucho más larga (64):
fuente
Retina , 24
Puerto trivial de mi respuesta sed .
La entrada está en unario, según esta meta-respuesta .
Pruébalo en línea.
fuente
Pure Bash (sin utilidades externas), 103
Gracias a @ F.Hauri por guardar 2 bytes.
fuente
$1
y$2
enp()
y escribirp , $c
en la línea 3.printf "%s"
, tenerc
vacío funcionará bien (aunque no se reutilice)C, 119 bytes
Detallado
fuente
putchar
literales & enteros como caracteres ahorra un byte, tirando de los puntos y comas dentro de la macro ahorra dos más :)while
en su macro #define. -1 byteHaskell,
6866 bytesEjemplo de uso:
El bit inteligente aquí es que
replicate
devolverá la cadena vacía si la longitud dada es negativa o cero, por lo que puedo aplicarla a ambas diferencias y solo se mostrará la positiva. La primera parte es fácil, ya que el número de punto y coma es solo el mínimo de los dos. LuegozipWith
aplica la función a los elementos correspondientes.EDITAR: me di cuenta de que estaba usando el personaje equivocado durante minutos
EDIT 2: guardado 2 bytes gracias a @Laikoni
fuente
concat$
conid=<<
.JavaScript (ES6) 69
fuente
Powershell,
9985 bytesparam($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)
Usando el método de Loovjo , esta es mi implementación de PowerShell.
sin golf
Guardado 14 bytes gracias a AdmBorkBork
fuente
$m
y$h
declaraciones en él, y luego usando la multiplicación de Boole. Me gusta así -param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
Python 3, 98 bytes
Probablemente no sea la mejor respuesta, ¡pero fue muy divertido!
fuente
Python 2, 61 bytes
Explicación:
fuente
PHP, 81 bytes
Fui por la entrada variable ya que es más corta que leer
STDIN
o tomar argumentos de la línea de comandos.fuente
240
. Prueba$i>=min($h,$m)?$h<$m?",":"'":";"
(+1 byte). O usefor($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];
(76 bytes). Por cierto: la comilla simple hace-r
imposible; por lo que debe usar la tecla de retroceso durante horas si está en una cadena o°
independiente (no necesita comillas -> -1 byte).JavaScript (ES6),
7771 bytesfuente
Perl 6,
103101989769 bytesEmite varias matrices, pero a la mierda,disfruta. Como de costumbre, todas las oportunidades de golf son apropiadas.Editar: -2 bytes: se valiente y eliminó algunos lanzamientos.
Edit2: -3 bytes eliminando las matrices.
Edit3: -1 byte para imprimir en el formato correcto, usando "lambdas" y eliminando las paréntesis.
Edit4: (lo siento chicos) abusando de esas horas, los minutos deberían devolver 0 y todo lo contrario. Eliminado si las declaraciones. Luego quité los corchetes y me di cuenta de que no necesitaba la lambda. -28 bytes :)
Woah estoy mejorando en esto.
fuente
C, 141 bytes
fuente
h>0||m>0
. Entoncesh--;m--;
solo necesita una vez en cada iteración y el{}
forif/else
quedaría obsoleto.else if(h&&!m)
simplemente puede tenerelse if(h)
if
yelse
.scanf()
.%24
sea necesario: la entrada máxima es 23:59.Gema, 119 caracteres
Ejecución de muestra:
fuente
Matlab: 89 bytes
Prueba:
fuente
SmileBASIC, 59 bytes
Explicado:
Se ve bastante terrible, ya que la parte inferior de
;
ni siquiera es la misma que,
en la fuente de SmileBASICfuente
PHP, 81 bytes
algunas soluciones más:
Corre con
echo <time> | php -R '<code>'
.Reemplazar
1439
con entrada, guardar en archivo, ejecutar.fuente
Ruby, 50 caracteres.
Gracias a:
Esperé tanto tiempo para usar
Numeric.divmod
, solo para darme cuenta de que es horriblemente largo.Ejecución de muestra:
fuente
(?;*h=t/60)[0,m=t%60]
",',"[0<=>m-=h]*m.abs
05AB1E , 25 bytes
Pruébalo en línea!
60‰vy„'.Nè×}
definitivamente se puede acortar, simplemente no pude resolverlo, y dudo que pueda reducir 7 bytes para ganar con este enfoque a menos que haya una versión vectorial de×
.Ejemplo (con una entrada igual a 63):
D60÷''×s60%'.ׂ.BøJ„'.';:ðK
era mi versión original, pero eso es incluso MÁS costoso que divmod.60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ
otro método que probé ...fuente
cc , 95 bytes
Pruébalo en línea!
fuente
Java 8,
1019986 bytesExplicación:
Pruébalo aquí
fuente