História de fundo
Isenção de responsabilidade: Pode conter informações inventadas sobre cangurus.
Os cangurus atravessam vários estágios de desenvolvimento. À medida que envelhecem e são mais fortes, eles podem pular mais e mais e pular mais vezes antes de ficarem com fome.
No estágio 1 , o canguru é muito pequeno e não pode pular. Apesar disso, é constantemente requer nutrição. Podemos representar um padrão de atividade de um canguru no estágio 1 como este.
o
No estágio 2 , o canguru pode fazer pequenos saltos, mas não mais do que 2 antes de ficar com fome. Podemos representar o padrão de atividade de um canguru no estágio 2 como este.
o o
o o o
Após o estágio 2, o canguru melhora rapidamente. Em cada estágio subsequente, o canguru pode pular um pouco mais alto (1 unidade na representação gráfica) e duas vezes mais. Por exemplo, o padrão de atividade de um canguru do estágio 3 se parece com isso.
o o o o
o o o o o o o o
o o o o o
Para o estágio n , o padrão de atividade consiste em 2 saltos em forma de V n-1 de altura n .
Por exemplo, para o estágio 4 , existem 8 saltos de altura 4 .
o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o
Tarefa
Escrever um programa completo ou uma função que leva um número inteiro positivo n como entrada e devolve a impressão ou representação ASCII arte de uma fase n padrão de actividade de canguru.
O espaço em branco circundante e os códigos de escape ANSI são permitidos, desde que o padrão pareça exatamente como representado acima.
Se você escolher uma função que retorne a saída, ela deverá retornar uma única sequência de caracteres ou matriz de caracteres que exiba a saída adequada quando impressa. Retornar uma matriz de seqüências de caracteres não é permitido.
Você pode usar qualquer caractere que não seja espaço em branco imprimível em vez de o
, desde que seja consistente no padrão de atividade e em todos os padrões da sua resposta.
Isso é código-golfe ; que a resposta mais curta em bytes ganhe!
o
. Você também pode usar qualquer caractere para representar os espaços (desde que sejam diferentes?)?Respostas:
05AB1E ,
1210 bytesExplicação:
Usa a codificação CP-1252 . Experimente online!
fonte
MATLAB,
92 90 8684 bytesExperimente online!
eye
cria uma matriz de identidade. Se virarmos e concatenarmos o original, ou seja[fliplr(p),p]
, obtemos (paran=3
):Com
repmat(...,1,2^n/2)
repetimos esse2^(n-1)
tempo e obtemosA partir disso, apenas excluímos as colunas desnecessárias, com
A(:,n+1:n:end)=[];
fonte
Carvão , 14 bytes
Experimente online!
Explicação
Nλ
insere um número inteiro emλ
.P^
é uma impressão multidirecional (SE e SW) de×λo
(multiplicação de cadeia de caracteresλ
como
). Em seguida,F⁻λ¹
executa um loop for forλ - 1
, no qual‖O→
reflete a coisa toda à direita com sobreposição.fonte
P^
é uma impressão multidirecional (SE e SW) " Legal, isso é algo que você não vê com muita frequência nas linguagens de programação!Python 2 , 87 bytes
Experimente online!
Usa uma fórmula para as coordenadas
(i,j)
que contêm um círculo, depois se junta e imprime a grade. Há muito cheiro de golfe aqui -''.join
, duas faixas aninhadas,for
maisexec
, portanto é provável que haja melhorias.fonte
Python 2,
8381 bytesExperimente online!
fonte
exec
truque pode economizar um pouco mais.Befunge,
9891 bytesIsso usa um
,
no lugar doo
, pois isso nos permite salvar alguns bytes.Experimente online!
Explicação
Dado o número do estágio, n , começamos calculando os três parâmetros a seguir do padrão:
O jump_len é normalizado para evitar zero em um canguru de estágio 1 com:
Podemos, então, a saída do padrão de salto por iteração sobre o x e y coordenadas da área de saída, e cálculo do charater apropriado para a saída para cada local. A coordenada y é decrescente de n - 1 a 0, e a coordenada x faz uma contagem regressiva da largura - 1 a 0. Determinamos se um ponto precisa ser mostrado com a seguinte fórmula:
O show_dot boolean é usado como um índice de tabela para determinar o caractere real a ser produzido em cada local. Para economizar espaço, usamos o início da última linha de origem como essa tabela, e é por isso que nosso
o
personagem acaba sendo a,
.fonte
J ,
2825 bytesEconomizou 3 bytes graças a @ Conor O'Brien .
Isso é baseado no truque palíndromo da solução da @ muddyfish .
Experimente online!
Explicação
fonte
' o'{~3 :'(}."1,.~|."1)^:y=i.y'
. Eu gostaria de encontrar uma maneira de remover esse verbo explícito ... Droga^:
.u&v
muito bom.Pyke, 11 bytes
Experimente aqui!
fonte
Haskell , 100 bytes
Experimente online! Uso:
k 3
.Explicação:
Dada uma linha
r
, uma colunac
em = 2(n-1)
umo
são definidos se foremc mod m
iguaisr
oum-r
. A compreensão da lista mais externa define a gama der
partirn-1
para0
os próximos um conjuntos a gama dec
partir0
param*2^(n-1)
ea mais interna atua como condicional retornar'o'
se a fórmula acima é cumprido e' '
de outra forma. Isso gera uma lista de seqüências de caracteres que é transformada em uma única nova linha separada porunlines
. Comon=1
a função produz um erro de divisão por zero, esse caso é tratado explicitamente na primeira linha.fonte
['o'|mod c m`elem`[m-r,r]]
parte!C #,
180, 173171 bytesNão vai ganhar isso, postando para outros competidores em C # como algo que eles podem vencer.
programa completo:
edit: -7 bytes graças a @KevinCruijssen
editar: -2 bytes, simplificado se
fonte
,i
; você pode reutilizar emi
vez den-1
após a verificação se;||
pode ser|
;j++
pode ser removido e++
adicionado aj
. Assim, no total:(n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};
( 173 bytes )||
e o&&
mantive no programa completo.Pitão , 30 bytes
Um programa que recebe a entrada de um número inteiro e imprime o resultado. Usa aspas em
"
vez deo
.Experimente online!
Como funciona
fonte
Python 2 ,
11511310898 bytesExperimente online!
Usando
range(-n+1,n-1)
para criar o número absoluto de espaços entre a parte inferior e ao
para gerare depois anexando mais cópias, girando 90º tudo e acrescentando a última
o
no canto inferior direitofonte
J ,
5847 bytesEconomizou 11 bytes usando a idéia da matriz de identidade da solução da @ flawr .
Experimente online!
Uma aplicação direta da definição.
Explicação
Para
n = 3
, cria a matriz de identidade da ordem n .Então espelhe para fazer
Repita isso 2 n -1 vezes e solte a cabeça de cada linha nas duplicatas
Use esses valores como índices na matriz de caracteres
[' ', 'o']
para gerar uma matriz de caracteres 2Dfonte
JavaScript (ES6), 83 bytes
fonte
Gelatina , 11 bytes
TryItOnline!
Quão?
O caractere imprimível usado é
0
.Baseia-se no método da resposta de Dennis à sua pergunta anterior sobre o assunto de cangurus.
fonte
ŒḄ¡Ṭ€z0o⁶ṚY
.MATL, 27 bytes
Experimente no MATL Online
fonte
Python 3 , 177 bytes
Experimente online!
fonte
Perl 6 ,
1049388 bytesInsere
o
em uma matriz 2D e depois imprime.fonte
05AB1E , 16 bytes
Experimente online!
Porquê e como?
fonte
Java 8, 254 bytes
Golfe:
Ungolfed:
Saída do programa:
fonte
PHP, 157 bytes
Ungolfed:
fonte
'o'
com1
e todos''
com0
. Espero que funcione. Além disso, os espaços podem ser substituídos porO
ou9
. O importante é o padrão, de acordo com as regras. Mas verifique primeiro