Entrada
Quadro: Um contêiner 2D (matriz, lista de listas, etc.) de letras como:
["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]
Se você escolher uma lista de listas, poderá assumir que todas as sublistas têm o mesmo comprimento.
Regras
- Para criar um retângulo válido, você precisa de todos os cantos do retângulo com a mesma 'letra'.
- Exemplo, veja o quadro de amostras com o X abaixo. Você pode ver 'X' em (1,0) também em (4,0) também em (1,3) e em (4,3), então você tem o retângulo [1,0,4,3] que significa de (1,0) a (4,3):
Placa de amostra com X :
["B", "X", "C", "C", "X", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "X", "B", "A", "X", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]
- O objetivo é encontrar o retângulo ou um dos retângulos com a maior área, calculado por (direita-esquerda + 1) * (inferior-superior + 1)
- Se houver vários retângulos com a mesma área máxima, faça a saída de qualquer um. Opcionalmente, aquele com (coordenada superior, coordenada esquerda, coordenada direita, coordenada inferior) lexicograficamente menor.
- Os retângulos devem ter bordas paralelas à borda da placa.
- Cada letra é um caractere ASCII imprimível de A a Z (ambos incluídos).
Saída
A saída deve estar nas posições esquerda e direita dos maiores cantos do retângulo da área. Para a primeira amostra "tabuleiro", o quadrado grande é o amarelo:
E a resposta deve ser:
[1, 1, 8, 4]
Um segundo exemplo de caso de teste
Uma entrada de:
["C", "D", "D", "D", "A", "A"],
["B", "D", "C", "D", "A", "A"],
["B", "D", "D", "C", "A", "C"],
["B", "D", "B", "C", "A", "C"]
Deve produzir uma dessas três listas de coordenadas, identificando uma área de seis retângulos:
[1, 0, 2, 2]
[1, 0, 3, 1]
[3, 2, 5, 3]
Esta pergunta foi publicada no Stack Overflow com o título: Como encontrar o maior retângulo em uma matriz 2D formada por quatro cantos idênticos? e com esta solução JS rude (posso dizer "rude" porque é o meu código;):
Ok, é o meu primeiro post, seja tolerante comigo, por favor. Vou mudar tudo o que você diz para melhorar o teste.
((left,top),(right,bottom))
deve estar bem também. Excluí minha resposta e respondo novamente quando a pergunta é completamente refinada.