Quero experimentar uma nova forma de código de golfe aqui. Semelhante aos bônus, nem todas as partes do desafio precisam ser concluídas, mas cada resposta precisa implementar um subconjunto de determinado tamanho (e há um núcleo que toda resposta precisa implementar). Portanto, além do golfe, esse desafio também envolve a escolha de um conjunto de recursos que combinam bem.
As regras
Kingdom Builder é um jogo de tabuleiro, jogado em uma grade hexagonal (pontuda). A placa é composta de quatro quadrantes (randomizados), cada um com 10x10 células hexadecimais (portanto, uma placa completa terá 20x20). Para os propósitos deste desafio, cada célula hexadecimal contém água ( W
), montanha ( M
) uma cidade ( T
), um castelo ( C
) ou está vazia ( .
). Portanto, um quadrante pode parecer
. . 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 .
A segunda linha será sempre deslocada para a direita a partir da primeira linha. Jogadores 1
para 4
pode colocar até 40 assentamentos cada um em células vazias (seguindo algumas regras que iremos ignorar para este desafio). Um possível tabuleiro no final do jogo é o seguinte:
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 . .
Vamos rotular os quadrantes como
1 2
3 4
Sua tarefa será pontuar esse quadro. Há uma pontuação principal que é sempre usada e 8 pontuações opcionais, 3 das quais são escolhidas para cada jogo. † A seguir, descreverei todas as 9 pontuações e usarei a configuração acima como exemplo para quantos pontos cada jogador obteria.
† Existem 10 pontuações no jogo atual, mas deixarei de fora duas, porque ninguém quer jogar golfe.
A pontuação do núcleo. Um jogador recebe 3 pontos para cada C
astle ao lado de um acordo. Pontuações de exemplo: 18, 0, 15, 12.
As pontuações opcionais.
Um jogador ganha 1 ponto por cada linha horizontal em que possui pelo menos um assentamento.
Pontuações de exemplo: 14, 20, 12, 16.
Para cada jogador, encontre a linha horizontal em que a maioria de seus assentamentos (escolha qualquer em caso de empate). Um jogador ganha 2 pontos por cada assentamento naquela linha.
Pontuações de exemplo: 14 (linha 16), 8 (linha 4, 5 ou 6), 28 (linha 11), 10 (linha 1).
Um jogador ganha 1 ponto por cada assentamento que é construído próximo a
W
ater.Pontuações de exemplo: 13, 21, 10, 5.
Um jogador ganha 1 ponto por cada assentamento próximo a uma
M
onça.Pontuações de exemplo: 4, 12, 8, 4.
Conte os assentamentos de cada jogador em cada quadrante. Por quadrante, os jogadores com o maior número de assentamentos recebem 12 pontos cada, enquanto os jogadores com o segundo maior número de assentamentos recebem 6 pontos cada.
Pontuações de exemplo: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Para cada jogador, determine o quadrante em que eles têm o menor número de assentamentos. Um jogador ganha 3 pontos por cada assentamento naquele quadrante.
Pontuações de exemplo: 18 (quadrante 2), 0 (quadrante 3), 15 (quadrante 1 ou 2), 27 (quadrante 3).
Um jogador ganha 1 ponto para cada grupo conectado de assentamentos.
Pontuações de exemplo: 7, 5, 6, 29.
Um jogador ganha 1 ponto para cada 2 assentamentos no maior grupo de assentamentos conectados do jogador.
Pontuações de exemplo: 4, 10, 8, 2.
O desafio
Como no jogo, você escolherá 3 das pontuações opcionais e pontuará um determinado tabuleiro com base na pontuação principal e nessas três pontuações. Seu código deve produzir uma lista de 4 pontuações. Há uma restrição à escolha: agrupei as pontuações em 3 grupos e você deve implementar uma de cada grupo:
- Implemente um de 1 e 2 .
- Implemente um dos 3, 4, 5 e 6 .
- Implemente um dos 7 e 8 .
Você pode escrever um programa ou função, recebendo entradas via STDIN, argumento de linha de comando, prompt ou parâmetro de função. Você pode retornar o resultado ou imprimi-lo em STDOUT.
Você pode escolher qualquer formato conveniente de lista / sequência 1D ou 2D para a entrada. Você não pode usar um gráfico com informações completas sobre adjacência. Aqui está uma boa leitura sobre grades hexagonais, se você precisar de inspiração.
Sua saída também pode estar em qualquer formato conveniente, inequívoco de lista ou string.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Suposições adicionais
Você pode assumir que ...
- ... cada jogador tem pelo menos 1 assentamento e não há mais de 40 assentamentos de cada jogador.
- ... cada quadrante contém uma cidade e dois castelos, ou duas cidades e um castelo.
- ... cidades e castelos estão suficientemente distantes, de modo que nenhum assentamento possa ser adjacente a dois deles.
Casos de teste
Ainda usando o quadro acima, eis as pontuações individuais para todas as opções possíveis de mecanismos de pontuação:
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