Votre tâche: faire un triangle hexagonal avec une longueur de côté n
, où n
est un nombre entier positif ou 0.
Tout d'abord, permettez-moi de définir un hexagone:
/ \
| |
\ /
(Art ASCII incroyable, non?)
Les hexagones peuvent être liés entre eux en partageant les côtés:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Un triangle hexagonal est le suivant:
/ \
| |
/ \ / \
| | |
\ / \ /
Ce triangle hexagonal a une longueur de côté de 2 à 2 hexagones sont nécessaires pour former un côté. Un triangle hexagonal de longueur latérale 1 n'est qu'un hexagone unique et un hexagone de longueur latérale 0 est vide.
Plus formellement, un triangle hexagonal est un triangle composé d'hexagones liés par leurs côtés. L'hexagone supérieur est lié aux deux ci-dessous sur ses deux côtés inférieurs. Le triangle en bas à gauche relie à celui à sa droite et en haut à droite, et celui en bas à droite renvoie à ceux à sa gauche et en haut à gauche. Il y a des hexagones entre les coins, reliés par leurs côtés opposés, et leur nombre est n-2
. Les triangles ne sont pas remplis.
Plus d'exemples:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
la source
Réponses:
Charbon de bois ,
624339 octetsEssayez-le en ligne! Edit: enregistré quelques octets grâce à @ ASCII uniquement (je ne sais pas exactement combien car j'ai également enregistré
610 octets supplémentaires, mais j'ai ensuite dû dépenser 4 octets pour corriger un bug). Maintenant, en utilisant des boucles imbriquées, c'est ce que cela aurait dû être tout au long.la source
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(btw charbon de bois complète automatiquement tout ce qui est nécessaire»
à la fin)Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
, chacune pour la boucle dessine un côtéPython 2,
184177174164 164 octetsEssayez-le en ligne!
-7 octets grâce à Ørjan Johansen
la source
|
s le plus à droite sur les trois premiers et la rangée hexagonale inférieure.p[:4]*(i+2)
au lieu dep[:4]*(i+1)
semble le réparer.b
dans un seul endroit, donc la combinaison avec votre~
astuce,w=' '*2*~(i-n)
est 7 octets plus court.JavaScript (ES6), 243 octets
la source
JavaScript (ES6),
133129128126 126 octetsConstruit le caractère de sortie par caractère avec deux boucles for .
Comment ça fonctionne
Dans la boucle externe, y itère de n * 2-1 à -1 . Dans la boucle interne, x itère de n * 4-1 à -1 . Nous définissons k = (x + y) & 3 , qui est le motif sous-jacent utilisé pour générer les hexagones.
Voici la grille résultante pour n = 4 :
Sur les lignes paires, une cellule est remplie d'un caractère de tuyau lorsque k = 3 et d'un espace sinon. Le tuyau est le 5ème caractère de notre chaîne de référence
" \ /|"
, donc l'index correct est donné par (k + 1) & 4 .Sur les lignes impaires, chaque cellule est remplie directement avec le caractère correspondant dans la chaîne de référence:
Voici notre exemple mis à jour (espaces remplacés par des points):
Dans les formules suivantes, nous définissons N = n * 4 pour la lisibilité (bien que la même variable soit utilisée dans le code).
La forme du triangle est obtenue en testant:
Et la partie intérieure est retirée en testant:
Démo
Afficher l'extrait de code
la source
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
marche?(x+y+1)&4
n'est pas la même chose que(((x+y)&3)+1)&4
.Gelée ,
6261 octetsContient actuellement six six.
Essayez-le en ligne!
Comment?
la source
>
dans l'explication (<space
)ẋ
sous-espace dans l'explication est mal aligné", faites-le moi savoir.Pyth , 82 octets
Essayez-le en ligne!
la source
Mathematica, 155 octets
avec
\n
remplacé par une nouvelle ligne.Plus lisible:
Crée un tableau de caractères, indexé par i de 1 à 4 n + 1 horizontalement et j de 1 à 2 n + 1 verticalement. Tout d'abord,
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
remplit une grille hexagonale:le
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
remplace ensuite par l'" "
extérieur du triangle non rempli.la source