Description de la tresse
Dans cette tresse, lorsqu'un brin traverse le haut d'un autre brin, il ajoute la valeur de l'autre brin à lui-même et toutes les autres valeurs de brin passent à travers. La tresse a trois brins et chaque brin commence à 1. Le premier croisement est le brin le plus à gauche traversant le brin du milieu. Le croisement suivant est le brin le plus à droite traversant le nouveau brin du milieu (auparavant le brin le plus à gauche). Ces deux étapes de croisements se répètent. En d'autres termes, le premier croisement est [a, b, c] -> [b, a+b, c]
et le second l'est [a, b, c] -> [a, b+c, b]
. En utilisant ces règles, voici les six premiers niveaux de la tresse:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Ta tâche
Écrivez un programme ou une fonction golfée qui accepte un entier comme niveau de tresse et génère les trois valeurs pour ce niveau de tresse. Vous devez indiquer si vos niveaux sont à zéro ou à base unique. L'entrée et la sortie peuvent avoir n'importe quel format raisonnable et un espace blanc de fin est autorisé.
Cas de test (basés sur 1)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Réponses:
MATL ,
181716 octetsL'entrée est basée sur 0.
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Étant donné un vecteur ligne
[a b c]
, le vecteur suivant est obtenu en le multipliant post-matrice soit parou
selon que l'indice d'itération est impair ou pair. Par exemple, le produit matriciel
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
donne[3 4 2]
.[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
Donne ensuite[3 6 4]
, et ainsi de suite.Notez également que la deuxième matrice est égale à la première rotation de 180 degrés, qui peut être exploitée pour économiser quelques octets.
la source
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
et les différentes positions de départ sont assez similaires pour les paires et impairesn
Haskell, 51 octets
Cela utilise une indexation basée sur 0. Exemple d'utilisation:
(f(1,1,1)!!) 10
->(28,60,41)
.f
crée la liste infinie de triplets de tresses et(f(1,1,1)!!)
sélectionne le nième.f
lui-même est une simple récursion qui fait une liste de son argument, suivi du croisement gauche et d'un appel récursif avec croisement gauche et droit.la source
Rubis,
6057 octetsLes niveaux sont basés sur 1.
Basé sur la formule suivante:
Merci à Neil pour 3 octets de moins avec quelques astucieux manigances au niveau du bit.
la source
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 octets
Essayez-le en ligne!
la source
Gelée , 14 octets
Essayez-le en ligne!
Comment ça marche
la source
TI-Basic, 58 octets
Sur une base.
la source
Prompt
est une commande de 2 octets.Prompt
n'est qu'un octet. Mais merci d'avoir expliqué le concept des tokens :)PowerShell 2+, 75 octets
Index basé sur 1
Essayez-le en ligne! ou essayez tous les cas de test!
La boucle s'exécute toujours une fois, donc pour le cas du niveau de tresse,
1
je commence simplement par un tableau de1,1,0
sorte que le résultat de l'algorithme avec make it1,1,1
.$a[1]
est toujours le milieu, alors je détermine simplement si l'autre élément index ($d
) va être0
ou2
basé sur si le niveau actuel est pair ou impair. PowerShell prend en charge plusieurs affectations à la fois, donc l'échange devient aussi simple que$x,$y=$y,$x
ce que je fais essentiellement avec les éléments du tableau, en incorporant simplement l'ajout dans cette affectation.la source
Javascript (ES6), 55 octets
repl.it
1 base
Ceci est juste un portage de la réponse Ruby de @ Doorknob avec le golf au niveau du bit impressionnant de @ Neil.
la source
Befunge, 64 octets
Essayez-le en ligne!
Explication
la source
05AB1E , 17 octets
Essayez-le en ligne!
la source
Java 8, 121
Cela utilise des niveaux à base unique:
Non golfé, avec programme de test:
Sortie:
la source
Langue GameMaker, 113 octets
Un index, basé sur la solution récursive de Doorknob. S'il vous plaît, ne demandez pas pourquoi vous ne pouvez pas initialiser un tableau primitif à la fois dans GameMaker, je ne sais vraiment pas ...
Programme principal (69 octets):
Sous-programme
a
(46 octets):la source
Perl 6 , 60 octets
Base zéro.
Généré directement la séquence infinie paresseuse, puis l'indexant.
Il existe probablement de meilleures approches.
la source
Clojure, 98 octets
Garde une trace de la valeur actuelle
v
et à partir de quelles positions la somme doit être faite pour le prochain tour. Démarre un état avant le[1 1 1]
pour avoir une indexation basée sur 1.la source
C #
8886 octetsExplication
la source
Mathematica, 68 octets
Définition récursive simple d'une fonction sans nom, prenant un argument entier positif et renvoyant une liste ordonnée de trois entiers.
la source