Étant donné un hexagone d'art ASCII en entrée, sortez-en un dont les côtés font tous une unité de plus.
_____
____ / \
/ \ / \
/ \ / \
\ \ => \ \
\ / \ /
\____/ \ /
\_____/
Les hexagones d'entrée auront une symétrie de 180 degrés, mais sinon les côtés peuvent être de longueurs différentes. Au-dessus, les longueurs latérales (2, 4, 3) sont agrandies à (3, 5, 4). Les longueurs latérales seront non nulles.
Les hexagones sont constitués de traits de soulignement _
, de barres obliques /
et de barres obliques inverses \
. Notez que parmi les bords horizontaux (faits avec des traits de soulignement), le bord supérieur est sur sa propre ligne mais pas le bord inférieur.
E / S
Je vais être pointilleux et exiger ascii-art mise en forme ici: l'entrée et la sortie doivent être une chaîne avec des sauts de ligne représentant l'image, pas une liste de lignes. Bien sûr, votre code peut imprimer chaque ligne tour à tour pour produire l'image, ou lire STDIN une ligne une fois pour la saisie si votre langue peut le faire.
Détails
L'entrée peut inclure une nouvelle ligne de fin facultative si vous le souhaitez, mais n'aura pas de lignes vides. Vous pouvez choisir de ne pas avoir d'espaces de fin dans l'entrée ou de remplir chaque ligne à la même longueur (celle de la ligne la plus longue).
La sortie doit être alignée avec le bord gauche de l'écran, comme l'entrée. Vous pouvez avoir des sauts de ligne supplémentaires au-dessus et en dessous ainsi que des espaces de fin.
Cas de test
Entrée suivie de sortie.
_
/ \
\_/
__
/ \
/ \
\ /
\__/
____
/ \
/ \
\ \
\ /
\____/
_____
/ \
/ \
/ \
\ \
\ /
\ /
\_____/
_
/ \
/ /
/ /
/ /
/ /
\_/
__
/ \
/ \
/ /
/ /
/ /
/ /
\ /
\__/
Classement
<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
IEnumerable
de caractères?Réponses:
Stax , 28 octets
Exécuter et déboguer
Il semble qu'il devrait y avoir un moyen de le faire principalement avec regex, mais je cherche toujours ...
la source
Retina 0.8.2 , 84 octets
Essayez-le en ligne! Fonctionne avec des hexagones irréguliers. Les E / S ne sont pas rembourrées. Explication:
Élargissez l'intérieur de l'hexagone.
Fixez le haut.
Fixez le bas.
la source
JavaScript (ES6),
159 156 153150 octetsEssayez-le en ligne!
Commenté
NB: Des caractères alternatifs sont utilisés ci-dessous pour les délimiteurs d'expressions régulières afin d'empêcher le surligneur de syntaxe SE de devenir fou.
la source
Fusain , 48 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Saisissez et concaténez toutes les lignes sauf la première. (L'entrée au format JSON rendrait la plupart de cela inutile avec une économie de 11 octets.)
Comptez le nombre de
/
s,/
s et_
s dans la chaîne et utilisez-le pour calculer les nouvelles longueurs de côté (dans le cas de_
s, comme une chaîne de_
s de cette longueur).Dessinez l'hexagone agrandi.
Solution alternative, également 48 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Saisissez toutes les lignes. (L'entrée au format JSON rendrait cela inutile avec une économie de 17 octets.)
Dessinez séparément les sections supérieure droite et inférieure gauche de l'hexagone.
Comptez le nombre de
/
s,/
s et_
s dans la chaîne et utilisez-le pour calculer les nouvelles longueurs de côté.Sortez le haut ou le bas et descendez d'une ligne si c'était la ligne du haut.
Dessinez les deux côtés droit ou gauche.
la source
APL (Dyalog Unicode) ,
7574 octets SBCSEssayez-le en ligne!
'.+'⎕s'&'
diviser l'entrée en lignes↑⍵
mélanger les lignes dans une matrice⍺⍳
remplacer' /\_'
par0 1 2 3
(0,0,⍨⍉)⍣3⍉
entourer avec une couche de 0 en haut et en bas et deux couches de 0 à gauche et à droite{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3
pour chaque cellule, choisissez le premier non-0 parmi: en haut, en bas, à gauche, à droite du voisinage 3x3 centré sur elle2⌈/
max par paires horizontalementa×1=(+⍀×a)⌊⊖+⍀⊖×a←
ne garder que la limite extérieure des non-0⍺[
]
remplacer0 1 2 3
par' /\_'
la source
PowerShell , 126 octets
Essayez-le en ligne!
la source
Perl 5 ,
177156145 145 octetsPourrait être plus court? Je ne vois pas encore comment. Avec commentaires et ajouts de nouvelles lignes et en-tête + pied de page:
Essayez-le en ligne!
La ligne # 1 divise la chaîne d'entrée multi-lignes dans le tableau @l.
La ligne n ° 2 duplique les deuxième et dernière lignes sans les caractères _.
La ligne # 3 ajoute des espaces là où c'est nécessaire sur la ligne 2 à l'avant-dernier.
La ligne # 4 élargit les deux côtés ___ avec un _ et retourne le tableau de lignes @l comme une chaîne multi-lignes.
la source