Aperçu
Étant donné un certain nombre d'hexagones, organisez-les en une forme connectée dans les limites d'une image d'art ASCII 50 x 50. La forme que vous choisissez peut être arbitraire - tout ce que vous trouvez le plus propice au golf - tant qu'elle est connectée. Il peut avoir des trous à condition qu'ils soient plus grands qu'un hexagone (sinon le nombre d'hexagones sera ambigu).
Disposition
Tous les hexagones doivent être sous la forme suivante (seules cette taille et cette orientation sont valides):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Deux hexagones sont directement connectés s'ils partagent un bord:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Deux hexagones ne sont pas connectés s'ils ne partagent qu'un sommet:
__ __
/ \/ \
\__/\__/
Partager un demi-bord ne compte pas non plus comme connecté:
__
/ \
\__/
/ \
\__/
Une collection d'hexagones est connectée s'il existe un chemin d'un hexagone à un autre utilisant uniquement des hexagones directement connectés .
des trous
Un trou de taille hexagonale dans une collection connectée d'hexagones compte comme un hexagone, de sorte que toute œuvre d'art ASCII donnée ait un nombre d'hexagones sans ambiguïté.
Cela ne compte pas comme un trou car le trou potentiel est un seul hexagone:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Cela ne compte comme un trou , car elle ne correspond pas à un seul hexagone:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Entrée et sortie
Contribution
Un entier de 1 à 255.
Production
Une chaîne artistique ASCII représentant le nombre d'entrée d'hexagones connectés comme décrit ci-dessus.
- Le nombre de lignes (sous-chaînes séparées par des sauts de ligne) est au maximum de 50, plus une nouvelle ligne de fin facultative supplémentaire.
- Les rangées n'ont pas besoin d'être de la même longueur, mais chacune doit avoir une longueur d'au plus 50.
- Des lignes de longueur nulle peuvent exister au-dessus ou en dessous de la forme connectée à condition que le nombre total de lignes ne dépasse pas 50.
- Des lignes d'espace uniquement peuvent exister au-dessus ou en dessous de la forme connectée à condition que le nombre total de lignes ne dépasse pas 50.
- Des espaces peuvent apparaître à gauche de la forme à condition que la longueur des rangées ne dépasse pas 50 (la forme n'a pas besoin d'être alignée à gauche).
- Des espaces peuvent apparaître à droite de la forme à condition que la longueur des rangées ne dépasse pas 50.
- Tous les caractères qui ne font pas partie de la forme connectée doivent être des espaces ou des retours à la ligne.
À condition que la sortie soit correcte, il n'est pas nécessaire qu'elle soit cohérente d'une exécution à l'autre.
Exemples
Contribution: 6
Sorties valides:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Sorties non valides:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Gagnant
La réponse valide la plus courte en octets l'emporte.
Classement
(en utilisant l'extrait de classement de Martin )
la source
6
. Pour une entrée d'255
une rangée horizontale d'hexagones ne rentrera pas dans un art ASCII 50 x 50.Réponses:
CJam,
645755 octetsTestez-le ici.
Cela générera le modèle suivant, par colonne :
Explication
Ceci est basé sur l' excellente astuce de Dennis , qui permet
.e>
d'assembler une sortie d'art ASCII à partir de plusieurs pièces. Comme il le dit,.e>
prend le maximum élément par élément de deux tableaux (ou chaînes), et puisque les espaces ont le code de caractère le plus bas, nous pouvons l'utiliser pour imposer tout autre caractère sur une grille de chaînes. De plus, si les deux tableaux n'ont pas la même longueur, les éléments étrangers du tableau plus long sont simplement copiés tels quels. Cela signifie que les différents motifs n'ont même pas besoin d'avoir la même taille. Pour appliquer cela à des tableaux à deux dimensions (parce que nous ne voulons pas insérer les sauts de ligne jusqu'à la fin), nous appliquons.e>
par paire aux lignes, ce qui donne..e>
.L'idée de base du code est de générer des
N
copies d'un seul hexagone déplacé vers la bonne position. On "déplace" l'hexagone verticalement en ajoutant des lignes vides et horizontalement en ajoutant des espaces. Une fois que nous avons terminé, nous plions toutes les copies ensemble, en utilisant le magnifique:..e>
(probablement le plus long opérateur que j'ai jamais utilisé dans un programme CJam).Voici le code:
la source
Python 2,
219207 caractèresPrend une entrée sur stdin.
À peu près crée simplement une grille d'espaces 50x50 et plops les hexagones là où c'est approprié. Après le 16e hexagone, je ne suis pas besoin de la première rangée de
h
(l'hexagone comme un tableau 2D) , donc je l' utilisei>15
pour démarrer la plage à 1 au lieu de 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
calcule le c OLONNE et r OW que je dois commencer à.n
est un booléen mais est utilisé comme un entier pour fixer les limites (puisqu'ilh[0]
n'y a que 3 caractères pour éviter d'écraser les trucs).Je suis assez content de celui-ci, j'ai rasé environ 50 octets depuis la version initiale, surtout quand je me suis souvenu de la
a[x:y]=b
syntaxe.Sortie (n = 30):
Étant donné que les lignes de fin d'espaces sont autorisées, j'ai modifié la création de
g
pour ne créer que 50bytearray
s au lieu de3+(x>1)+x/16*2
, ce qui correspond au nombre exact de lignes requises, ce qui réduit de 12 octets.la source
Swift 2.0,
601591 octetsCourir:
swift hexagons.swift 21
Production:
Swift
substringToIndex
etstringByReplacingOccurencesOfString
prendre tant de personnages ...la source
stringByPaddingToLength
, mais dans ce cas, ce serait 11 caractères de plus que de taper la chaîne complète.stringByAppendingString
dans Objective-C mais quand même ...C, 238 octets
Seuls les espaces nécessaires et les nouvelles lignes sont pris en compte pour le nombre de caractères.
Il crée simplement une matrice de caractères, les remplit dans l'ordre inverse, puis imprime le tout.
la source
JavaScript (ES6), 265 octets
Tesselle les hexagones d'affilée, de gauche à droite, alternant de haut en bas - comme un nid d'abeilles - jusqu'à la fin d'une rangée.
Non golfé avec description (fonctionne dans Firefox):
la source
Rubis, 120
crée un tableau de 50 chaînes de 50 espaces, puis substitue 4 caractères sur 3 lignes pour ajouter les hexagones:
Comme la première ligne contient des espaces, une fois qu'un hexagone a été tracé, nous ne pouvons pas en tracer un autre en dessous, car les espaces écraseraient les hexagones précédents.
Par conséquent, les hexagones sont ajoutés sous la forme d'un losange 16x16 (rectangle déformé) de bas en haut, et incliné de bas à gauche en haut à droite.
La chaîne
" __ "
sera alors remplacée par des informations supplémentaires\
et/
si nécessaire.Non testé dans le programme de test
Sortie typique (n = 250)
Il devrait y avoir quelques rangées d'espaces supplémentaires en haut ici, pour faire un total de 50, mais je ne sais pas s'il existe un moyen d'obtenir Stackexchange au format pour les inclure.
la source