A ampulheta
Essa ampulheta possui 60 "areias do tempo" e preenche completamente cada câmara. O relógio tem 19 caracteres de largura e 13 caracteres de altura. Cada câmara possui 5 fileiras de areia e existe uma fileira no centro que pode conter 1 areia. A linha superior pode conter 17 areias, a próxima 15 e assim por diante (veja abaixo). As areias caem na câmara inferior a uma taxa de uma areia por segundo.
START 3 SECONDS LATER 38 SECONDS LATER
███████████████████ ███████████████████ ███████████████████
█.................█ 17 █.............. █ 14 █ █ 0
██...............██ 15 ██...............██ 15 ██ ██ 0
███.............███ 13 ███.............███ 13 ███....... ███ 7
█████.........█████ 09 █████.........█████ 09 █████.........█████ 09
███████.....███████ 05 ███████.....███████ 05 ███████.....███████ 05
█████████.█████████ 01 █████████.█████████ 01 █████████.█████████ 01
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
O desafio
Exiba a ampulheta (não são necessários números ou títulos) após um certo período de tempo (0 ≤ t ≤ 60).
Regras de codificação
- A ampulheta deve parecer exatamente como mostrado aqui. Você pode substituir o
█
caractere e / ou o.
caractere pelo que desejar para ajustar ao seu idioma (problemas de compatibilidade com Unicode, ASCII). - A entrada deve ser um número como 45 ou 7. Exiba o relógio após esses segundos.
- A saída pode ser exibida ou salva em um arquivo. Não é necessário texto ou etiquetas extras, como mostrado acima - apenas a ampulheta é tudo o que precisamos.
- Se o usuário digitar t> 60, você não precisará lidar com o erro.
Pontos
- O menor código vence.
Respostas:
JavaScript ( ES6 ), 203
208 233 270 256caracteresEditar Revisado usando um loop em vez de uma sequência de chamadas.
Editar Adicionada linha superior e inferior que estavam faltando.
Uma função retornando a saída. Execute o trecho no Firefox para testar.
fonte
setTimeout( tick, 1000);
Python 2, 200
O xnor criou uma versão de 197 bytes no chat .
Gostaria de postar uma explicação, mas perdi a noção de como ela realmente funciona ...
Além disso, aqui está uma versão animada com maldições:
fonte
Python 2.7,
362356347Saída em 38 segundos:
fonte
C 544
Aqui está o que eu tenho até agora para uma solução C.
Compilado com o seguinte comando:
É certo que essa linguagem tem muito volume - a instrução include foi um pouco prejudicial, mas eu realmente estava procurando uma desculpa para praticar o uso do C.
Espero que você goste da minha solução e deixe-me saber se você encontrar maneiras de melhorar.
fonte
for
vez dewhere
, em?:
vez deif else
, variáveis int globais não precisamint
,include
não são necessárias. (Eu gosto de sua matemática)r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}
(cuidado, estranhos caracteres invisíveis são adicionados a comentários longos como este)Matlab, 252 bytes
A ideia é construir uma matriz que se parece com isso:
A partir daí, é fácil preencher as entradas com as sequências dependentes
n
(preenchendo todas as entradas maioresn
e menores quen+60
com pontos)Para
n=38
obtermos esta saída:fonte
Java, 712
A entrada é retirada da linha de comando. Lida com ambos os valores negativos para o tempo, além de maiores que o necessário.
resultado:
Preenche a areia do centro, expandindo-se para fora. Provavelmente posso jogar mais se ficar preguiçoso com o modo como preenche a metade inferior e esvazia a metade superior. Mas por enquanto eu gosto bastante.
fonte
Haskell 512 Bytes
Entrada
m 55
Resultado
m 48
Saída de Entradafonte
++
. Além disso, você pode salvar alguns bytes predefinindolength
ereverse
.C #, 382
410ainda é possível reduzi-lo em alguns bytes ...
Violinista - 38seg
fonte
int u=60-22
e não apenasint u=38
?Ruby:
196190186185184 caracteresCW porque não está em conformidade exatamente com as amostras postadas, pois isso consome areia a partir da esquerda. Principalmente apenas uma demonstração do
String.[]=
método.Exemplo de execução:
Ruby: 215 caracteres
Isso gera a saída exata exata:
Exemplo de execução:
fonte