Quiero probar una nueva forma de código de golf aquí. Al igual que las bonificaciones, no todas las partes del desafío deben completarse, pero cada respuesta debe implementar un subconjunto de cierto tamaño (y hay un núcleo que cada respuesta debe implementar). Por lo tanto, además del golf, este desafío también implica elegir un conjunto de características que combinen bien.
Las normas
Kingdom Builder es un juego de mesa que se juega en una cuadrícula hexadecimal (punta puntiaguda). El tablero está formado por cuatro cuadrantes (aleatorios), cada uno de los cuales tiene 10x10 celdas hexadecimales (por lo que un tablero completo será 20x20). Para los propósitos de este desafío, cada celda hexagonal contiene agua ( W
), montaña ( M
), una ciudad ( T
), un castillo ( C
) o está vacía ( .
). Entonces un cuadrante podría verse como
. . 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 segunda fila siempre estará desplazada a la derecha de la primera fila. Los jugadores 1
a 4
pueden colocar hasta 40 asentamientos cada uno en las celdas vacías (siguiendo algunas reglas que vamos a pasar por alto para este desafío). Un posible tablero al final del juego es el siguiente:
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 . .
Etiquetaremos los cuadrantes como
1 2
3 4
Su tarea será anotar dicho tablero. Hay un puntaje central que siempre se usa y 8 puntajes opcionales, 3 de los cuales se eligen para cada juego. † A continuación, describiré los 9 puntajes y usaré la configuración anterior como ejemplo de cuántos puntos obtendría cada jugador.
† Hay 10 puntajes en el juego real, pero dejaré de lado dos porque nadie quiere jugar golf.
El puntaje central. Un jugador obtiene 3 puntos por cada C
astle al que tiene un acuerdo al lado. Puntajes de ejemplo: 18, 0, 15, 12.
Los puntajes opcionales.
Un jugador obtiene 1 punto por cada fila horizontal en la que tiene al menos un acuerdo.
Puntajes de ejemplo: 14, 20, 12, 16.
Para cada jugador, encuentre la fila horizontal en la que se encuentran la mayoría de sus asentamientos (elija cualquiera en caso de empate). Un jugador obtiene 2 puntos por cada liquidación en esa fila.
Puntajes de ejemplo: 14 (fila 16), 8 (fila 4, 5 o 6), 28 (fila 11), 10 (fila 1).
Un jugador obtiene 1 punto por cada asentamiento que se construya al lado de
W
después.Puntajes de ejemplo: 13, 21, 10, 5.
Un jugador obtiene 1 punto por cada asentamiento al lado de una
M
montaña.Puntajes de ejemplo: 4, 12, 8, 4.
Cuente los asentamientos de cada jugador en cada cuadrante. Por cuadrante, los jugadores con el mayor número de acuerdos obtienen 12 puntos cada uno, los jugadores con el segundo mayor número de acuerdos obtienen 6 puntos cada uno.
Puntajes de ejemplo: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Para cada jugador, determine el cuadrante en el que tienen el menor número de asentamientos. Un jugador obtiene 3 puntos por cada asentamiento en ese cuadrante.
Puntajes de ejemplo: 18 (Cuadrante 2), 0 (Cuadrante 3), 15 (Cuadrante 1 o 2), 27 (Cuadrante 3).
Un jugador obtiene 1 punto por cada grupo conectado de asentamientos.
Puntajes de ejemplo: 7, 5, 6, 29.
Un jugador obtiene 1 punto por cada 2 asentamientos en el grupo más grande de asentamientos conectados del jugador.
Puntajes de ejemplo: 4, 10, 8, 2.
El reto
Al igual que en el juego que se elija 3 de las puntuaciones opcionales, y la puntuación de una tabla determinada en base a la puntuación de núcleo y las tres puntuaciones. Su código debe producir una lista de 4 puntajes. Sin embargo, hay una restricción en la elección: he agrupado los puntajes en 3 grupos y usted debe implementar uno de cada grupo:
- Implementar uno de 1 y 2 .
- Implementar uno de 3, 4, 5 y 6 .
- Implementar uno de 7 y 8 .
Puede escribir un programa o función, tomando datos a través de STDIN, argumento de línea de comando, indicador o parámetro de función. Puede devolver el resultado o imprimirlo en STDOUT.
Puede elegir cualquier formato conveniente de lista / cadena 1D o 2D para la entrada. Es posible que no utilice un gráfico con la información de adyacencia completa. Aquí hay una buena lectura sobre cuadrículas hexagonales si necesita inspiración.
Su salida también puede estar en cualquier formato de cadena o lista conveniente y no ambigua.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Supuestos adicionales
Puedes suponer que ...
- ... cada jugador tiene al menos 1 acuerdo y no hay más de 40 acuerdos de cada jugador.
- ... cada cuadrante contiene una ciudad y dos castillos, o dos ciudades y un castillo.
- ... las ciudades y los castillos están lo suficientemente separados, de modo que ningún asentamiento puede ser adyacente a dos de ellos.
Casos de prueba
Aún usando la tabla anterior, aquí están los puntajes individuales para todas las opciones posibles de mecanismos de puntuación:
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