Sommaire
Inspiré par la popularité récente des défis artistiques ASCII, le but de ce défi est de dessiner un damier ASCII, comme celui sur lequel les échecs peuvent être joués.
Écrivez un programme qui prend un entier positif n
comme argument, dans stdin
ou comme entrée utilisateur, et sortez un damier avec n
x n
carrés, avec une bordure de 1 caractère d'épaisseur.
Chaque carré doit contenir 2 x 2 caractères. Les carrés doivent suivre le modèle alternant blanc-noir normal (blanc en premier, comme dans le coin supérieur gauche) d'un damier. Les carrés blancs doivent être constitués de caractères espace ( ) et les carrés noirs doivent être constitués de caractères dièse (
#
).
La bordure doit être faite de tirets ( -
) avec un plus ( +
) sur la bordure ou le point perpendiculaire d'un carré.
Contribution
Entier positif représentant le nombre de carrés (dimensions en carrés) à dessiner dans le damier, chaque carré étant 2x2 caractères.
Exemples de résultats
n=2
+--+--+
| |##|
| |##|
+--+--+
|##| |
|##| |
+--+--+
n=3
+--+--+--+
| |##| |
| |##| |
+--+--+--+
|##| |##|
|##| |##|
+--+--+--+
| |##| |
| |##| |
+--+--+--+
n=4
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
... etc.
Remarques
- Les espaces de fin et les nouvelles lignes sont acceptables.
- Vous pouvez écrire soit un programme entier soit une fonction.
- Pas d'espaces principaux.
- Votre programme devrait afficher des résultats corrects pour n = 15.
- Pour les langues ésotériques moins connues et similaires, fournissez un lien vers la langue.
n=0
devrait produire+
. (facultatif, mais fortement recommandé et encouragé.)- Le code le plus court en octets gagne, car il s'agit du code golf.
+
pourn=0
.Réponses:
J, 24 octets
Une fonction anonyme:
Usage:
la source
&.>
est un plus court queeach
. Il convient de noter qu'il ne fonctionne que s'ilBoxForm
est défini surASCII
.Python 2, 79
Pour chaque ligne, sélectionne l'un des modèles
et en imprime des
3*n+1
caractères. Le motif est choisi en répétant ses 6 premiers caractères, sélectionnés avec l'astuce d'entrelacement de chaîne, qui sert également à extraire un extrait de la bonne longueur.Le motif correct est sélectionné sur la base de la valeur de l'index de ligne
i
modulo 6 par une expression arithmétique3**i%7/2%3
qui donne le motif répétitif [0,1,1,0,2,2]. Je l'ai trouvé en utilisant le fait qu'ilx**i%7
a un point6
, puis en essayant différentes valeursx
et différents post-traitements pour obtenir le bon modèle.la source
Pyth, 37
Plutôt piraté ensemble, mais bref.
Manifestation.
la source
CJam,
4342 octetsEssayez-le en ligne .
Chaque coordonnée est mappée à un caractère, par exemple le coin supérieur gauche est
(0, 0) -> "+"
. Plus précisément, nous calculonset indexez la chaîne en
"#|-+ "
conséquence.la source
Rétine , 106 octets
Prend la contribution comme unaire (sur la base de cette méta-discussion ).
Chaque ligne doit aller dans son propre fichier et
n
doit être remplacée par un retour à la ligne dans les fichiers. Ceci n'est pas pratique, mais vous pouvez exécuter le code tel quel, en un seul fichier, avec l'-s
indicateur, en conservant lesn
marqueurs.n
Si vous le souhaitez, vous pouvez changer les 's en sauts de ligne dans la sortie pour plus de lisibilité. Par exemple:Plus de golf et quelques explications viennent plus tard.
la source
JavaScript (ES6), 117
Fragment:
Fonction anonyme. Commence par un tableau complet de
+--+--+--...
lignes, et sur les lignes appropriées, remplace le+
pour|
et-
pourou
#
selon le cas.L'expression qui décide du caractère de remplacement
"| |##| "[x%6+(i%6>2)*3]
, pourrait probablement être jouée plus loin, mais j'ai trouvé que l'utilisation d'une chaîne plus longue et redondante enregistre plus de caractères qu'un calcul complexe.la source
CJam, 59 octets
C'est trop long ..
Essayez-le en ligne ici
la source
CoffeeScript avec ES6, 106 octets
JavaScript (ES6), 111 octets
Les sauts de ligne sont significatifs et comptent pour 1 octet chacun.
Le retour explicite l'a rendu un peu plus long:
Démo
Au moment de la rédaction de cet article, Firefox est le seul navigateur majeur compatible avec ES6.
la source
Python 3,
114 108100Solutions précédentes
108
114
118 (non soumis)
la source
CJam, 46 octets
Essayez-le en ligne
Eh bien, j'espérais avoir au moins une solution originale (normalement je ne regarde pas les autres réponses avant de travailler par moi-même). Il s'avère que @ Sp3000 avait déjà fait quelque chose de très similaire, mais en mieux. Mais puisque j'ai déjà fait le travail, j'ai pensé que je le publierais quand même.
Explication:
la source
HackVM , 158 octets
Certainement pas un gagnant, mais cela ressemblait à un beau défi à faire dans HVM.
Placez la taille dans la première cellule mémoire et utilisez le code suivant:
Remarque: Le code doit être exactement sur une seule ligne pour fonctionner.
Explication:
Le code appelle 2 fonctions
PLUSHDASHLINE
etNORMALLINE
maintient un état global pour les parités (c'est-à-dire s'il faut mettre un' '
ou un'#'
dans une cellule).Explication pour
PLUSDASHLINE
:Explication pour
NORMALLINE
:J'apprécierais que quelqu'un donne des conseils pour l'améliorer encore :)
la source
Python 2, 98
Pas le chemin le plus court, mais une méthode amusante. La fonction
f
prend deux chaînesa,b
et un séparateurs
et entrelace ses arguments commesaasbbsaasbbsaas
. Les rangées de la planche sont créées sous cette forme avec leurs caractères respectifs, puis sont elles-mêmes entrelacées de cette façon pour produire le résultat.la source
n=0
. La majorité des solutions (qui seront acceptées) produisent "+". Cette solution produit "++ (newline) ++", à l'exclusion des 2 nouvelles lignes de fin normales (ce qui est autorisé).Ruby: 83 caractères
Exemple d'exécution:
la source
Rubis, 87
Il s'agit d'une fonction anonyme. Appelez ça comme ça (toutes les possibilités de 0 à 5)
Il utilise la
ljust
méthode sur une chaîne vide. Ruby permet de spécifier une chaîne de remplissage pour la justification, nous utilisons donc l'ljust
une des trois chaînes de remplissage possiblesb,c,d
par tableaua
, ordonnée commebccbdd
.la source
Julia, 124 octets
Cela crée une fonction sans nom qui accepte un entier et s'imprime sur stdout.
Non golfé + explication:
la source
Javascript, ES6 149
Plutôt amusant à écrire même si c'est un peu long
Fonctionne sur Firefox
1 - Console ouverte
2 - Tapez ce qui suit
Sortie (n = 15):
la source
join('\n')
parjoin` `
, où l'espace que j'ai écrit indique un nouveau caractère de ligne réel.Haskell, 99
Ceci est partiellement inspiré par la réponse précédente de Haskell par catgocat ; J'ai écrit ma propre version, puis je l'ai regardée, puis j'en ai écrit une autre. Je joue selon les mêmes règles - l'entrée est un argument, mais la sortie est standard. (S'il peut s'agir d'une fonction pure, soustrayez 7 caractères
putStr$
.)Nous utilisons
t
pour prendre une région de 3 n + 1 caractères à partir d'un damier infini construit en utilisantcycle
, et c'est tout. L'idée principale que j'ai tirée de l'autre réponse est celle de rassembler les motifs des cellules de bordure et de vérificateur en chaînes.Ma première version (140 caractères) a utilisé la stratégie de calcul du caractère à chaque point, ce qui pourrait être mieux pour un problème plus complexe que celui-ci.
la source
cat <<EOF > sol1.hs
et en comptant avecdu -b sol1.hs
.wc
accord, et j'ai vérifié les caractères non imprimables. Cette version de 84 octets fonctionne- t-elle? Si c'est le cas, je le prendrai :)Haskell, 118
Ceci est ma première réponse de golf à code haskell et la voici:
Version plus lisible:
Sortie
la source
f 1
devrait produire 1 boîte vide,f 0
produit juste le signe plus.C -
119101Utilise maintenant le calcul similaire à la réponse @ Sp3000. Associez également les optimisations.
Je pense que
?:
c'est une extension GCC ...Ancienne réponse:
Il maintient 2 coordonnées et calcule honnêtement quel caractère imprimer pour chaque paire. La liste des caractères à imprimer est stockée dans un tableau et cela seul imprime une grille "non colorée". Le premier élément du tableau est modifié pour dessiner des carrés noirs.
Je pourrais changer cela de sorte qu'au lieu de deux coordonnées indépendantes, il y ait une seule valeur comptant ou (peut-être même mieux) vers le bas, mais je ne peux pas envelopper ma tête autour de cela pour le moment.
Bonus - le remplacement de 3 par tout autre nombre entraîne un programme qui dessine un damier valide avec une taille de cellule différente.
la source
awk - 91
C'était tout un combat pour le faire descendre en dessous de 100. Le comptage à rebours et l'utilisation de l'opérateur de match ont été les percées;) Le reste est à peu près logique.
la source
Pyke, 47 octets, non concurrent
Essayez-le ici!
la source