Crédit
Merci à Rand Al'Thor de poser une question par lettre pour l'inspiration pour ce défi de code-golf.
Contexte
La nature de ce défi est basée sur l'algorithme mentionné par Rand dans son "Un triangle formé de trois lettres":
- Commencez avec une séquence de 10 lettres dont chacune est X, Y ou Z.
- Sous chaque ligne, construisez la ligne suivante comme suit. Si deux lettres adjacentes sont identiques, écrivez la même lettre sous elles; s'ils sont différents, écrivez la troisième lettre sous eux.
Vous répéteriez alors l'étape précédente jusqu'à ce que vous ayez une lettre dans votre dixième rangée.
Défi
Nous allons mettre un spin mathématique sur l'algorithme ci-dessus:
- Commençons par une séquence de 10 chiffres, chacun séparé par un espace, et chacun étant soit 1, 2 ou 3.
- Sous chaque ligne, construisez la ligne suivante comme suit. Si deux chiffres adjacents sont identiques, écrivez le même chiffre sous eux; s'ils sont différents, écrivez le troisième chiffre sous eux.
- Répétez l'étape précédente jusqu'à ce que vous ayez un dernier numéro.
Ainsi, en suivant cet algorithme, si vous commencez par la ligne 1 2 3 3 1 3 1 3 1 2
, par exemple, le triangle suivant est généré:
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
Je suis également curieux de connaître la somme de tous les chiffres du triangle numérique, alors ajoutez tous ces chiffres et placez ce total sur une onzième ligne, justifié à droite au dernier chiffre de la première ligne. Ainsi, notre triangle numérique ressemblera à ce qui suit (les espaces dans mon exemple sont représentés ci-dessous par le .
caractère pour montrer la mise en forme.)
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
Votre défi est d'écrire du code qui peut commencer par une chaîne / un tableau / etc. de dix chiffres, comme dans mon exemple, puis appliquez l'algorithme pour générer les dix lignes qui créeraient le triangle numérique, suivi d'une 11e ligne qui afficherait le total de tous les chiffres avec une justification à droite.
Essai
Le test de cette chaîne peut être effectué avec une chaîne générée aléatoirement de dix chiffres de votre choix, ou une générée à partir de l'extrait ci-dessous ...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
Règles
- Les règles de code-golf s'appliquent, donc le plus petit nombre d'octets remporte le défi. Dans le cas où il y aurait deux entrées avec le même score faible, le gagnant sera attribué en fonction du nombre de votes positifs.
- Ce que nous cherchons essentiellement, c'est 11 lignes, 19 caractères ... La façon dont vous rendez votre sortie finale dépend entièrement de vous: tableau, console, sortie de fichier, STDOUT, etc., veuillez donc utiliser la méthode de sortie que vous souhaitez travailler à votre avantage. La seule règle dans la sortie est que nous avons 11 lignes avec 19 caractères dans chaque ligne dans un format similaire à celui ci-dessus ...
- Si cela aide votre code, utilisez n'importe quel séparateur pour les chiffres ... N'oubliez pas que la lisibilité peut être un facteur contributif.
- Pas de failles idiotes .
- Le codage en dur de l'entrée n'est pas autorisé. Le but de ce code est tel qu'il peut être utilisé pour produire des résultats différents à chaque fois avec une entrée variable. Le codage en dur de,
1 1 1 1 1 1 1 1 1 1
par exemple, annule complètement le point entier de l'algorithme.
Au plaisir de voir ce que vous pourrez tous trouver!