Sua tarefa é, dada uma grade quadrada de dígitos ( 0-9
), gerar uma das maneiras pelas quais os dígitos podem ser agrupados, de modo que:
- Cada dígito faz parte de exatamente um grupo
- Todos os grupos têm o mesmo número de dígitos
- Todos os grupos são delimitados por uma forma de polígono (isso significa que todos os dígitos do grupo estão ao lado de [esquerda, direita, cima, baixo] pelo menos um outro dígito do mesmo grupo, a menos que cada grupo tenha 1 elemento).
- Todos os grupos têm a mesma soma
A grade de entrada sempre será quadrada: você pode escolher qualquer método de entrada que desejar (incluindo o fornecimento de argumentos para uma função ou método). Além disso, a entrada fornecerá o número de grupos nos quais seu programa deve agrupar os dígitos.
Exemplo de entrada:
Suponha que seu formato de entrada seja stringOfDigits numberOfGroups
.
Um exemplo de entrada seria:
156790809 3
que seria traduzido para (uma grade de sqrt(9) * sqrt(9)
)
1 5 6
7 9 0
8 0 9
que você teria que dividir em 3 grupos, cada um dos quais deveria ter 9 / 3 = 3
elementos com a mesma soma.
Saída: A saída deve ser a sequência de dígitos, com espaços opcionais e novas linhas de formatação, com cada dígito seguido de uma letra a-z
indicando seu grupo. Deve haver exatamente numberOfTotalDigits / numberOfGroups
elementos em cada grupo. Você nunca terá que dividir algo em mais de 26 grupos.
Exemplo de saída:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Observe que a substituição de todos os a
s por b
s e b
s por a
s é igualmente válida. Desde que cada grupo seja indicado por uma letra distinta, a saída é válida.
Além disso, espero que a maioria dos programas produza algo semelhante, porque novas linhas / espaços são opcionais:
1a5a6b7c9a0b8c0c9b
Nesse caso, adicionar todos os dígitos do grupo a
, b
ou c
cria 15. Além disso, todos os grupos são vinculados por algum polígono.
Saídas inválidas:
1a 5a 6b
7c 9a 0c
8c 0b 9b
porque os grupos não formam polígonos (especificamente, o 6b
é isolado e 0c
também é solitário).
1a 5a 6b
7c 9a 0b
8c 0b 9b
porque o grupo b
possui 4 elementos enquanto c
apenas 2.
Etc.
Se não houver uma solução válida, seu programa poderá fazer qualquer coisa (por exemplo, parar, travar, executar para sempre), mas se o programa for impresso None
quando não houver uma solução válida, -15
a sua pontuação.
Se houver mais de uma solução, você precisará imprimir apenas uma, mas -20
se o seu programa imprimir todas elas separadas por algum delimitador.
Este é o código de golfe, então o código mais curto (com bônus) vence!
156790889 3
parece que deve ser156790809 3
6b
é isolado, não o0b
.