Je veux essayer une nouvelle forme de code golf ici. Comme pour les bonus, toutes les parties du défi ne doivent pas être terminées, mais chaque réponse doit implémenter un sous-ensemble d'une certaine taille (et il y a un noyau que chaque réponse doit implémenter). Donc, en plus du golf, ce défi implique également de choisir un ensemble de fonctionnalités qui vont bien ensemble.
Les règles
Kingdom Builder est un jeu de plateau, joué sur une grille hexagonale (pointue). La carte est composée de quatre quadrants (randomisés), chacun ayant 10x10 cellules hex (donc une carte complète sera de 20x20). Aux fins de ce défi, chaque cellule hexadécimale contient de l'eau ( W
), une montagne ( M
) une ville ( T
), un château ( C
) ou est vide ( .
). Donc, un quadrant pourrait ressembler
. . W . . . . . . .
. M W W . . . . . .
. M . . W . . . T .
M M . W . . . . . .
. . M . W W . . . .
. . . . . W W W W W
. T . . . . . . . .
. . W . . C . . . .
. . W W . . . . M .
. . . . . . . M M .
La deuxième ligne sera toujours décalée vers la droite de la première ligne. Les joueurs 1
de 4
peuvent placer jusqu'à 40 colonies chacune sur les cellules vides (quelques règles que nous ignorerons pour relever ce défi). Un tableau possible à la fin du jeu est le suivant:
3 3 W . . . 4 . 4 . . 2 W . 4 . . 4 . 4
3 M W W . 1 1 . . 4 2 W . 3 C 4 4 . . 4
3 M 2 2 W 1 1 1 T 3 2 W 4 3 . 1 4 . 4 .
M M . W 2 2 . . . 2 2 W 3 . 1 1 1 . . .
. 4 M . W W 2 2 2 2 W W 3 . 1 4 . T . .
. . . . . W W W W W . 3 C 1 . . 2 2 2 2
. T 1 1 1 1 . . 2 . . 4 . . . 2 2 M M M
4 . W 4 . C 4 4 . . . . . . 2 M M M M M
. 4 W W . . . 4 M . . W . W . 2 2 2 M M
. . . . . . . M M . . W W . . . . 2 M .
. . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 . 1
M 3 3 . . . . . . . . 4 . T 2 . 2 4 1 .
M M . C . 4 . 4 . . . . . 1 2 4 2 1 1 .
M . . 1 . 4 . . . . M M 1 2 . . 2 1 . .
. . . W 1 1 4 1 1 . . . 1 2 . . 2 W W W
. . 1 1 W 1 T . 1 1 1 1 T . . 2 W . 4 .
. 1 1 W . 3 3 . . . . . . . . 2 W 4 C 3
C 1 3 3 3 . 3 . 4 . 4 . 4 . . 2 W 1 1 M
4 3 3 4 . M 4 3 . . . . . . . 2 W . . .
. . . 4 . M M 3 . . 4 4 . 4 . 2 W W . .
Nous étiquetons les quadrants comme
1 2
3 4
Votre tâche sera de marquer un tel tableau. Il y a un score de base qui est toujours utilisé et 8 scores optionnels, dont 3 sont choisis pour chaque match. † Dans ce qui suit, je décrirai les 9 scores et utiliserai la configuration ci-dessus comme exemple pour combien de points chaque joueur gagnerait.
† Il y a 10 scores dans le jeu réel, mais je vais en laisser deux parce que personne ne veut les jouer au golf.
Le score de base. Un joueur obtient 3 points pour chaque C
astle à côté duquel il a un règlement. Exemples de scores: 18, 0, 15, 12.
Les scores optionnels.
Un joueur obtient 1 point pour chaque ligne horizontale sur laquelle il a au moins un règlement.
Exemples de scores: 14, 20, 12, 16.
Pour chaque joueur, trouvez la ligne horizontale sur laquelle ils ont le plus de leurs colonies (choisissez-en en cas d'égalité). Un joueur obtient 2 points pour chaque règlement sur cette ligne.
Exemples de scores: 14 (ligne 16), 8 (ligne 4, 5 ou 6), 28 (ligne 11), 10 (ligne 1).
Un joueur obtient 1 point pour chaque colonie qui est construite à côté d'
W
Ater.Exemples de scores: 13, 21, 10, 5.
Un joueur obtient 1 point pour chaque règlement à côté d'une
M
fontaine.Exemples de scores: 4, 12, 8, 4.
Comptez les colonies de chaque joueur dans chaque quadrant. Par quadrant, les joueurs avec le plus grand nombre de colonies obtiennent 12 points chacun, les joueurs avec le deuxième plus grand nombre de colonies obtiennent 6 points chacun.
Exemples de scores: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Pour chaque joueur, déterminez le quadrant dans lequel ils ont le moins de colonies. Un joueur obtient 3 points pour chaque règlement dans ce quadrant.
Exemples de scores: 18 (quadrant 2), 0 (quadrant 3), 15 (quadrant 1 ou 2), 27 (quadrant 3).
Un joueur obtient 1 point pour chaque groupe de colonies connecté.
Exemples de scores: 7, 5, 6, 29.
Un joueur obtient 1 point pour 2 colonies dans le plus grand groupe de colonies connectées du joueur.
Exemples de scores: 4, 10, 8, 2.
Le défi
Comme dans le jeu, vous choisirez 3 des scores optionnels et marquerez un tableau donné en fonction du score de base et de ces trois scores. Votre code devrait produire une liste de 4 scores. Il y a cependant une restriction au choix: j'ai groupé les scores en 3 groupes, et vous devez mettre en œuvre un de chaque groupe:
- Implémentez l'un des 1 et 2 .
- Mettez en œuvre l'un des 3, 4, 5 et 6 .
- Implémentez l'un des 7 et 8 .
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN, un argument de ligne de commande, une invite ou un paramètre de fonction. Vous pouvez retourner le résultat ou l'imprimer à STDOUT.
Vous pouvez choisir n'importe quel format de liste / chaîne 1D ou 2D pour l'entrée. Vous ne pouvez pas utiliser un graphique avec des informations d'adjacence complètes. Voici une bonne lecture sur les grilles hexadécimales si vous avez besoin d'inspiration.
Votre sortie peut également être dans n'importe quel format de liste ou de chaîne pratique et sans ambiguïté.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Autres hypothèses
Vous pouvez supposer que ...
- ... chaque joueur a au moins 1 règlement et il n'y a pas plus de 40 règlements de chaque joueur.
- ... chaque quadrant contient soit une ville et deux châteaux, soit deux villes et un château.
- ... les villes et les châteaux sont suffisamment éloignés, de sorte qu'aucune colonie ne peut être adjacente à deux d'entre eux.
Cas de test
Toujours en utilisant le tableau ci-dessus, voici les scores individuels pour tous les choix possibles de mécanismes de notation:
Chosen Scores Total Player Scores
1 3 7 52 46 43 62
1 3 8 49 51 45 35
1 4 7 43 37 41 61
1 4 8 40 42 43 34
1 5 7 57 61 45 75
1 5 8 54 66 47 48
1 6 7 57 25 48 84
1 6 8 54 30 50 57
2 3 7 52 34 59 56
2 3 8 49 39 61 29
2 4 7 43 25 57 55
2 4 8 40 30 59 28
2 5 7 57 49 61 69
2 5 8 54 54 63 42
2 6 7 57 13 64 78
2 6 8 54 18 66 51
la source
Réponses:
Python 2, 367 octets
Le programme utilise les scores 1, 3, 7. L'entrée est une liste de listes de caractères représentant chaque cellule. Pour tester l'exemple de carte facilement, nous pouvons faire:
Gestion de la grille hexadécimale
Puisque nous sommes sur une grille hexagonale, nous devons traiter les voisins un peu différemment. Si nous utilisons une grille 2D traditionnelle comme représentation, alors
(1, 1)
nous avons:En y regardant de plus près, nous réalisons que les décalages dépendent de la parité de la ligne sur laquelle vous vous trouvez. L'exemple ci-dessus concerne les lignes impaires, mais sur les lignes paires, les décalages sont
La seule chose qui a changé, c'est que les 1ère, 2e, 5e et 6e paires ont vu leur deuxième coordonnée décrémentée de 1.
La fonction lambda
N
prend une paire de coordonnées(row, col)
et renvoie tous les voisins de la cellule dans la grille. La compréhension interne génère les décalages ci-dessus en les extrayant d'un simple codage en base 3, en incrémentant la deuxième coordonnée si la ligne est impaire et en ajoutant les décalages à la cellule en question pour donner aux voisins. La compréhension extérieure filtre ensuite, ne laissant que les voisins qui se trouvent dans les limites de la grille.Non golfé
la source
def F
s'agir d'une fonction distincte plutôt que d'une fonction interne? Vous ne pouvez pask
être supprimé dedef F:
?F
est la fonction de remplissage d'inondation et doit être accessibleJ
, il est donc à l'intérieur pour économiser sur le passage enJ
tant que paramètre (je vais expérimenter un peu pour voir si je peux contourner la copie en profondeur). Vous avez raisonk
, merci :) (le nouveau code a l'air un peu génial cependant, en raison de la dépendance aux courts-circuits)Programmation du jeu de réponses, 629 octets
ASP appartient à la famille des langages de programmation logique, incarnée ici par le framework Potassco , en particulier Clingo (Grounder Gringo + Solver Clasp). En raison de la limitation du paradigme, il ne peut pas prendre directement une carte donnée en sortie, donc un prétraitement des données est nécessaire (ici effectué en python). Ce prétraitement n'est pas comptabilisé dans le score d'octets total.
C'est mon premier code de golf, et l'objectif est plus de montrer une langue que j'aime que je n'ai jamais vue auparavant dans le golf, que de vraiment gagner le match. De plus, je suis loin d'être un expert en ASP, donc de nombreuses optimisations du code peuvent certainement être effectuées pour des résultats en moins d'octets.
représentation des connaissances
Il y a le code python qui convertit la carte en atomes:
Par exemple, les atomes b (pour __b__oard) donnés pour la première ligne de l'exemple de carte sont les suivants:
Où b (0,0,3) est un atome qui décrit que le joueur 3 a un règlement aux coordonnées (0; 0).
Résolution ASP
Il y a le code ASP, avec de nombreux scores optionnels implémentés:
Ce programme peut être lancé avec la commande:
Et ne trouvera qu'une seule solution (c'est une preuve qu'il n'y a qu'une seule façon de répartir les points):
Où s (7,3,6) dit que le joueur 3 gagne 6 points avec un score optionnel 7, et s (t, 4,62) dit que le joueur 4 gagne 62 points au total (core + 1 + 3 + 7).
Facile à analyser pour avoir une table de fantaisie!
la source