Ecrivez le programme le plus court qui imprime cette section d'art ASCII d'un carrelage hexagonal ou en nid d'abeille :
__
__/ \__
__/ \__/ \__
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
\__/ \__/
\__/
- Aucune entrée ne devrait être prise.
- Sortie sur stdout ou l'alternative la plus proche de votre langue.
- Au lieu d'un programme, vous pouvez écrire une fonction nommée qui ne prend aucun paramètre et affiche le résultat normalement ou le renvoie sous forme de chaîne.
- La sortie peut avoir un nombre quelconque de nouvelles lignes en début et en fin de ligne et chaque ligne de la sortie peut comporter un nombre quelconque d'espaces en tête et / ou de fin (tant que le motif s'aligne correctement).
- Le code le plus court en octets gagne.
code-golf
ascii-art
kolmogorov-complexity
tiling
hexagonal-grid
Les passe-temps de Calvin
la source
la source
Réponses:
CJam,
4543424140 octetsEssayez-le en ligne dans l' interprète CJam .
Comment ça marche
répète le motif
\__/
38 fois et le divise en morceaux de longueur 21 . Si les morceaux étaient séparés par des sauts de ligne, le résultat serait le suivant:Cela contient clairement le nid d'abeille désiré. Tout ce qui reste à faire est de remplacer certains caractères par des espaces, d’en couper d’autres et d’introduire les sauts de ligne.
génère le nombre entier 74 100 000 036 et le convertit en tableau [7 4 1 0 0 0 0 0 0 3 6] . Chaque élément du tableau code le nombre de caractères de début de la ligne correspondante devant être remplacés par des espaces. En soustrayant ce nombre de 16 , nous obtenons également la longueur correcte pour cette ligne.
Puisqu'un espace a un point de code inférieur aux autres caractères de L et que les opérateurs vectorisés laissent les caractères de la chaîne la plus longue qui ne correspondent pas à l'un des plus courts,
.e<
remplace les premiers caractères D par des espaces.la source
Python 2, 73
Voir le courir.
Pour chacune des 11 lignes de sortie, calcule le nombre d'espaces
k
de début sous la forme d'un maximum de trois fonctions linéaires formant l'enveloppe du côté gauche de l'hexagone. Étant donné que les lignes diagonales ont une pente3
et-3
il est préférable d’indexer le numéro de ligne sous la formei=0,3,...30
.Pour créer le maillage hexagonal, nous commençons par créer une mosaïque suffisante de l'unité
'\__/ '
. Ensuite, le décalage le[i:]
réaligne de 3 pour les lignes impaires. Enfin, nous en prenons la partie nécessaire en[k:16-k]
laissant une margek
à gauche et à droite.la source
CJam,
655655 octetsEssayez-le en ligne dans l' interprète CJam .
Idée
La moitié droite de chaque ligne est une copie inversée de la moitié gauche avec les barres obliques et les barres obliques inversées échangées. Par conséquent, il suffit de coder la moitié gauche du nid d'abeilles:
Plutôt que d’analyser ce modèle ligne par ligne, nous pouvons l’analyser colonne par colonne:
Des modèles évidents émergent:
_ _ _ _
se produit cinq fois./
est suivi d'un\
.En remplaçant tous
/\
,_
,_ _ _ _
et dans l' espace avec un nombre de 0 à 3, on peut convertir le tableau résultant d'une base 4 numéro à une base plus élevée et stocker le modèle complet de façon compacte.Code
la source
C,
148144140 octetsAvec des espaces, sans les avertissements du compilateur, et avant quelques ajustements de code pour sauvegarder quelques octets:
Cette approche n'utilise aucune table de caractères / chaînes. Il parcourt les 187 (11 rangées, 17 colonnes incluant les nouvelles lignes) et détermine le caractère à imprimer pour chaque position, en fonction d'une combinaison de conditions.
Les conditions incluent un test pour être à l'intérieur / à l'extérieur des 4 coins, en utilisant des équations à 4 lignes, avec le résultat stocké dans une variable
p
. Le reste se répète généralement tous les 6 caractères, les lignes impaires étant décalées de 3 caractères par rapport aux lignes paires.la source
int
.k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
Ruby - 78 octets
Une transcription de la solution de xnor (69 octets):
la source
11.times
sauve 2 octetsJavaScript (ES6), 129
130C'est une chaîne pure remplacer / remplacer / remplacer ... ne tirant pas parti d'une propriété géométrique.
À l'aide de chaînes de modèle, toutes les nouvelles lignes sont importantes et comptent.
Exécuter un extrait de code dans Firefox pour tester
la source
PHP -
1391371071019187 octetsJe ne sais pas si c'est la meilleure façon de jouer au golf, mais voici mon essai:
303646-50 bytes grâce à Ismael MiguelTestez-le en ligne ici
ancien code:
la source
<?
place de<?php
pour sauvegarder 3 octets. Au lieu de$c=$a.$a."/ \\\n\__".$a.$a."/\n";
, vous pouvez écrire$c="$a$a/ \\\n\__.$a$a/\n";
(puisque PHP développe les variables dans des chaînes). Vous pouvez appliquer la même logique à laecho
pour réduire davantage sa longueur. En outre, vous n'avez pas besoin d'espace entre leecho
et la chaîne.\n
, vous pouvez mettre une vraie ligne et économiser 1 octet par ligne.<?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";
. Rappelez-vous de remplacer le\t
avec un caractère de tabulation et\n
par une vraie nouvelle ligne.Lua 146
(nouvelles lignes ajoutées pour plus de clarté)
la source
S
trois fois.Dart - 113
Solution d’interpolation de cordes pure, rien d’extraordinaire. Les opérations sur les chaînes telles que "sous-chaîne" sont trop détaillées pour être mises en concurrence.
Exécutez-le sur DartPad .
la source
Javascript ( ES7 Draft ),
969493 octetsInspiration tirée de quelques solutions ici ...
Edit: -1 à partir de edc65
Commenté:
la source
.substr(+x+z,16-x-x)
->.slice(+x+z,16-x+z)
-1+x
au lieu de justex
?x
un nombre. Sans cela, cela concaténeraitz
Python 3,
10087 octetsEt une version lisible du code ci-dessous. L'idée est de coder en dur les intervalles (début, longueur), puis de compléter avec la quantité correcte d'espaces pour centrer l'intervalle.
la source
Retina , 66 octets
Chaque ligne doit aller dans son propre fichier et
<LF>
signifie nouvelle ligne réelle dans le fichier. 1 octet par fichier supplémentaire ajouté au nombre d'octets.Vous pouvez exécuter le code en tant que fichier unique avec le
-s
indicateur, en conservant les<LF>
marqueurs et en les modifiant éventuellement en traits nouveaux dans la sortie, par souci de lisibilité, si vous le souhaitez.L'algorithme consiste en 5 étapes simples de substitution (changer le contenu de la ligne impaire en contenu de la ligne égale) en partant d'une chaîne d'entrée vide. Les résultats après chaque étape sont (délimités par
=
's):la source
Javascript,
154151 octetsla source