Voglio provare una nuova forma di codice golf qui. Simile ai bonus, non tutte le parti della sfida devono essere completate, ma ogni risposta deve implementare un sottoinsieme di determinate dimensioni (e c'è un nucleo che ogni risposta deve implementare). Quindi, oltre al golf, questa sfida implica anche la scelta di una serie di funzionalità che vanno bene insieme.
Le regole
Kingdom Builder è un gioco da tavolo, giocato su una griglia esagonale (a punta). La scheda è composta da quattro quadranti (randomizzati), ognuno dei quali ha 10x10 celle esadecimali (quindi una scheda completa sarà 20x20). Ai fini di questa sfida, ogni cella esadecimale contiene water ( W
), mountain ( M
) una città ( T
), un castello ( C
) o è vuota ( .
). Quindi potrebbe apparire un quadrante
. . 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 seconda riga sarà sempre spostata a destra rispetto alla prima riga. I giocatori 1
di 4
possibile inserire fino a 40 insediamenti ciascuno su celle vuote (di seguito alcune regole che ignoreremo per questa sfida). Una possibile tavola alla fine del gioco è la seguente:
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 . .
Etichettiamo i quadranti come
1 2
3 4
Il tuo compito sarà quello di segnare una tale tavola. C'è sempre un punteggio base che viene sempre usato e 8 punteggi opzionali, 3 dei quali sono scelti per ogni partita. † Di seguito, descriverò tutti e 9 i punteggi e userò la configurazione sopra come esempio per quanti punti otterrebbe ciascun giocatore.
† Nel gioco attuale ci sono 10 punteggi, ma ne tralascerò due perché nessuno vuole giocarli a golf.
Il punteggio principale. Un giocatore ottiene 3 punti per ogni C
ascia a cui ha un insediamento vicino. Punteggi di esempio: 18, 0, 15, 12.
I punteggi opzionali.
Un giocatore ottiene 1 punto per ogni fila orizzontale su cui ha almeno un insediamento.
Punteggi di esempio: 14, 20, 12, 16.
Per ogni giocatore, trova la fila orizzontale su cui si trova la maggior parte dei suoi insediamenti (scegline uno in caso di pareggio). Un giocatore ottiene 2 punti per ogni insediamento su quella fila.
Esempi di punteggi: 14 (riga 16), 8 (riga 4, 5 o 6), 28 (riga 11), 10 (riga 1).
Un giocatore ottiene 1 punto per ogni insediamento che si trova accanto
W
all'aster.Punteggi di esempio: 13, 21, 10, 5.
Un giocatore ottiene 1 punto per ogni insediamento vicino a una
M
montagna.Punteggi di esempio: 4, 12, 8, 4.
Conta gli insediamenti di ciascun giocatore in ciascun quadrante. Per quadrante, i giocatori con il maggior numero di insediamenti ottengono 12 punti ciascuno, i giocatori con il secondo maggior numero di insediamenti ottengono 6 punti ciascuno.
Punteggi di esempio: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Per ogni giocatore determinare il quadrante in cui hanno il minor numero di insediamenti. Un giocatore ottiene 3 punti per ogni insediamento in quel quadrante.
Punteggi di esempio: 18 (quadrante 2), 0 (quadrante 3), 15 (quadrante 1 o 2), 27 (quadrante 3).
Un giocatore ottiene 1 punto per ogni gruppo collegato di insediamenti.
Punteggi di esempio: 7, 5, 6, 29.
Un giocatore ottiene 1 punto per ogni 2 insediamenti nel più grande gruppo di insediamenti collegati del giocatore.
Punteggi di esempio: 4, 10, 8, 2.
La sfida
Come nel gioco si sceglierà 3 dei punteggi opzionali, e segnare un dato bordo in base al punteggio di base e questi tre punteggi. Il tuo codice dovrebbe produrre un elenco di 4 punteggi. C'è una limitazione sulla scelta però: ho raggruppato i punteggi in 3 gruppi e devi implementare uno di ciascun gruppo:
- Implementa uno di 1 e 2 .
- Implementa uno di 3, 4, 5 e 6 .
- Implementa uno di 7 e 8 .
È possibile scrivere un programma o una funzione, prendendo input tramite STDIN, argomento della riga di comando, prompt o parametro della funzione. È possibile restituire il risultato o stamparlo su STDOUT.
È possibile scegliere qualsiasi formato elenco / stringa 1D o 2D conveniente per l'input. Si può non utilizzare un grafico con informazioni complete adiacenza. Ecco qualche buona lettura su griglie esadecimali se hai bisogno di ispirazione.
L'output può anche trovarsi in qualsiasi elenco o formato stringa comodo e inequivocabile.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Ulteriori ipotesi
Puoi presumere che ...
- ... ogni giocatore ha almeno 1 insediamento e non ci sono più di 40 insediamenti per ogni giocatore.
- ... ogni quadrante contiene una città e due castelli, oppure due città e un castello.
- ... città e castelli sono abbastanza distanti, in modo tale che nessun insediamento possa essere adiacente a due di essi.
Casi test
Usando ancora la scheda sopra, ecco i punteggi individuali per tutte le possibili scelte dei meccanismi di punteggio:
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