Descripción de la trenza
En esta trenza, cuando una cadena cruza sobre la parte superior de otra cadena, agrega el valor de la otra cadena a sí mismo y todos los demás valores de cadena pasan. La trenza tiene tres hebras y cada hebra comienza en 1. El primer cruce es la hebra más a la izquierda que cruza sobre la hebra del medio. El siguiente cruce es el filamento más a la derecha que cruza sobre el nuevo filamento medio (anteriormente el filamento más a la izquierda). Estos dos pasos de los cruces se repiten. En otras palabras, el primer crossover es [a, b, c] -> [b, a+b, c]
y el segundo es [a, b, c] -> [a, b+c, b]
. Usando estas reglas aquí están los primeros seis niveles de la trenza:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Tu tarea
Escriba un programa o función de golf que acepte un número entero como el nivel de trenza y genere los tres valores para ese nivel de la trenza. Debe indicar si sus niveles están basados en cero o en uno. La entrada y salida pueden venir en cualquier formato razonable y se permite el espacio en blanco final.
Casos de prueba (basados en 1)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Respuestas:
MATL ,
181716 bytesLa entrada está basada en 0.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Dado un vector de fila
[a b c]
, el siguiente vector se obtiene después de la matriz, multiplicándolo por cualquierao
dependiendo de si el índice de iteración es impar o par. Por ejemplo, el producto matriz
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
da[3 4 2]
. Luego[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
da[3 6 4]
, y así sucesivamente.Tenga en cuenta también que la segunda matriz es igual a la primera girada 180 grados, que puede explotarse para ahorrar unos pocos bytes.
fuente
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
y las diferentes posiciones iniciales son bastante similares para pares e imparesn
Haskell, 51 bytes
Esto usa indexación basada en 0. Ejemplo de uso:
(f(1,1,1)!!) 10
->(28,60,41)
.f
crea la lista infinita de tripletas de trenzas y(f(1,1,1)!!)
elige la enésima.f
en sí mismo es una recursión simple que hace una lista de su argumento, seguido por el crossover izquierdo y una llamada recursiva con crossover izquierdo y derecho.fuente
Ruby,
6057 bytesLos niveles están basados en 1.
Basado en la siguiente fórmula:
Gracias a Neil por 3 bytes de descuento con algunas ingeniosas travesuras bit a bit.
fuente
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 bytes
Pruébalo en línea!
fuente
Jalea , 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
TI-Basic, 58 bytes
De una sola base.
fuente
Prompt
es un comando de 2 bytes.Prompt
es solo un byte. Pero gracias por explicar el concepto de tokens :)PowerShell 2+, 75 bytes
Índice basado en 1
Pruébalo en línea! o Pruebe todos los casos de prueba!
El bucle siempre se ejecuta una vez, por lo que para el caso del nivel de trenza,
1
simplemente comienzo con una matriz de1,1,0
modo que el resultado del algoritmo lo haga1,1,1
.$a[1]
siempre es el medio, entonces solo determino si el otro elemento index ($d
) va a ser0
o en2
función de si el nivel actual es par o impar. PowerShell admite múltiples tareas a la vez, por lo que el intercambio se vuelve tan fácil como lo$x,$y=$y,$x
que básicamente es lo que estoy haciendo con los elementos de la matriz, simplemente incrustando la adición dentro de esa asignación.fuente
Javascript (ES6), 55 bytes
repl.it
Basado en 1
Este es solo un puerto de la respuesta de Ruby de @ Doorknob con el increíble golf bit a bit de @ Neil.
fuente
Befunge, 64 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 17 bytes
Pruébalo en línea!
fuente
Java 8, 121
Esto usa niveles basados en uno:
Sin golf, con programa de prueba:
Salida:
fuente
Lenguaje GameMaker, 113 bytes
Un índice, basado en la solución recursiva de Doorknob. No preguntes por qué no puedes inicializar una matriz primitiva de una vez en GameMaker, realmente no sé ...
Programa principal (69 bytes):
Subprograma
a
(46 bytes):fuente
Perl 6 , 60 bytes
De base cero.
Directamente generó la secuencia infinita perezosa, y luego la indexa.
Probablemente hay mejores enfoques.
fuente
Clojure, 98 bytes
Realiza un seguimiento del valor actual
v
y desde qué posiciones se debe realizar la suma para la próxima ronda. Inicia un estado antes[1 1 1]
de tener una indexación basada en 1.fuente
C #
8886 BytesExplicación
fuente
Mathematica, 68 bytes
Definición recursiva directa de una función sin nombre, tomando un argumento entero positivo y devolviendo una lista ordenada de tres enteros.
fuente