Muitas pessoas estão familiarizadas com a questão de contar ovelhas para adormecer. Há um rebanho de ovelhas, algumas delas pulando uma cerca, e você conta as ovelhas quando elas pulam. Supostamente, isso ajuda a acalmar sua mente e coloca você em um estado de sono para que você adormeça.
Aqui está uma ovelha ASCII voltada para a direita, esperando para ser contada:
'00^>
||
Aqui está uma ovelha ASCII pulando uma cerca:
'00^>
/\
++
Aqui está um voltado para a esquerda, já tendo sido contado:
<^00'
||
O desafio
Dadas duas entradas inteiras, n
e m
, n > 2
descrevendo quantas ovelhas totalizam e m > 0
dizendo quantas ovelhas já foram contadas, produz uma representação de arte ASCII da contagem de ovelhas para adormecer.
Agora, para a reviravolta:
- Devido ao tamanho das canetas nas quais as ovelhas estão, a linha superior pode conter apenas um máximo de
10
ovelhas, sem contar as ovelhas que estão pulando no momento, que também devem estar sempre na linha superior. - As linhas subsequentes não podem ter as ovelhas fora de suas respectivas canetas (você não pode ter mais ovelhas à esquerda na segunda linha do que na primeira linha e o mesmo para a direita).
- Se houver
11
ou mais ovelhas totais, a linha superior deve ter10
mais as ovelhas saltadoras. - Os espaços em branco à esquerda / à esquerda e os espaços entre as ovelhas não importam, desde que:
- Há no mínimo um caractere de espaço em branco entre ovelhas
- Todos os caracteres estão alinhados adequadamente.
Desde que essas regras sejam cumpridas, o arranjo real das ovelhas depende da sua implementação.
Exemplos
Por exemplo, aqui está n=3
e m=1
, o caso mais simples.
'00^>
'00^> /\ <^00'
|| ++ ||
Aqui está n=11
e m=6
, o máximo de ovelhas que podem caber em uma linha horizontal.
'00^>
'00^> '00^> '00^> '00^> /\ <^00' <^00' <^00' <^00' <^00' <^00'
|| || || || ++ || || || || || ||
Aqui está um exemplo diferente disso, com n=11
em=1
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00'
|| || || || || || || || || ++ ||
Um exemplo maior com n=30
em=12
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> <^00' <^00'
|| || || || || || || || || ||
'00^> <^00' <^00'
|| || ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
Aqui está um exemplo com n=17
em=2
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || ||
Aqui está um exemplo com n=19
em=3
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00' <^00'
|| || || || || || || ++ || || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || ||
'00^>
||
Observe que todos esses são exemplos . No último, você pode acabar criando uma matriz vertical de ovelhas no lado direito, o que permitirá que o lado esquerdo se encaixe em duas linhas. Ou talvez um quadrado 2x2 de ovelhas no lado direito, que também encaixaria a ovelha do lado esquerdo em duas fileiras. Etc.
E / S e regras
- A entrada pode ser obtida em qualquer formato razoável e por qualquer método conveniente .
- Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os caracteres sejam alinhados adequadamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- A saída pode ser no console, retornada como uma lista de cadeias, retornada como uma única cadeia, etc.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
n=11
em=9
n=11
tal0<m<=10
. Isso força você a ter todas as ovelhas na linha superior e um número dinâmico de ovelhas à esquerda (n-1-m
) e à direita (m
) da cerca e não pode usar tamanhos de caneta fixos.Respostas:
APL (Dyalog Unicode) , 118 bytes SBCS
Infix anônimo lambda. Toma
n
como argumento à esquerda em
como argumento à direita. Retorna um resultado de matriz aninhada, mas a exibição padrão dessa matriz aninhada segue as especificações. Usa até nove colunas para ovelhas contadas e as colunas restantes para ovelhas em espera.Experimente online!
{
...}
lambda anônima;⍺
é argumento à esquerda,⍵
é argumento à direitaEssa função possui três partes distintas: Aguardando , Pulando e Contado . Cada um está entre parênteses, fazendo com que o resultado seja uma lista de três elementos.
Contado
(r⍴(×/r←9,⍨∘⌈⍵÷9)↑⍵⍴⊂S←⌽↑''(b←'''00^<')' ||')
''(
…)' ||'
As três linhas de uma ovelha contada espelhada, sendo a do meio:b←'''00^<'
o corpo e é designado parab
↑
misture a lista de strings em uma matriz de caracteres (preenchimento com espaços)⌽
espelhar issoS←
atribuir aS
(big S heep)⊂
anexá-lo para que possamos lidar com isso como uma unidade⍵⍴
use o número de ovelhas contadas para remodelar ciclicamente(
…)↑
Pegue o seguinte número de elementos (preenchimento com itens prototípicos, ou seja, a mesma matriz, mas com todos os caracteres substituídos por espaços)⍵÷9
um nono do número de ovelhas contadas⌈
arredondar para cima9,⍨
acrescentar 9 a issor←
atribuir ar
(o que vai r eshape com; linhas e colunas)×/
produto dessa lista (são quantos elementos precisamos, incluindo preenchimentos)r⍴
remodelar isso para uma matriz com os comprimentos de cotar
Jumping
(↑(s←'>',⍨¯1↓b)' /\' ' ++')
(
…)' /\' ' ++'
As três linhas de uma ovelha saltadora, sendo a primeira:¯1↓b
solte o último caractere deb
'>',⍨
anexar uma cabeça voltada para a direitas←
loja ems
(pequeno s heep)↑
misture a lista de strings em uma matriz de caracteres (preenchimento com espaços)Esperando
(r⍴(×/r←d,⍨⌈w÷d←10-⍵⌊⊢/r)↑w⍴(w←⍺-⍵+1)⍴⊂s@2⌽S)
⌽S
espelhoS
s@2
coloques
na linha 2 disso (substituindo os dados atuais lá)⊂
anexá-lo para que possamos lidar com isso como uma unidade(
…)⍴
Remodelar ciclicamente isso para o seguinte tamanho:⍵+1
o número de ovelhas contadas mais uma⍺-
subtrair que do totalw←
atribuir aw
( w aiting)(
…)↑
Pegue o seguinte número de elementos (preenchimento com itens prototípicos)⊢/r
o elemento mais à direita der
(ou seja, o número de colunas usadas para ovelhas contadas)⍵⌊
o mínimo do total e que10-
subtrair que de dezd←
atribuir ad
( d ifference; colunas ausentes)w÷
dividirw
por isso⌈
arredondar para cima (fornece o número de linhas necessárias)d,⍨
acrescentard
r←
atribuir ar
(o que vai r eshape com; linhas e colunas)×/
produto dessa lista (são quantos elementos precisamos, incluindo preenchimentos)r⍴
remodelar isso para uma matriz com os comprimentos de cotar
fonte
n=11,m=9
e a regra "a linha superior deve ter 10 mais a ovelha saltadora"?Javascript,
281,293, 288 bytesTenha cuidado ao usar o trecho abaixo, pois há um grande risco de narcolepsia induzida repentina.
fonte
m = n
você receber um erro.C, 392 bytes
Agradecemos a Jonathan Frech por salvar um byte!
Experimente online!
Desenrolado:
fonte
y+=1+!t
pode sery-=~!t
.Python 2 ,
222277 bytesExperimente online!
fonte
n=11
em=2
.AWK , 293 bytes
Experimente online!
Tentei usar substituições de string para evitar alguns loops, mas foi preciso muito mais código.
Explicação
Devo dizer que a arte das ovelhas é bem fofa. :)
fonte
Carvão , 98 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Insira o número de ovelhas que já foram contadas.
Insira o número total de ovelhas e calcule quantas ainda precisam ser contadas.
Crie uma matriz de duas matrizes. Cada matriz possui os seguintes elementos:
Reflita a tela e imprima as ovelhas pulando pela metade.
Passe pelas ovelhas daquele lado.
Imprima uma ovelha.
Se este for o fim da linha, imprima algumas linhas e espaços novos para chegar ao início da próxima ovelha.
fonte