Le jeu des dames chinoises se joue sur un plateau avec des espaces en forme d'étoile à six branches:
Nous pouvons créer une représentation ASCII de cette carte, en utilisant .
pour les emplacements vides et les lettres GYORPB
pour les six emplacements de départ colorés:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Pour le rendre plus intéressant, nous pouvons également changer la taille. Nous mesurerons la taille d'une planche par la longueur latérale de ses emplacements de départ triangulaires: la planche ci-dessus est de taille 4.
Puisqu'il est vraiment difficile de taper tout cela à la main, écrivons un programme (ou une fonction) pour le faire!
Détails
Votre code doit prendre un entier positif représentant la taille de la carte, via STDIN, ARGV ou un argument de fonction. Sortez le motif en damier sur STDOUT (vous pouvez alternativement le renvoyer sous forme de chaîne si votre soumission est une fonction).
La sortie doit soit
- n'ont aucun espace de fin, ou
- avoir exactement suffisamment d'espaces de fin pour remplir le motif en un rectangle parfait de largeur 6 * N + 1.
La sortie peut éventuellement avoir une nouvelle ligne de fin. Aucun autre espace supplémentaire (avant, arrière) n'est autorisé.
Exemples
Taille 1:
G
B . . Y
. . .
P . . O
R
Taille 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Taille 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Notation
C'est le code-golf : le code le plus court en octets gagne.
Réponses:
Rubis,
141127Renvoie une chaîne rectangulaire
Non testé dans le programme de test
la source
Python 2, 140 octets
Pas génial, mais voici mon offre initiale.
Les règles d'espaces blancs ont ajouté beaucoup d'octets. À titre de comparaison, voici un programme Python 3 de 120 octets qui n'est correct que visuellement et ne suit pas les règles des espaces blancs:
Et voici ma tentative Python 3 récursive légèrement plus longue de 149 octets:
la source
Python 2, 152
C'est, rétrospectivement, la mauvaise approche pour Python, mais je le poste ici au cas où quelqu'un pourrait s'en servir. Plutôt que d'expliquer ce désordre de code, je vais essayer de dire l'idée derrière cela.
L'idée est d'utiliser des coordonnées triangulaires , dans lesquelles le réseau triangulaire correspond à des triplets entiers
(a,b,c)
aveca+b+c=0
.(Ici, les points du réseau sont dessinés sous forme d'hexagones.)
Nous pouvons convertir des coordonnées cartésiennes en coordonnées triangulaires comme
notant cela
x
ety
doit avoir la même parité, ou sinon c'est hors-damier et nous devrions imprimer un espace.En coordonnées triangulaires, les lignes de délimitation de l'étoile à six côtés ont des équations:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Ainsi, nous pouvons déterminer dans quelle région nous nous trouvons, par laquelle
[a,b,c,-a,-b,-c]
sont supérieures àn
.Le rectangle englobant exige que nous le fassions pour
x
dans l'intervalle fermé [-2 * n, 2 * n] ety
dans l'intervalle fermé [-3 * n, 3 * n].la source
Rétine , 234 octets
Prend entrée en unaire.
Chaque ligne doit aller dans son propre fichier et
#
doit être remplacée par une nouvelle ligne dans le fichier. Cela n'est pas pratique, mais vous pouvez exécuter le code tel quel en un seul fichier avec l'-s
indicateur, en conservant les#
marqueurs et peut-être en les changeant en sauts de ligne pour la lisibilité si vous le souhaitez.Le code a une complexité regex minimale. Les principales étapes de la génération sont les suivantes:
G
ligne et la premièreB.Y
ligne (délimitées par des marqueursijk
et les lettres réellement utilisées le sontRPO
).G
ligne du haut avec un espace plus, moins un G jusqu'à ce qu'il n'y ait qu'un seul G.B.Y
ligne du bas avec un espace plus et un point, moins aB
etY
jusqu'à ce qu'il n'y en ait pasB
et àY
gauche.q
). Nous gardons un marqueur (w
) au milieu.RPO
àGBY
si elles sont avant le marqueur.Les résultats après chacun des points ci-dessus (délimités par
=
des) pour l'entrée1111 (unary 4)
:la source
JavaScript ( ES6 ) 228
Construction ligne par ligne. Incroyablement long par rapport à @ Sp3000 qui fait de même.
Utilisation de la chaîne de modèle pour enregistrer 3 octets supplémentaires pour les retours à la ligne. Toutes les nouvelles lignes sont importantes et comptées.
la source