Descrição da trança
Nesta trança, quando um fio passa por cima de outro fio, ele adiciona o valor do outro fio a si próprio e todos os outros valores de fio passam. A trança tem três fios e cada fio começa em 1. O primeiro cruzamento é o fio mais à esquerda que cruza o fio médio. O próximo cruzamento é o fio mais à direita que cruza o novo fio do meio (anteriormente o fio mais à esquerda). Esses dois passos dos crossovers se repetem. Em outras palavras, o primeiro cruzamento é [a, b, c] -> [b, a+b, c]
e o segundo é [a, b, c] -> [a, b+c, b]
. Usando essas regras aqui estão os seis primeiros níveis da trança:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Sua tarefa
Escreva um programa ou função golfed que aceite um número inteiro como o nível da trança e produza os três valores para esse nível da trança. Você deve indicar se seus níveis são baseados em zero ou um. A entrada e a saída podem vir em qualquer formato razoável e o espaço em branco à direita é permitido.
Casos de teste (com base em 1)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Respostas:
MATL ,
181716 bytesA entrada é baseada em 0.
Experimente online! Ou verifique todos os casos de teste .
Explicação
Dado um vetor de linha
[a b c]
, o próximo vetor é obtido após a multiplicação da matriz porou
dependendo se o índice de iteração é ímpar ou par. Por exemplo, o produto da matriz
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
fornece[3 4 2]
. Então[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
dá[3 6 4]
, e assim por diante.Observe também que a segunda matriz é igual à primeira rotação de 180 graus, que pode ser explorada para salvar alguns bytes.
fonte
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
e as diferentes posições iniciais são bastante semelhantes para pares e ímparesn
Haskell, 51 bytes
Isso usa indexação baseada em 0. Exemplo de uso:
(f(1,1,1)!!) 10
->(28,60,41)
.f
cria a lista infinita de triplos trançados e(f(1,1,1)!!)
escolhe o enésimo.f
em si é uma recursão simples que faz uma lista de seus argumentos, seguida pelo cruzamento à esquerda e uma chamada recursiva com o cruzamento à esquerda e à direita.fonte
Ruby,
6057 bytesOs níveis são baseados em 1.
Com base na seguinte fórmula:
Agradeço a Neil por 3 bytes de folga com algumas travessuras bacanas.
fonte
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 bytes
Experimente online!
fonte
Gelatina , 14 bytes
Experimente online!
Como funciona
fonte
TI-Basic, 58 bytes
One-based.
fonte
Prompt
é um comando de 2 bytes.Prompt
é apenas um byte. Mas obrigado por explicar o conceito de tokens :)PowerShell 2 ou mais, 75 bytes
Índice baseado em 1
Experimente online! ou Experimente todos os casos de teste!
O loop sempre é executado uma vez, então, no caso do nível de trança,
1
eu simplesmente começo com uma matriz de,1,1,0
portanto, o resultado do algoritmo com make1,1,1
.$a[1]
é sempre o meio, então apenas determino se o outro elemento index ($d
) será0
ou com2
base em se o nível atual é par ou ímpar. O PowerShell suporta várias atribuições de uma só vez, para que a troca se torne tão fácil quanto$x,$y=$y,$x
é basicamente o que estou fazendo com os elementos da matriz, apenas incorporando a adição nessa atribuição.fonte
Javascript (ES6), 55 bytes
repl.it
Baseado em 1
Esta é apenas uma parte da resposta Ruby da @ Maçaneta da porta com o impressionante golfe bit a bit da @ Neil.
fonte
Befunge, 64 bytes
Experimente online!
Explicação
fonte
05AB1E , 17 bytes
Experimente online!
fonte
Java 8, 121
Isso usa níveis baseados em um:
Ungolfed, com programa de teste:
Saída:
fonte
Idioma do GameMaker, 113 bytes
Um indexado, com base na solução recursiva da Maçaneta da porta. Por favor, não pergunte por que você não pode inicializar uma matriz primitiva de uma só vez no GameMaker, eu realmente não sei ...
Programa principal (69 bytes):
Subprograma
a
(46 bytes):fonte
Perl 6 , 60 bytes
Baseado em zero.
Diretamente gerou a sequência infinita preguiçosa e depois a indexa.
Provavelmente existem abordagens melhores.
fonte
Clojure, 98 bytes
Mantém o controle do valor atual
v
e de quais posições o somatório deve ser feito para a próxima rodada. Inicia um estado antes da[1 1 1]
indexação baseada em 1.fonte
C #
8886 bytesExplicação
fonte
Mathematica, 68 bytes
Definição recursiva direta de uma função sem nome, usando um argumento inteiro positivo e retornando uma lista ordenada de três números inteiros.
fonte