Introdução
Imagine que a linha de caracteres seja de fato duas linhas. A linha superior - pontos - representa horas (sistema 24 horas), enquanto as vírgulas inferiores representam minutos . Um personagem pode representar hora, minuto ou ambos - sempre que possível.
No começo, provavelmente você precisaria converter minutos desde a meia-noite para horas e minutos .
O resultado é a sequência que mostra a hora atual em "formato de ponto". A contagem de pontos ( apóstrofo conta aqui como um ponto e será chamado assim! ) É a contagem de horas desde a meia-noite e a contagem de vírgulas é a contagem de minutos. Vou mostrar alguns exemplos para deixar claro.
- (Observação) hh: mm -
result
- (Apenas horas) 05:00 -
'''''
- (Apenas alguns minutos) 00:08 -
,,,,,,,,
- (horas <minutos) 03:07 -
;;;,,,,
- (horas> minutos) 08:02 -
;;''''''
- (horas = minutos) 07:07 -
;;;;;;;
- (o começo do dia) 00:00 -
( resultado vazio )
Observe que o caractere "ambos" pode ser usado no máximo 23 vezes - para 23: xx, em que xx é 23 ou mais.
Símbolos
Se o personagem precisar (consulte a regra 5.) escapar do seu idioma, você poderá alterá-lo para uma das alternativas. Se essas alternativas não forem suficientes, você pode usar outros símbolos - mas mantenha-o razoável. Só não quero que escapar seja uma barreira.
;
(ponto e vírgula) - marcador para ambas as horas e minutos (alt::
)'
(apóstrofo) - marcador para hora (ALT:'``°
),
(vírgula) - marcador para minuto (ALT:.
)
Regras adicionais
- O código com a menor quantidade de bytes vence!
- Você deve usar os dois símbolos sempre que possível. Para 02:04, o resultado não pode ser
'',,,,
, nem;',,,
. Tem que ser;;,,
- Entrada - pode ser parâmetro de script / aplicativo, entrada do usuário (como linha de leitura) ou variável dentro do código
3.1. Se a variável dentro do código for usada, seu comprimento deverá ser o maior possível. É1439
(23:59), então parecet=1439
- A parte comum que é simbolizada pelo caractere "both" (12 em 12:05, 3 em 03:10) deve ser colocada no início da string
- Os símbolos podem ser substituídos por alternativas apenas se precisarem ser escapados em seu código.
- A entrada é fornecida em minutos após as 00:00 . Você pode assumir que este é um número inteiro não negativo.
Casos de teste
Input: 300
Output: '''''
Input: 8
Output: ,,,,,,,,
Input: 187
Output: ;;;,,,,
Input: 482
Output: ;;''''''
Input: 427
Output: ;;;;;;;
Input: 0
Output: (empty)
1439
é23:59
e não1339
. (23 x 60 + 59).Respostas:
Pitão, 19 bytes
Suíte de teste
fonte
CJam,
222019 bytesToma entrada de STDIN:
Teste aqui.
Explicação
Foi muita sorte o quão bem as coisas funcionaram juntas aqui, em particular a atribuição de horas
'
e minutos para,
que a ordem de horas e minutos na pilha correspondesse à representação em cadeia do personagem.Este é o único bloco de 3 bytes que encontrei até agora. Havia toneladas de soluções de 4 caracteres:
fonte
GNU Sed, 37
A pontuação inclui +1 para a
-E
opção sed.Eu não estava particularmente impressionado com a capacidade de resposta da minha resposta , então pensei em tentar com o sed por diversão.
A entrada é unária, conforme esta meta-resposta .
Experimente online
fonte
Python 2, 56 bytes
Uma função que imprime (um caractere menor que
t=input();
).O método é semelhante ao de Loovjo . O número de
,
é diferente entre minutos e horas, com um mínimo implícito de 0. Pois'
, é a negação. Para;
, calcula omin
implicitamente, levando quantas;
horas e, em seguida, truncando para o número de minutos.Ele salva caracteres para salvar
d
, mas não o número de horas e minutos aqui. O análogo com lambda tinha dois caracteres a mais (58), portanto as atribuições variáveis valem a pena.O processamento da entrada diretamente também não salvou caracteres (58):
Outra estratégia com fatiar, por muito mais tempo (64):
fonte
Retina , 24
Porto trivial de minha resposta sed .
A entrada é unária, conforme esta meta-resposta .
Experimente online.
fonte
Pure Bash (sem utilitários externos), 103
Obrigado a F.Hauri por salvar 2 bytes.
fonte
$1
e$2
emp()
e escreverp , $c
na linha 3.printf "%s"
, tendoc
o trabalho vai esvaziar bem (embora não reutilizada)C, 119 bytes
Detalhado
fonte
putchar
& literais inteiro como personagens salva um byte, puxando as vírgulas dentro do macro economiza mais dois :)while
na macro #define. -1 byteHaskell,
6866 bytesExemplo de uso:
A parte inteligente aqui é que
replicate
retornará a string vazia se o comprimento fornecido for negativo ou zero, para que eu possa aplicá-la às duas diferenças e apenas a positiva seja exibida. A primeira parte é fácil, já que o número de ponto e vírgula é apenas o mínimo dos dois. Em seguida,zipWith
aplica a função aos itens correspondentes.Edição: percebi que eu estava usando o char errado por minutos
EDIT 2: salvou 2 bytes graças a @Laikoni
fonte
concat$
porid=<<
.JavaScript (ES6) 69
fonte
Powershell,
9985 bytesparam($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)
Usando o método de Loovjo , esta é a minha implementação do PowerShell.
destroçado
Economizou 14 bytes graças ao AdmBorkBork
fonte
$m
e$h
para ele e, em seguida, usando a multiplicação booleana. Como assim -param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
Python 3, 98 bytes
Provavelmente não é a melhor resposta, mas foi muito divertido!
fonte
Python 2, 61 bytes
Explicação:
fonte
PHP, 81 bytes
Eu fui para a entrada variável, pois é mais curta do que ler
STDIN
ou aceitar argumentos de linha de comando.fonte
240
. Experimente$i>=min($h,$m)?$h<$m?",":"'":";"
(+1 byte). Ou usefor($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];
(76 bytes). Entre: aspas simples torna-r
impossível; portanto, você deve usar o backtick por horas, se estiver em uma string ou°
autônomo (não precisa de aspas -> -1 byte).JavaScript (ES6),
7771 bytesfonte
Perl 6,
103101989769 bytesProduz várias matrizes, mas foda-se,aproveite. Como sempre, qualquer oportunidade de golfe é appericada.Edit: -2 bytes: ficou corajoso e removeu alguns lançamentos.
Edit2: -3 bytes removendo as matrizes.
Edit3: -1 byte para imprimir no formato correto, usando "lambdas" e removendo parênteses.
Edit4: (desculpe pessoal) abusando dessa hora - minutos devem retornar 0 e o oposto. Removido se instruções. Em seguida, removendo os suportes, percebendo que eu não precisava do lambda. -28 bytes :)
Woah, estou melhorando nisso.
fonte
C, 141 bytes
fonte
h>0||m>0
. Então você precisah--;m--;
apenas uma vez em cada iteração e o{}
forif/else
fica obsoleto.else if(h&&!m)
você pode apenas terelse if(h)
if
eelse
.scanf()
.%24
é necessário - o máximo de entrada é 23:59.Gema, 119 caracteres
Exemplo de execução:
fonte
Matlab: 89 bytes
Teste:
fonte
SmileBASIC, 59 bytes
Explicado:
Parece muito terrível, desde a parte inferior
;
não é ainda o mesmo que,
na fonte de SmileBASICfonte
PHP, 81 bytes
mais algumas soluções:
Corra com
echo <time> | php -R '<code>'
.Substitua
1439
por entrada, salve no arquivo, execute.fonte
Ruby, 50 caracteres
Graças a:
Esperou tanto tempo para usar
Numeric.divmod
, apenas para perceber que é horrivelmente longo.Exemplo de execução:
fonte
(?;*h=t/60)[0,m=t%60]
",',"[0<=>m-=h]*m.abs
05AB1E , 25 bytes
Experimente online!
60‰vy„'.Nè×}
definitivamente pode ser encurtado, eu simplesmente não consegui descobrir e duvido que consiga economizar 7 bytes para vencer com essa abordagem, a menos que exista uma versão vetorial do×
.Exemplo (com entrada igual a 63):
D60÷''×s60%'.ׂ.BøJ„'.';:ðK
foi a minha versão original, mas isso é ainda mais caro que o divmod.60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ
ainda outro método que eu tentei ...fonte
dc , 95 bytes
Experimente online!
fonte
Java 8,
1019986 bytesExplicação:
Experimente aqui.
fonte