O triângulo de Seidel é uma construção matemática semelhante ao triângulo de Pascal e é conhecido por sua conexão com os números de Bernoulli.
As primeiras linhas são:
1
1 1
2 2 1
2 4 5 5
16 16 14 10 5
16 32 46 56 61 61
Cada linha é gerada da seguinte maneira:
Se o número da linha for par (indexado 1):
Reduza o primeiro item da linha anterior
Cada próximo item é a soma do item anterior e o item acima dele
Duplicar o último item
Se o número da linha for ímpar:
Reduza o último item da linha anterior
Indo para trás , cada item é a soma do item anterior e o item acima dele
Duplique o que agora é o primeiro item.
Basicamente, construímos o triângulo em um padrão em zig-zag:
1
v
1 > 1
v
2 < 2 < 1
v
2 > 4 > 5 > 5
Para mais informações, consulte a página da Wikipedia sobre números de Bernoulli.
O desafio:
Dado n
, como argumento de função ou a partir de STDIN, imprima ou retorne a n
quinta linha do triângulo Seidel ou as primeiras n
linhas. Você pode usar a indexação 0 ou 1.
Você não precisa manipular entradas negativas ou não inteiras (nem 0, se indexadas em 1). Você não precisa lidar com saídas maiores que2147483647 = 2^31 - 1
Como isso é código-golfe, faça isso no menor número de bytes possível.
Exemplos:
Nestes exemplos, o valor de retorno é a n
linha th, indexada em 0.
Input -> Output
0 1
1 1 1
2 2 2 1
6 272 272 256 224 178 122 61
13 22368256 44736512 66750976 88057856 108311296 127181312 144361456 159575936 172585936 183194912 191252686 196658216 199360981 199360981
fonte
Respostas:
Flacidez cerebral , 66 bytes
Experimente online!
A linha é indexada em 0.
fonte
JavaScript (SpiderMonkey) , 67 bytes
Esse código abusa do
sort()
método e não funciona em todos os mecanismos.As linhas são indexadas em 0.
Experimente online!
Quão?
Revertemos condicionalmente uma matriz usando o
sort()
método com uma função de retorno de chamada que ignora seus parâmetros e retorna 0 ou um número inteiro positivo. Não tente isto em casa! Isso funciona apenas de forma confiável no SpiderMonkey.Observe que a V8 provavelmente está usando algoritmos de classificação diferentes, dependendo do comprimento da matriz (menos ou mais de 10 elementos).
Comentado
fonte
sort()
deste mecanismo. Eu adicionei uma explicação.Perl 6 , 52 bytes
Experimente online!
fonte
Haskell ,
898782 bytesApenas
s
imprime as linhas na ordem em zigue-zague, a função anônima na primeira linha inverte metade das linhas.Obrigado a @nimi por economizar 5 bytes!
Experimente online!
fonte
Gelatina , 12 bytes
Experimente online!
fonte
⁸
Python 3 ,
9891 bytesExperimente online!
Mudar para a numeração de linhas com base em 0 economizou 7 bytes.
fonte
Julia 0.6 , 85 bytes
Experimente online!
Esta é uma solução recursiva em Julia. Observe que ele possui indexação baseada em 1. Daí os testes.
Versão não destruída, para entender a lógica:
Como bônus, aqui está uma versão não recursiva, mas é mais longa:
fonte
Python 2 ,
10397 bytesExperimente online!
Versão não recursiva (mais fácil de ler):
Python 2 , 106 bytes
Experimente online!
Certamente, melhor é possível!
fonte
Python 3 , 91 bytes
Experimente online!
fonte
import
e*