Défi
Nous connaissons tous les arbres de Noël normaux - mais que diriez-vous d'un arbre de Noël à l'envers ! C'est un défi assez facile sur le thème de Noël. L'objectif de ce challenge est de faire de moi un sapin de Noël à l'envers ASCII. Voici les règles de ce défi:
- Acceptez un entier impair et positif. Vous pouvez supposer que ce sera toujours entre
7
et51
. La base de l'arbre sera composée des personnages:
___ \ / |
Le sommet de l'arbre (l'étoile) sera composé d'un seul
*
.Chaque ligne de l'arbre sera construite en utilisant le format
<?>
où?
est un nombre quelconque de-
s. Par exemple, si vous créez une ligne de longueur5
, la ligne devrait l'être<--->
. Ou si vous faites une ligne de longueur8
, la ligne devrait l'être<------>
.Voici comment le corps de l'arbre doit être construit:
Prenez le nombre impair
n
donné en entrée et créez une ligne de l'arbre de cette longueur.Soustraire
4
den
créer une ligne de l'arbre de cette longueur.Soustraire
2
den
créer une ligne de l'arbre de cette longueur.Décrémenter
n
de2
. Après cela, saufn
égal5
, revenez à l'étape 2.
La base (voir étape 2.), l'étoile (voir étape 3.) et chaque ligne de l'arbre (voir étapes 4. et 5.) doivent toutes être centrées en utilisant le nombre impair d' origine (voir étape 1.) comme maximum largeur.
Exemples / cas de test
odd number inputed: 7
___
\ /
|
<-----> line length -> 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 13
___
\ /
|
<-----------> line length -> 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 9
___
\ /
|
<-------> line length -> 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
odd number inputed: 17
___
\ /
|
<---------------> line length -> 17
<-----------> line length -> 17 - 4 = 13
<-------------> line length -> 17 - 2 = 15
<---------> line length -> 15 - 4 = 11
<-----------> line length -> 15 - 2 = 13
<-------> line length -> 13 - 4 = 9
<---------> line length -> 13 - 2 = 11
<-----> line length -> 11 - 4 = 7
<-------> line length -> 11 - 2 = 9
<---> line length -> 9 - 4 = 5
<-----> line length -> 9 - 2 = 7
<-> line length -> 7 - 4 = 3
<---> line length -> 7 - 2 = 5
*
Règles
- Des échappatoires standard s'appliquent .
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte!
repeat the above steps until the odd number minus 2 equals 5
- dans la première entrée, le nombre impair est 7 et 7-2 = 5, donc l'arbre devrait se terminer instantanément (je sais ce que vous voulez dire, mais il doit être reformulé)7
, l'entrée minimale, vous devez d' abord créer les trois lignes d'arbre (sous-étapes .1.1, .1.2, .1.3), puis soustraire2
du nombre impair et tester s'il est égal5
. L'instruction pour vérifier si le "nombre impair moins 2 est égal à 5" est à la fin, les trois autres étapes doivent être effectuées en premier. Mais pour répondre à votre premier commentaire, ce serait bien.7
comme entrée ou si vous pouvez accepter4
, comme dans le quatrième nombre impair (ou3
s'il est indexé 0).Réponses:
Python 3 ,
127121105 10510310098 octetsIl s'agit d'une fonction lambda sans nom qui renvoie une liste de lignes:
Essayez-le en ligne!
La partie principale de cette réponse est
(o-i+2-i%2*3)
, qui calcule le nombre de tirets à avoir sur une ligne. Le reste de la réponse consiste simplement à convertir cela en art ASCII souhaité.Un grand merci à M. Xcoder , d'avoir rasé 6 octets et d'avoir discuté du golf avec moi dans le chat.
Merci également à Lynn d' avoir remarqué que cela
3*(i%2)
peut êtrei%2*3
2 octets plus court!la source
f
chaînes mathématiqueso-i+2-i%2*3
enregistre deux octets.C, 163 octets
Essayez-le en ligne!
Déroulé:
la source
Proton , 83 octets
Merci à FlipTack pour avoir économisé 4 octets et pour avoir collaboré au chat (nous formons en fait une excellente équipe). Indirectement enregistré 2 octets grâce à Lynn .
Essayez-le en ligne!
la source
Fusain , 28 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Imprimez la base.
Boucle de la moitié du numéro d'entrée à 1.
Imprimez deux lignes, la première avec une de plus
-
que l'index de boucle, la seconde avec une de moins.Miroir pour compléter l'arbre.
Placez l'étoile.
la source
SOGL V0.12 ,
3530 octetsEssayez-le ici!
Utilise l'algorithme de charbon de Neil , prend l'entrée comme indice dans les nombres impairs - donc 13 correspondrait à l'entrée 7
la source
Rétine , 89 octets
Essayez-le en ligne! Explication: La première étape convertit l'entrée en unaire et ajoute a
>
. La deuxième étape remplace deux-
s par un<
pour corriger la longueur de ligne. La troisième étape reproduit ensuite la branche mais légèrement plus courte à chaque fois jusqu'à ce que la branche ne puisse plus être raccourcie. L'étape finale ajoute la base et l'étoile.la source
Javascript 506 octets
Version golf:
Version Ungolf:
Usage:
console.log(tree(13)), console.log(tree(17)),
ES6 165 octets (de mon ami)
Version golf:
Version Ungolf:
Usage:
p(31); p(17);
la source
const
PowerShell , 131 octets
Essayez-le en ligne!
Eh bien, c'est un vrai gâchis pour quiconque ne connaît pas PowerShell ... alors, voyons comment je peux expliquer comment cela fonctionne.
Pour l'explication, je vais utiliser
input = 17
.Nous commençons assez simplement, avec la définition de la variable d'assistance
$i=2
et la définition$x
de<something>
, avec le<something>
démarrage comme une plage de l'entrée$args
vers le bas5
, donc17,16,15,...,6,5
. Cette plage est pompée dans une boucle for.Chaque itération, nous commençons avec réglage variable d'aide
$j
pour être le résultat d'uneif
déclaration,if($_%2){$i-2}else{($i++)}
. Si c'est bizarre$j=$i-2
, sinon$j=($i++)
. Ceci, couplé avec$i=2
au début, nous donne la séquence0, 2, 1, 3, 2, 4, 3, 5...
qui correspond exactement au nombre d'espaces dont nous avons besoin pour ajouter à notre ligne d'arbre. ;-) Nous prenons' '
et multiplions les chaînes par ce nombre.Ensuite, nous avons besoin de nos succursales. Cela se fait avec
'<'
plus la partie centrale'-'
multipliée, plus la fin'>'
. La multiplication se fait en reconnaissant que l'-
alternative dans un2, 5, 2, 5, 2...
modèle basé sur le numéro d'entrée$_
, nous sélectionnons donc à partir d'un pseudo-ternaire basé sur ce modèle.Pour plus de précisions, voici les deux premiers termes de chaque section:
Alors maintenant, nous avons défini
$x
un tableau de branches (c'est-à-dire des chaînes). En dehors de la boucle, nous construisons maintenant notre arbre "en haut" avec le nombre approprié d'espaces enregistrés dans$y
, puis affichons nos branches$x
, puis l'arbre "en bas" avec le*
. Chacun d'eux est laissé sur le pipeline et la sortie est implicite avec une nouvelle ligne entre les éléments.la source
JavaScript (ES6),
150147 octetsAfficher l'extrait de code
la source
Toile , 28 octets
Essayez-le ici!
Un port de ma réponse SOGL qui est un port de la réponse Neil's Charcoal.
la source
Ma tentative de JS ESGoogoltriplex.
Afficher l'extrait de code
la source