introduction
Morris de Nine Mens (également appelé Mills) est un jeu de société pour deux joueurs qui se joue sur le plateau suivant (image tirée de la page Wikipedia liée):
Chaque joueur a 9 hommes, de couleur noir et blanc. Les règles concrètes ne sont pas importantes pour ce défi, mais consultez la page Wikipedia si vous êtes intéressé.
Le défi
Étant donné une grille en entrée, qui représente un certain état du conseil d'administration, affichez le nombre total de moulins m
avec 0<=m<=8
.
Trois hommes de la même couleur forment un moulin lorsqu'ils sont dans une rangée droite de points connectés. b2
to f2
n'est pas un moulin puisque les hommes sont de couleur différente. Aussi d2
à d5
ne formerait pas un moulin puisque les trois points doivent être connectés.
La planche dans l'image ci-dessus contient deux moulins par exemple. Un de f2
à f6
et un de e3
àe5
.
Contribution
La carte est représentée comme une grille 2D avec 24 points qui sont connectés comme indiqué dans l'exemple d'image ci-dessus. L'exemple utilise des lettres de a-g
pour les colonnes et des chiffres de 1-7
pour les lignes, mais vous pouvez choisir n'importe quel format d'entrée raisonnable tant qu'il mappe 24 coordonnées uniques à l'un des états suivants:
- Vide
- Pris par le noir
- Pris par le blanc
La représentation concrète est à vous, vous n'êtes pas limité à "b" ou "w" pour les couleurs.
En plus de cela, votre entrée ne peut contenir aucune information supplémentaire.
Notes complémentaires
- Vous n'avez pas à mapper les points par n'importe quel type de valeurs. Si vous voulez prendre l'entrée comme un tableau 2D, c'est bien aussi. Mais gardez à l'esprit que tous les points ne sont pas utilisés et que vous devez considérer les connexions entre eux.
- L'entrée peut être vide, auquel cas vous devez sortir zéro (plateau vide -> pas de fraisage).
- Puisque chaque joueur a 9 hommes, l'entrée ne contiendra jamais plus de 18 points pris.
- Vous pouvez laisser de côté les points vides dans l'entrée et donc uniquement les points d'entrée qui sont pris.
- L'entrée peut être commandée de n'importe quelle manière. Vous ne pouvez pas compter sur une commande spécifique.
- Vous pouvez supposer que l'entrée sera toujours valide. Cela signifie qu'il n'y aura pas plus de 9 hommes de chaque couleur et que chaque point sera unique.
Règles
- Indiquez clairement le format d'entrée que vous utilisez dans votre solution. Fournir un exemple d'exécution de votre programme est fortement encouragé.
- Fonction ou programme complet autorisé.
- Règles par défaut pour les entrées / sorties.
- Des échappatoires standard s'appliquent.
- Il s'agit de code-golf , donc le nombre d'octets le plus bas l'emporte. Tiebreaker est une soumission antérieure.
Cas de test
Le format d'entrée ici est une liste de tuples avec les coordonnées comme dans l'exemple ci-dessus comme premier élément et l'état du point deuxième élément. Un point pris par le blanc est marqué comme "w" et un point pris par le noir comme "b". Tous les autres points sont laissés de côté et sont vides.
[("a4", "w"), ("b2", "b"), ("b4", "b"), ("c4", "b"), ("d1", "w") , ("d2", "w"), ("e3", "w"), ("e4", "w"), ("e5", "w"), ("f2", "b") , ("f4", "b"), ("f6", "b"), ("g4", "w")] -> 2 [("a1", "b"), ("a4", "b"), ("a7", "b"), ("b4", "b"), ("c4", "b") , ("d3", "w"), ("d2", "w"), ("d1", "w")] -> 3 [] -> 0 [("b4", "b"), ("a4", b "), (" c4 ", w")] -> 0 [("b4", "b"), ("a4", b "), (" c4 ", b")] -> 1 [("a1", "b"), ("a4", "b"), ("a7", "b"), ("b2", "b"), ("b4", "b") , ("b6", "b"), ("c3", "b"), ("c4", "b"), ("c5", "b"), ("e3", "w") , ("e4", "w"), ("e5", "w"), ("f2", "w"), ("f4", "w"), ("f6", "w") , ("g1", "w"), ("g4", "w"), ("g7", "w")] -> 8
Codage heureux!
la source
d3
etd5
ne sont pas connectés. Règles disent:Three men of the same color form a mill when they are in a straight row of connected points.
. J'ai ajouté quelques exemples dans cette section pour que ce soit clair, merci pour le commentaire!Réponses:
APL (Dyalog Classic) ,
2625 octets-1 grâce à FrownyFrog
Essayez-le en ligne!
L'argument est un tableau 3x3x3 de
1
(noir),¯1
(blanc) et0
(vide). La première dimension se situe le long de la profondeur d'imbrication des carrés concentriques. Les deux autres dimensions se situent le long des axes vertical et horizontal.Nous avons un moulin chaque fois que la sommation le long d'un axe donne un
3
ou¯3
, sauf que nous devons éliminer les quatre coins lors de la sommation le long du premier axe.{}
est une fonction avec un argument implicite⍵
↓⍵
est divisé - dans notre cas, il transforme un cube 3x3x3 en une matrice 3x3 de vecteurs de longueur 3 imbriqués⍵⍪↓⍵
prend le cube d'origine et colle la matrice 3x3 de 3 vecteurs en dessous, nous obtenons donc un tableau mixte 4x3x3 de scalaires et de vecteurs+/
somme le long du dernier axe; cela a pour effet combiné de sommer le cube d'origine le long du dernier axe (+/⍵
) et de le sommer le long de l'axe du milieu en raison de la division que nous avons faite (+/↓⍵
)Maintenant, nous devons nous occuper du cas particulier du premier axe.
+⌿⍵
somme le long du premier axe, renvoyant une matrice 3x34 2⍴
mais nous ne devons pas compter les coins, nous le remodelons donc en une matrice 4x2 comme ceci:maintenant nous ne sommes intéressés que par la dernière colonne (
BDFH
), nous utilisons donc l'idiome⊢/
,
concatèneBDFH
à la matrice que nous avons obtenue auparavant pour les 2e et 3e axes (BDFH
et la matrice a toutes deux une dimension de tête de 4)∊
aplatit tout ce que nous avons obtenu jusqu'à présent en un seul vecteur|
prend les valeurs absolues{ }∩≢
filtre uniquement les trois - la longueur (≢) de l'entrée est toujours 3≢
les comptela source
≢{|∊(+/⍵⍪↓⍵),⊢/4 2⍴+⌿⍵}∩≢
est un plus court :)JavaScript (ES6),
276228125117105 octets(ce qui précède contient des caractères ascii non imprimables qui n'apparaîtront pas ici, alors voici une version sans le
btoa
qui peut être copiée et exécutée)Décompose une chaîne de référence en triplets de lettres qui correspondent aux clés de groupe de fraisage. L'entrée se présente sous la forme d'un objet, où les clés sont les lettres
a-x
, commençant en bas à gauche et se terminant en haut à droite, se déplaçant de gauche à droite en premier. Les valeurs sont1
pour le blanc, le-1
noir et le0
blanc.Exemple
Ces exemples sont tirés des exemples d'OP, convertis en objet clé-lettre et valeur-nombre. La première provient de l'exemple d'image, tandis que les autres proviennent de l'ensemble d'exemples.
la source
atob
.btoa
aussi. A également trouvé quelques autres améliorations qui le réduisent encore plus.Mathematica,
217131 octetsBien que je sois sûr que ce n'est pas particulièrement compétitif, voici une entrée pour vous.
Exemple d'entrée:
Autoriser les noms de coordonnées à un seul caractère joue de manière triviale avec 51 caractères, ce qui en fait une solution de 166 octets. Nommer les joueurs 1 et 2 plutôt que "w" et "b" joue avec 17 autres personnages.
Nous obtenons donc
la source
1
et2
. l'exemple utiliséw
etb
, mais je suis assez certain que nous ne sommes pas limités à cela.APL (Dyalog Unicode) , 50 octets
"La solution des objets"
Bien que plus longue (29 caractères) que la solution de @ ngn , elle utilise une approche entièrement différente: l'entrée a la même structure globale que cette solution, mais tous les emplacements sont représentés comme des objets. Les emplacements vides (y compris la colonne centrale inexistante) doivent être des objets vides. tandis que tous les hommes noirs doivent être des références à l'objet "homme noir", et tous les hommes blancs doivent être des références à l'objet "homme blanc". Tous les objets peuvent éventuellement être agréable D isplay F ORM s pour une meilleure lisibilité, et ainsi de la colonne centrale peut éventuellement être rendu invisible.
Essayez-le en ligne!
+/
la somme de1=(
…)
Ceux de≢¨(
… Les)
décomptes de,
le ravelé (aplati)∪/
ensembles uniques à travers,
concaténé à∪⌿⍤2
ensembles uniques,(
…)
Concaténé à⊢/
la colonne la plus à droite de4 2⍴
le, remodelé en quatre lignes et deux colonnes,∪⌿
ensembles de colonnes uniquesUn opérateur au sommet , fourni avec AGL (
ä
), ramènerait la longueur à 27 caractères .la source