Introdução
Deixe um campo ser um retângulo preenchido apenas com os caracteres -
e [0-9]
. Um exemplo de um campo é:
11-011123
111-010--
0010---01
111-01234
Você vê que esse campo foi separado em três áreas menores:
Para calcular a pontuação de uma área menor, basta adicionar todos os números. Por exemplo:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
A pontuação total desta área é 9 . Agora fazemos o mesmo para a segunda área:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
A pontuação total também é 9 . Agora temos que examinar a última área:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Isso tem uma pontuação total de 11 . A pontuação mais alta no campo é 11, então é isso que precisamos produzir.
A tarefa
Dado um campo (na forma de uma sequência 2D, uma matriz etc.), produza a pontuação mais alta no campo. Você pode assumir que os campos fornecidos sempre conterão pelo menos 1 dígito. Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Casos de teste
Caso de teste 1:
Input:
1
Output:
1
Caso de teste 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Caso de teste 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Caso de teste 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
separou as áreas? Você pode deixar a parte "o que define uma área" mais clara, por favor?Respostas:
MATL ,
545149 bytesA entrada é uma matriz de caracteres 2D no formato MATL (AB), com o
;
separador de linhas. As entradas no exemplo e nos casos de teste são respectivamente:Experimente online!
Explicação
Isso funciona através da construção de uma matriz de adjacência do gráfico definida pela relação "estar conectado". Como exemplo, considere o campo 3 × 4
Entradas em uma matriz 2D são facilmente descritas em MATL usando indexação linear (na coluna principal). No caso 3 × 4, o índice linear de cada entrada é dado como
A matriz de adjacência é construída em etapas usando a multiplicação de matrizes. Na primeira etapa, vizinhos imediatos são considerados. Por exemplo, o ponto indexado 3 é vizinho de si mesmo e daquele com o índice 2. Não é vizinho de 6 porque esse ponto não contém um número de acordo com o campo. Neste exemplo, a matriz de adjacência da relação "vizinho imediato" é a matriz 12 × 12 L dada como
(Pode-se ver que a coluna 3 tem valor
1
nas linhas 2 e 3.) Essa matriz é sempre simétrica e sua diagonal possui valor1
para pontos que não contêm-
.O próximo passo seria a matriz de adjacência da relação "conectada com no máximo um ponto no meio ". Para obtê-lo, basta multiplicar L por si só e definir entradas diferentes de zero como
1
. Em geral, a matriz de adjacência da relação "conectada por algum caminho", M , é obtida elevando L a um expoente (no sentido da matriz) que representa o comprimento máximo possível do caminho. Um limite superior do comprimento de caminho máximo é o número de entradas diferentes de zero em L .O cálculo direto da energia da matriz pode causar transbordamento, pois grandes números ocorrem rapidamente. Portanto, é melhor multiplicar gradualmente pela mesma matriz, convertendo entradas diferentes de zero em 1 após cada etapa para impedir que grandes números se acumulem.
A coluna i de M representa os pontos que estão conectados (por qualquer caminho) ao ponto i . Agora, o campo de nível pode ser reduzido a um vetor de coluna c em ordem linear, em que cada entrada contém o número correspondente ou um valor indefinido para
-
. Então, nesse caso, c seriaMutiplicar cada coluna de M por c elemento a elemento e calcular a soma de cada coluna fornece, para cada ponto i , a pontuação total do ponto de área a que pertence. Uma área é definida por todos os pontos que são mutuamente conectados. Observe que muitas colunas fornecerão o mesmo resultado; ou seja, as colunas de i e j vão dar a mesma soma se os pontos I e J são conectados (pertencem à mesma área). O resultado final é o máximo dessas somas.
fonte
JavaScript (ES6), 157 bytes
Explicação
Pega um campo de entrada como uma sequência. Para cada número no campo, soma todos os números na área. Isso é feito iterando sobre cada número no campo várias vezes, adicionando o número à pontuação se uma célula adjacente contiver um número contado anteriormente. Os números contados que fazem parte da área são representados configurando-os para 99, para que não sejam contados novamente. Emite a pontuação mais alta como um número.
fonte
Pitão, 93 bytes
Experimente online!
Como funciona
Primeiro passo: leia a entrada
Segundo passo: defina uma função para avaliar uma área
Terceiro passo: leia todas as áreas e encontre o valor máximo necessário
fonte