Desafío
Su tarea es generar el tiempo (en 12 horas) en arte ascii.
Todos los caracteres que se utilizarán son los siguientes:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Para cada número / símbolo individualmente, consulte esta esencia ).
Recibirá información en una matriz del formulario:
[hours, minutes, 'am/pm']
. Por ejemplo,[4, 57, 'am']
con comillas simples solo se usa para am / pm- o
"hours-minutes-am/pm"
. Por ejemplo,"4-56-am"
- o
[hours, 'minutes', 'am/pm']
para idiomas que no pueden manejar ceros a la izquierda en números. Por ejemplo,[4, '07', 'am']
Puede usar cualquier método de entrada.
La salida tendrá la forma 1 2 : 5 9 am
, donde hay un espacio inicial, dos espacios entre cada número (en la esencia, cada número ya tiene un espacio en cada lado), un espacio entre: (dos puntos) y los números vecinos, y un espacio entre el último número y am/pm
, con una nueva línea inicial y / o final opcional. Todos los espacios están entre el punto más a la derecha del símbolo a la izquierda y el punto más a la izquierda del símbolo a la derecha.
La salida implícita está permitida.
El tamaño de byte más bajo gana.
La am/pm
deben ser alineados de tal manera que la parte inferior de la p
en pm
está alineado con la parte inferior del resto de la salida, es decir, la undercore que denota la parte superior de am/pm
comienza en la tercera línea de abajo (no contando una nueva línea principal).
Los dos puntos deben alinearse de manera que su primer carácter (un guión bajo) comience en la segunda línea hacia abajo (sin contar una nueva línea inicial).
Para minutes < 10
, muestre los minutos con un interlineado 0
(debe recibir esto en la entrada). Por ejemplo, [8, 04, 'pm']
-> 8 : 0 4 pm
.
No debe buscar los datos para los números de una biblioteca o recurso externo. Todos los datos deben estar contenidos dentro del programa.
Por ejemplo, para la entrada [12, 47, 'am']
, la salida sería la siguiente:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Si ve casos extremos en los que no puede decidir qué hacer, publíquelos en los comentarios y los agregaré a los ejemplos).
Respuestas:
Perl,
592579540522510 bytesDebajo de un sector!
Este programa espera la hora en el segundo formato ( "12-34-am" ) como argumento de línea de comandos.
Comentado:
Tenga en cuenta que, debido a problemas de codificación de caracteres, cuando pega el código anterior en un archivo, la salida puede estar algo malformada. Así que aquí está la versión de golf, codificada en base 64. Cópielo y péguelo en
base64 -d > 510.pl
:Aquí está la fuente que estoy usando. He espaciado los glifos con 12 caracteres (el tamaño de la am / pm) para facilitar la indexación.
Esta fuente es 592 bytes.
El enfoque anterior utilizó algunas variaciones en la compresión RLE para reducir esto a 353 bytes, a un costo de 78 bytes de código de descompresión.
La codificación de Huffman comprime la fuente a 221 bytes a un costo de 154 bytes para el algoritmo de descompresión.
fuente
Bash + utilidades GNU + figlet , 134
No estoy seguro si Figlet está permitido o no, pero parece proporcionar las fuentes correctas,
big
para los dígitos ysmall
para el:
y{a,p}m
:El resto es solo obtener la información correcta
date
y barajar el formato para que se vea bien:Figlet se puede instalar en Ubuntu con
sudo apt-get install figlet
.fuente
C ++, 938 bytes
Versión revisada con algo de compresión básica de datos de entrada: prueba aquí
fuente
Haskell,
932699 bytes¡Sí, menos de 700 bytes!
Algo no golfista
Cómo funciona
(Así es principalmente como funciona el programa sin golf)
clock
toma una tupla del tiempo y devuelve una cadena.m
es el minuto actual con el líder0
agregado si es así<10
.hm
son las horas y minutos unidos con a:
. Lo último que hace es transponer la salida.Bastante simple aquí.
digit
es una función que asigna los caracteres a ubicaciones en la cadena almacenada.Esta es la cadena mágica almacenada.
El único cambio real entre los programas de golf y no golf es que el programa de golf agrega algo de compresión de cadenas al reemplazar algunos patrones de caracteres comunes con
!@$
. La cadena de datos original era667
bytes, después de la compresión de reemplazo se reduce a390
bytesfuente
JavaScript (ES6),
994985 bytesIntento terrible con datos sin procesar sin comprimir en absoluto, y un método muy pegajoso para la salida.
Pero bueno ... ¡es solo mi segunda respuesta de codegolf!
Envío anterior (994 bytes) :
Dividir en líneas para que sea más fácil de leer.
Básicamente:
fuente
Pitón 3,
10851072 bytesGolfed
Sin golf
fuente