Desafio
Sua tarefa é produzir o tempo (em 12 horas) na arte ascii.
Todos os caracteres que serão usados são os seguintes:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Para cada número / símbolo individualmente, consulte esta essência ).
Você receberá entrada em uma matriz do formulário:
[hours, minutes, 'am/pm']
. Por exemplo,[4, 57, 'am']
com aspas simples usadas apenas para am / pm- ou
"hours-minutes-am/pm"
. Por exemplo,"4-56-am"
- ou
[hours, 'minutes', 'am/pm']
para idiomas que não conseguem lidar com zeros à esquerda nos números. Por exemplo,[4, '07', 'am']
Você pode usar qualquer método de entrada.
A saída estará no formato 1 2 : 5 9 am
, onde há um espaço inicial, dois espaços entre cada número (na essência, cada número já possui um espaço em cada lado), um espaço entre: (dois pontos) e os números vizinhos e um espaço entre o último número e am/pm
, com uma nova linha inicial e / ou final opcional. Todos os espaços estão entre o ponto mais à direita do símbolo à esquerda e o ponto mais à esquerda do símbolo à direita.
Saída implícita é permitida.
O menor tamanho de byte vence.
O am/pm
estão para ser alinhado de modo que a parte inferior do p
em pm
está alinhado com o fundo do resto da saída, isto é, o undercore denotando o topo de am/pm
começa na terceira linha para baixo (não contando uma nova linha líder).
Os dois pontos devem ser alinhados de modo que o primeiro caractere (um sublinhado) comece na segunda linha abaixo (sem contar uma nova linha principal).
Para minutes < 10
, imprima os minutos com um líder 0
(você deve receber isso na entrada). Por exemplo, [8, 04, 'pm']
-> 8 : 0 4 pm
.
Você não deve buscar os dados para os números de uma biblioteca ou recurso externo. Todos os dados devem estar contidos no programa.
Por exemplo, para a entrada [12, 47, 'am']
, a saída seria a seguinte:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Se houver casos extremos com os quais você não pode decidir o que fazer, poste nos comentários e os adicionarei aos exemplos).
Respostas:
Perl,
592579540522510 bytesSob um setor!
Este programa espera o horário no 2º formato ( "12-34-am" ) como um argumento da linha de comando.
Comentado:
Observe que, devido a problemas de codificação de caracteres, quando você cola o código acima em um arquivo, a saída pode estar um pouco malformada. Então aqui está a versão para golfe, codificada em base 64. Copie-o e cole-o em
base64 -d > 510.pl
:Aqui está a fonte que estou usando. Afastei os glifos com 12 caracteres (o tamanho da am / pm) para facilitar a indexação.
Esta fonte é 592 bytes.
A abordagem anterior usou algumas variações na compactação RLE para reduzir isso para 353 bytes, ao custo de código de descompactação de 78 bytes.
A codificação Huffman compacta a fonte em 221 bytes ao custo de 154 bytes para o algoritmo de descompressão.
fonte
Bash + utilitários GNU + figlet , 134
Não tenho certeza se o figlet é permitido ou não, mas parece fornecer as fontes corretas -
big
para os dígitos esmall
para:
e{a,p}m
:O resto é apenas obter as informações certas
date
e embaralhar a formatação para que fique correta:O Figlet pode ser instalado no Ubuntu com
sudo apt-get install figlet
.fonte
C ++, 938 bytes
Versão revisada com alguma compactação básica dos dados de entrada: teste aqui
fonte
Haskell,
932699 bytesSim, menos de 700 bytes !!
Um pouco não-destruído
Como funciona
(Isto é principalmente como o programa não destruído funciona)
clock
toma uma tupla do tempo e retorna uma string.m
é o minuto atual com o líder0
adicionado, se for<10
.hm
são as horas e minutos unidos a um:
. A última coisa que faz é transpor a saída.Bastante simples aqui.
digit
é uma função que mapeia os caracteres para os locais na string armazenada.Essa é a string mágica armazenada.
A única mudança real entre os programas golfed e ungolfed é que o programa golfed adiciona alguma compactação de string substituindo alguns padrões de caracteres comuns por
!@$
. A sequência de dados original era667
bytes; após a compactação de substituição, ela se reduz a390
bytesfonte
JavaScript (ES6),
994985 bytesTerrível tentativa com dados brutos não compactados, e um método muito difícil de produzir.
Mas ei ... é apenas a minha segunda resposta do codegolf!
Envio antigo (994 bytes) :
Divida em linhas para facilitar a leitura.
Basicamente:
fonte
Python 3,
10851072 bytesGolfe
Ungolfed
fonte