Entrada
El tablero: un contenedor 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"]
Si elige una lista de listas, puede suponer que todas las sublistas tienen la misma longitud.
Reglas
- Para hacer un rectángulo válido, necesita todas las esquinas del rectángulo con la misma 'letra'.
- Ejemplo, mire el tablero de muestra con X debajo. Puede ver 'X' en (1,0) también en (4,0) también en (1,3) y en (4,3), entonces tiene el rectángulo [1,0,4,3] que significa (1,0) a (4,3):
Tablero de muestra con 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"]
- El objetivo es encontrar el rectángulo o uno de los rectángulos con el área más grande, calculado por (derecha-izquierda + 1) * (abajo-arriba + 1)
- Si hay varios rectángulos con la misma área máxima, imprima cualquiera. Opcionalmente el que tiene (coordenada superior, coordenada izquierda, coordenada derecha, coordenada inferior) lexicográficamente más pequeño.
- Los rectángulos deben tener bordes paralelos al borde del tablero.
- Cada letra es un carácter ASCII imprimible de la A a la Z (ambos incluidos).
Salida
La salida debe ser las posiciones izquierda y derecha de las esquinas rectangulares de mayor área. Para el primer "tablero" de muestra, el cuadrado grande es el amarillo:
Y la respuesta debería ser:
[1, 1, 8, 4]
Un segundo caso de prueba de ejemplo
Una 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"]
Debería producir una de estas tres listas de coordenadas que identifiquen un área de seis rectángulos:
[1, 0, 2, 2]
[1, 0, 3, 1]
[3, 2, 5, 3]
Esta pregunta se publica en Stack Overflow con título: ¿Cómo encontrar el rectángulo más grande en una matriz 2D formada por cuatro esquinas idénticas? y con esta solución grosera de JS (puedo decir "grosero" porque es mi código;):
Ok, es mi primer post, sé tolerante conmigo por favor. Cambiaré todo lo que digas para mejorar el cuestionario.
((left,top),(right,bottom))
debería estar bien. Eliminé mi respuesta y respondo nuevamente cuando la pregunta está completamente refinada.