Estou cansado, mas não consigo adormecer. Ajude-me a contar ovelhas.
Dada a entrada N (número inteiro positivo), faça N ovelhas saltarem sobre uma cerca ascii, como na amostra abaixo. Somente um quadro deve ser exibido por vez:
o |-|
──|-|── 0
o|-|
──|-|── 0
o
|-|
──|-|── 0
|-|o
──|-|── 0
|-| o
──|-|── 0
o |-|
──|-|── 1
o|-|
──|-|── 1
o
|-|
──|-|── 1
A contagem deve ser mantida no lado inferior direito do 'solo'. O espaço em branco à direita e as novas linhas são permitidos. Se o seu idioma de escolha tiver dificuldade em limpar a tela para cada quadro, você poderá adicionar novas linhas suficientes para limpar a tela - indique quantas linhas você adiciona para isso na sua resposta. O programa deve terminar quando a ovelha N'th estiver no quinto floortile.
Preciso acordar cedo amanhã, para ganhar o menor código em bytes. Envie uma função ou programa completo. Aplicam-se brechas padrão.
N=3
o último quadro conterá uma ovelha na extremidade direita e o contador ainda dirá2
. Isso está correto?Respostas:
MATL ,
605653 bytesA animação com o código acima é executada muito rapidamente. A versão a seguir inclui uma pausa para tornar a animação mais lenta e, portanto, mais fácil de ver (não exigida pelo desafio), ao custo de mais 4 bytes:
Experimente no MATL Online! O intérprete é uma versão beta; atualize a página se não funcionar.
Ou veja uma gravação do compilador offline:
Explicação
fonte
JavaScript (ES6),
120124 bytesO último quadro calculado é exibido primeiro. Graças a isso, o número do salto é
n-1
In
alert
, os caracteres têm largura diferente, então parece que ele está quebrado.Mostrar snippet de código
Resposta anterior:
120 bytes, o número do salto está errado porque inicia em 1 em vez de 0
fonte
alert
. Eu tenho o mesmo resultado que o chrome com edge, e é pior com o firefox.JavaScript (ES6),
144142 bytesLimpa a saída e aguarda 300ms entre cada quadro:
Você pode testá-lo aqui (certifique-se de abrir o console).
fonte
4
de5
) após a última ovelha saltou o muro ...Ruby, 83 bytes
Imprime em stdout. Saída separada por novas linhas. Reduzir a altura da tela para 3 torna visível apenas uma imagem por vez.
fonte
C #, 234 bytes
fonte
string[] args
e parafor (int
.Int32.Parse
poderia serint.Parse
.Program
apenasP
ou algostring
poderia servar
. O número inteiro no loop for pode ser inicializado ao mesmo tempo em que você analisaargs[0]
um número inteiro.Action<string[]>
e você pode remover os suportes em torno do exterior para o laço então eu acredito que eu recebo 200 bytes:using C=System.Console;a=>{for(int n=0;n-1+""!=a[0];++n)foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write(" \n |-| \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}};
PHP + JavaScript, 168 bytes
Salve em arquivo
s.php
, ligue no navegador coms.php?n=<n>
.Chama a si próprio com novos parâmetros para cada quadro, sem demora.
Eu poderia economizar mais 5 com
index.php
; mas não quero ir tão longe.fonte
C AB|─|DE ──|─|── $c",EABCD,$s),($c+=!$f)<$n?"
.short_open_tag
desativou. Habilite-o (padrão) ou adicionephp
+ espaço depois<?
.Tcl, 168 bytes
Versão usando tela com 10 linhas de altura. (Substitua o
7
abaixo pela altura da tela em colunas menos quatro.)Isso é muito rápido, então você pode adicionar uma pausa na linha dois:
Tcl, 177 bytes
Ele funciona reutilizando a string na parte superior para duas coisas diferentes:
O modelo em si é a imagem da string a ser exibida. Primeiro, mapeamos (substitui a string) o dígito da posição atual da ovelha (loop interno) para um 'o'. Em seguida, mapeamos os dígitos restantes para os espaços. Em seguida, imprimimos a sequência resultante.
(A string em si inicia após o último {na terceira linha e termina com o mais à esquerda} na última linha.)
fonte
QBasic, 110 bytes
Loops sobre
5*n
carrapatos. A cada marca, limpa a tela, imprime a contagem de estilos e ovelhas e, em seguida, usa-aLOCATE
para imprimiro
no local apropriado. Comx
sendo o código de posição entre 0 e 4:(x=2)+2
x=2
for verdade,-1+2
=1
x=2
for falso,0+2
=2
1+x-(x>1)+x\3
x
é0
ou1
,x>1
é falso ex\3
é0
:1+x-0+0
=1
ou2
x
for2
,x>1
é verdadeiro ex\3
é0
:1+x-(-1)+0
=4
x
é3
ou4
,x>1
é verdadeiro ex\3
é1
:1+x-(-1)+1
=6
ou7
Finalmente,
SLEEP
por 1 segundo e loop. Se você não se importa em pressionar Enter em todos os quadros, posso raspar dois bytes removendo o argumento paraSLEEP
.fonte
PHP,
132131 bytesEdita após os comentários (obrigado!):
Que é não destruído:
Postagem original
Testado no ubuntu (não sei, se
system("clear")
funciona no windows)Ungolfed:
fonte
clear
não precisa de aspas.cls
no DOS.$i=0;
avisos, normalmente não são exibidos no código golf (-5 bytes). Pelo mesmo motivo, você não precisa de aspas ao redorclear
eo
(-4 bytes). Substitua os\n
s por novas linhas reais (-2 bytes). Como você possui apenas expressões, e não nenhuma instrução, você pode colocar tudo, exceto a última no seufor
loop, permitindo remover os colchetes (for(;;system(clear),$c=…)sleep(1);
) (-2 bytes). E, finalmente, você esquece de adicionar a condição$i<$argv[0]
(+ 11 bytes).node.js + suspensão , 169 bytes
Solução original
node.js,
146142185 bytesTestado apenas com o terminal ubuntu (e agora com n ovelhas):
Bem, isso é um quadro a cada 9 ms. Uma versão mais relaxante para o sono (quadro a cada 1s):
E não destruído:
fonte
05AB1E ,
666059 bytesUsos a codificação CP-1252 .
Explicação
Iteração refere-se à iteração interna (0 -> 4) da jornada das ovelhas.
Loops principais
Gerar linha superior
Gerar linha do meio
Gerar linha inferior
fonte
Geléia ,
55 5453 bytesTryItOnline
Imprime quadros separados por alimentações de linha.
Quão?
fonte
Python 2,
171159144 bytes,163151136 caracteresSolução usando uma função recursiva. Ligar como f (int)
EDITAR
-12 depois de reler os comentários e ver que a contagem não precisa aumentar quando a ovelha chegar ao fim do campo
-15 iterando diretamente a lista de índices e perdendo uma variável
Notas
Assume a codificação UTF-8
Usar - em vez de ─ (como na resposta @Luis MATL) reduziria a contagem de bytes em 8 para corresponder à contagem de caracteres e perderia a dependência UTF-8
50 novas linhas adicionadas - a saída fica na parte inferior do console (mais barata que importar e usar os.system ("clear") e funciona no Windows e Linux)
Versão com atraso de 1 segundo entre as saídas (170 bytes, 162 caracteres)
fonte
Bash + utilitários padrão do Linux (339 bytes)
fonte