Seu objetivo é gerar uma espiral de Fibonacci com números.
Exemplo de entrada / saída
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Entrada A entrada pode ser obtida através de STDIN ou argumento de função. Será um número único
Saída A saída pode ser de STDOUT ou o valor de retorno de uma função. Deve ser uma única string.
Espaço em branco extra no final da linha não é permitido. A saída pode conter dígitos, linhas de alimentação (novas linhas) e espaços.
A orientação não importa, isso significa rotações e reflexões. Desde que siga um padrão espiral de Fibonacci válido.
Números com diferentes quantidades de dígitos (por exemplo, 1 e 13) devem estar alinhados à direita. Pode ser necessário adicionar um espaço no início de uma linha para que tudo possa se alinhar.
1 1 1 1
100 100 should actually be 100 100
Você pode ver um exemplo aqui
Este é o código-golfe, pelo que o código mais curto em bytes vence!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Parece que pode ser mais claro em duas frases.Respostas:
APL, 23
Explicação:
Experimente em tryapl.org
fonte
⌸
ou⍤
) estão ausentes desse conjunto de caracteres e não podem ser usados quando você deseja evocar essa regra.Matlab, 84 bytes
Uma função é usada. A saída está em stdout.
Exemplos:
Matlab, 78 bytes
O mesmo que acima, exceto que o recurso de um Matlab é explorado, ou seja, ele exibe automaticamente a saída da função (como uma string) no stdout. Isso evita a conversão em string na abordagem acima.
fonte
Python 2, 121 bytes
As regras relaxadas sobre rotações tornam isso muito mais simples.
Não usei backticks no lugar
str(a)
daqui, porque não tenho certeza se temos mais espaços à esquerda do que o necessário, se chegarmos a longos períodos. Embora, mesmo se estivéssemos, o uso ema
si seria mais curto de qualquer maneira.fonte
Ruby,
243242236233222170130 bytesfonte
t==value
condições emt>value
. Por exemplo,(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Python -
189179174fonte
J, 36 bytes
Uso:
Método:
A função gira o quadrado atual e adiciona o novo quadrado ao atual uma
input-1
vez. O tamanho do quadrado e os valores do elemento são reunidos a partir do tamanho do retângulo anterior.Explicação do código:
Experimente online aqui.
fonte
Haskell,
183176171163 bytesA função é
f
, que pega um número e retorna uma única string:fonte
Pitão, 34 bytes
Surpreendentemente, mais da metade do código é impressão / preenchimento, em vez de gerar a matriz.
A geração da matriz é realmente simples, no entanto, consiste em uma transposição e reversão e adição de N linhas contendo N cópias de N, onde N é o número atual de linhas.
Exemplo de saída para 7:
fonte
Perl,
289 277257 bytesfonte
K, 48 bytes
E em ação:
Pode ainda haver boas oportunidades para jogar golfe.
O programa consiste basicamente em duas partes - gerando a matriz concatenada e formatando-a para saída. O primeiro é bastante simples:
Começando com uma matriz 1x1 contendo 1, construa um vetor T de comprimento T onde T é o comprimento da matriz inicial na primeira dimensão (
t#t:#x
) e anexe-o a cada linha da matriz original (x,\:
). Inverter e transpor o resultado (+|
) gira 90 graus. Fazemos isso N-1 vezes.A formatação é bastante desajeitada, porque a abordagem natural de K para imprimir uma matriz não alinhará as colunas numéricas da maneira que precisamos:
A idéia básica é pegar o elemento máximo da matriz (
|//x
), convertê-lo em uma string (unária$
), pegar seu comprimento mais um (1+#
) e depois formatar os elementos da matriz para as strings alinhadas à direita desse tamanho. Em seguida, para arrumar, junte essas strings (,/'
) e solte o espaço inicial resultante (1_'
).fonte
CJam, 48 bytes
Experimente online
A parte principal da geração do padrão parece razoavelmente direta. Gire o retângulo criado até o momento e adicione um quadrado de valores na parte inferior.
O código para preencher o resultado parece terrível, no entanto. Tentei várias combinações de operadores
f
e:
para aplicar o preenchimento à lista aninhada, mas nada funcionou. Se alguém tiver sugestões melhores, será bem-vindo.fonte
Wf%
. Além disso, você seria capaz de fazer algo assim{Se[}ff%
em vez de:U;{USe[}f%
para o preenchimento? (Que podem não funcionar como é, eu não posso pensar por ele agora.)Pitão, 29 bytes
Demonstração.
Se o preenchimento fosse livre / implícito, como no APL, ou a saída da matriz fosse permitida, isso seria 14 bytes:
fonte
Ruby, 129 bytes
Eu editei a outra resposta em ruby, mas minha alteração mais recente não está sendo aceita ou algo assim, então aqui está:
fonte
ES6, 248 bytes
Onde
\n
representa um caractere literal de nova linha.Irritantemente, a formatação ocupa uma grande parte do código.
f
é uma função auxiliar que cria uma matriz preenchida. É usado principalmente para criar os quadrados preenchidos, mas também dobra facilmente para produzir os casos base para a recursão.g
é o principal grunhido. Ele gera recursivamente a última, mas uma solução, gira-a 180 graus e acrescenta os próximos dois quadrados.fonte