Algumas pessoas contam ovelhas para dormir. Outros contam cabras.
Escreva um programa ou função que capte um número inteiro positivo N e produza cabras N-1 acordadas, seguidas por uma cabra adormecida, como se alguém estivesse contando N cabras e, por fim, adormecesse.
As cabras acordadas ficam assim:
\
___/o>
-(___)"
'' ''
As cabras adormecidas ficam assim:
\
___/->
,(___)"
`` ``
Eles estão acorrentados em conjunto com um único espaço entre barba e cauda de cabras adjacentes:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
É permitido que a saída tenha espaços à direita e uma única nova linha à direita.
O código mais curto em bytes vence.
Exemplos
N = 1:
\
___/->
,(___)"
`` ``
N = 2:
\ \
___/o> ___/->
-(___)" ,(___)"
'' '' `` ``
N = 3:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
N = 4:
\ \ \ \
___/o> ___/o> ___/o> ___/->
-(___)" -(___)" -(___)" ,(___)"
'' '' '' '' '' '' `` ``
N maior deve funcionar da mesma forma.
code-golf
string
ascii-art
kolmogorov-complexity
Passatempos de Calvin
fonte
fonte
Respostas:
MATL ,
5653 bytesExperimente online!
Explicação
Cabra acordada
A cabra acordada pode ser empacotada na corda
e descompactado como será explicado em breve. No entanto, os símbolos de aspas simples precisariam ser duplicados para escapar deles, portanto a literal da cadeia de caracteres teria que ser definida como (observe os símbolos de aspas simples e a duplicação dos originais):
Para salvar bytes, definimos a string usando caracteres um ponto de código acima , evitando assim a duplicação. A string literal se torna
No final do código, subtrairemos 1 e converteremos em char. (Poderíamos fazê-lo agora, logo após a string literal; mas deixá-la para o final economizará outra duplicação de aspas simples, como veremos).
Para explicar como a string é descompactada, trabalharemos com os caracteres originais (que são produzidos no final do código com a subtilação de 1), para que a explicação seja mais fácil de seguir. Primeiro remodelamos a string
em um array de caracteres 2D de 8 linhas, na ordem principal da coluna (para baixo e depois para o outro lado). Isso preenche automaticamente a última coluna com o caractere 0 (no final do código, subtrair 1 o transformará em número -1, que convertido em char retorna novamente o caractere 0). O caractere 0 é exibido como um espaço. Tão efetivamente estamos preenchendo espaços. O resultado da remodelagem é
Agora, alternamos verticalmente:
e depois transponha e vire verticalmente novamente para produzir a cabra acordada:
As duas operações de inversão são necessárias porque a sequência empacotada original é "ao contrário". Isso é para explorar o fato de que a matriz de caracteres 2D real que representa a cabra possui 6 espaços iniciais em sua primeira linha, que são preenchidos automaticamente por preenchimento quando a string é remodelada em uma matriz 2D de 8 linhas. Mas o preenchimento é feito no final (não no início) da última coluna (não na linha), daí os movimentos e transposição.
Cabra adormecida
Uma cabra dormir é gerado a partir de uma cabra acordado por caracteres Transliterando
o
,'
,-
em-
,`
,,
respectivamente. Na verdade, por causa da transformação de um código de ponto-acima, transliterá caracteresp
,(
,'
para.
,a
,-
, que mais uma vez nos salva de ter que duplicar o símbolo aspas simples. É por isso que a operação subtrair uma foi deixada para o final do programa.Estrutura de código
N
, trabalhando com pontos de código aumentados em 1.Código comentado
fonte
Python 3.6, 102 bytes
Yaay, f-strings !
fonte
Javascript, 122 bytes
Responda
Nota lateral
No código a seguir (91 bytes), as cabras estão alinhadas verticalmente. Ele não está de acordo com o formato de saída, mas eu poderia ser interessante notar que o alinhamento horizontal necessário no formato de saída precisa de mais bytes:
fonte
Lote, 234 bytes
Recebe entrada de stdin. O lote tem problemas com
"
e>
por várias razões, então eu tenho que usar espaços reservados e depois trocá-los no final.fonte
set/pn
obras ._.^
caracteres de escape.Pyke,
5654 bytesExperimente aqui!
4 bytes a mais porque o Pyke não permite aspas duplas nas strings :(
fonte
JavaScript (ES6),
110109 bytesTer que suportar todos os três tipos de caracteres de citação foi irritante, mas felizmente o comentário de @ pinkfloydx33 me deu o flash de inspiração de que eu poderia adicionar as aspas no final, economizando 1 byte.
fonte
'+"'' ''"
(assumir aspas simples estão de volta carrapatos desde que eu não tenho idéia de como obter uma crase em um bloco de código nos comentários)f=
na minha contagem de bytes, é apenas uma questão de integridade.GolfScript , 91 bytes
Entrada:
3
Saída:
Explicação
Experimente online!
fonte
Geléia ,
6256 bytesTeste-o em TryItOnline
Quão?
fonte
PHP, 200 bytes
fonte
C ++, 180 bytes
fonte
#include <string>
eusing namespace std;
ouusing std::string;
na sua contagem de bytes se a sua função não puder ser compilada sem eles.Pip , 60 + 1 = 61 bytes
Um byte adicionado para o
n
sinalizador.Constrói uma cabra acordada como uma lista de linhas e a puxa
y
. String se multiplica para obtera-1
cabras acordadas. Substitui-o'
por,-`
iny
e concatena até o final. Imprime, separado por nova linha.Experimente online!
(Acho que é a minha primeira vez usando a sintaxe de cadeia de caracteres de escape de Pip
\"...\"
, que permite aspas duplas literais na cadeia de caracteres.)fonte
CJam , 58 bytes
Experimente online!
Explicação
fonte
Python 2.7,
101113 bytesEditar: definição de função adicionada
desc Golfificado:
Nota O Python2.7 é um byte menor que o Python3, pois não precisa de parentese durante a impressão.
fonte
n
e você perdeu a mudança da cauda da cabra adormecida (também viu a resposta do Py 3.6?).print "...
e colocar tudo em uma linha, usando 1;
para separar as duas instruções. A cauda ainda não está no código mostrado, mas parece que você contou, e tudo isso deve ter 112 bytes .05AB1E , 66 bytes
Experimente online!
Explicação
fonte
Bash + GNU Coreutils,
165155 bytesCorrer com:
Basicamente, o programa imprime N vezes do mesmo cabra (invertida), e substitui a primeira
-
, por,
, o primeiroo
para-
e do primeiro'' ''
para os crases. Então inverte as linhas.fonte
PHP,
133131 bytesEu encontrei dois bytes para jogar golfe longe de uma versão sem curlys.
fonte
PowerShell v2 +, 96 bytes
(ab) usa a
Write-Output
formatação padrão para incluir uma nova linha entre elementos. Aproveita a concatenação e multiplicação de cordas para construir as cabras linha por linha. O único truque real é a primeira linha$n--
a produzir o número correto de orelhas e depois o decréscimo,$n
para que fique correta no restante das linhas.fonte
Ruby, 102 bytes
fonte
Python 3. 170 bytes
hmm, aparentemente construir a string sem fazer a manipulação da lista gera um código mais curto
fonte
Fórmula IBM / Lotus Notes,
187174188 bytes(não competindo)EDIT Encontrei um espaço que não deveria estar lá e removeu um @Implode desnecessário
188 como eu tinha perdido o fato de que a cauda da cabra adormecida é diferente :-(
Ungolfed:
Uso:
Crie um formulário do Notes com dois campos chamados a e g.
a = editável, número, g = computado, texto.
Cole a fórmula acima em ge dê um valor padrão de 0.
Defina a fonte do formulário como Terminal.
Crie um novo documento com o formulário, digite um número em a e pressione F9 para atualizar as cabras.
Amostras:
Não competindo, pois o formato atrapalha quando o número de cabras atinge a largura da página.Dada uma tela infinitamente ampla que
devevai funcionar para qualquer número de cabrasembora. É assim que parece quando a página não é larga o suficiente.fonte
Emacs Lisp, 241 bytes
"Ligeiramente não-destruído"
onde
s
está uma cabra adormecida,a
adiciona uma cabra acordada eg(n)
é a função de contagem.fonte
Java 8,
236222218173 bytesExplicação:
Experimente online.
fonte
Tela , 58 bytes
Experimente online!
Resposta bastante chata, realmente ... constrói a cabra acordada, repete-a horizontalmente
n-1
, constrói e adiciona a cabra adormecida, imprime o resultado.fonte