Écrivez le programme le plus court possible qui accepte un ensemble d'entiers positifs distincts et génère un rendu ASCII d' hexagones concentriques avec ces longueurs latérales, à partir de barres obliques, de soulignements, d'espaces et de nouvelles lignes.
Le programme le plus court en octets compté par https://mothereff.in/byte-counter gagne.
Exemples
(Ils sont plus beaux avec moins d'espacement des lignes.)
Si l'entrée est 1
la sortie doit être l'hexagone de longueur latérale 1:
__
/ \
\__/
Notez que deux traits de soulignement sont utilisés pour le haut et le bas de l'hexagone afin qu'il soit mieux proportionné.
En général, l'hexagone de taille N contient N barres obliques de chaque côté incliné et 2 * N traits de soulignement en haut et en bas.
Si l'entrée est 1 2
la sortie doit être les hexagones concentriques de longueur latérale 1 et 2:
____
/ __ \
/ / \ \
\ \__/ /
\____/
Si l'entrée est 1 3
la sortie doit être:
______
/ \
/ __ \
/ / \ \
\ \__/ /
\ /
\______/
Si l'entrée est 1 3 2
la sortie doit être:
______
/ ____ \
/ / __ \ \
/ / / \ \ \
\ \ \__/ / /
\ \____/ /
\______/
etc.
Règles d'E / S
L'entrée doit provenir de la ligne de commande ou de stdin mais peut être dans le format le plus pratique.
Par exemple, vous pourriez donner à chaque numéro comme un argument de ligne de commande: > myprogram 1 3 2
, ou vous pouvez demander à l'utilisateur d'entrer les numéros comme une liste préformaté: [1, 3, 2]
.
La sortie doit aller vers stdout ou l'équivalent le plus proche de votre langue.
Règles supplémentaires
- L'entrée sera toujours un ensemble d'entiers positifs distincts, pas nécessairement dans n'importe quel ordre .
- La sortie doit ...
- ne pas contenir de caractères en plus
/\ _
et des nouvelles lignes. - n'ont pas d'espaces de fin ou d'espaces de début inutiles.
- ne doit pas contenir de retour à la ligne superflu mais peut avoir un retour à la ligne facultatif .
- ne pas contenir de caractères en plus
- Si rien n'est entré, rien ne sort (sauf éventuellement une nouvelle ligne).
- Si cela vous aide, vous pouvez supposer que les entiers d'entrée sont inférieurs à 2 16 .
1
référence à l'hexagone le plus intérieur ou le plus extérieur?1
(ou n'importe quel nombre) fait référence à l'hexagone avec une longueur de côté de 1. (Avec la mise en garde que 1 barre oblique = 2 traits de soulignement.) Donc,1
se référera toujours à l'hexagone le plus intérieur.Réponses:
CJAM,
148116109 octetsCela a pris beaucoup plus de temps que prévu. À l'origine, je voulais simplement construire de manière itérative le quadrant supérieur gauche, comme dans les défis de diamant, puis retirer le reste de la mise en miroir. Mais je n'ai pas remarqué que les traits de soulignement n'obéissent pas à la symétrie miroir entre la moitié supérieure et inférieure. J'ai donc dû refaire la majeure partie de cela, pour générer la moitié droite de manière itérative, puis ne refléter qu'une seule fois (vers la gauche).
Testez-le ici.
Un exemple de Fibonacci:
Explication:
Comme indiqué en haut, je commence par construire la moitié droite de manière itérative. Autrement dit, au départ, je n'ai qu'un seul espace dans la grille, puis pour chaque anneau possible, j'entoure la grille existante dans des espaces ou un nouveau semi-hexagone.
Une fois cela fait, je mets en miroir chaque ligne vers la gauche et je la remplis d'espaces de tête pour un alignement correct. Voici une ventilation du code:
la source
Python -
251, 240, 239228Approche alternative (251):
la source
APL (222 octets en UTF-8)
(et 133 caractères)
Étant donné que cette question demande spécifiquement la quantité d'octets dans la représentation UTF8, j'ai dû en fait ungolf un peu pour qu'il soit plus long mais sa représentation UTF8 est plus courte. (En particulier, le caractère de l'opérateur de trajet
⍨
est de trois octets alors qu'il()
n'est que de deux, de sorte que l'optimalisation ne fonctionne plus et rend également l'affectation très coûteuse.)Version précédente, qui est plus courte en caractères (124) mais utilise plus d'octets lorsqu'elle est représentée en UTF-8 (230, ce qui la placerait en deuxième position):
Tester:
la source
Perl 5, 352 (349 octets + 3 pour les
anE
drapeaux)Cela pourrait probablement être joué beaucoup plus.
Non golfé:
Exemple (
1 5 3 14
):la source
C # -
388316 octetsEdit: modification de la façon dont il évite d'imprimer les espaces de fin et ajout de LINQ
Programme simple qui prend des arguments de ligne de commande. Il parcourt tous les caractères possibles dans chaque ligne d'un rectangle défini par la dimension hexagonale maximale et l'ajoute à la ligne actuelle, avant de couper les lignes et de les imprimer successivement (il produit la nouvelle ligne facultative de fin).
Code golf:
Code non golfé:
la source
APL (Dyalog Classic) , 151 octets (93 avec l'encodage APL classique)
Essayez-le en ligne!
la source