Desafío
Escriba un programa que, dada una matriz booleana bidimensional (equivalentemente, un mapa de bits monocromático), emite una serie de polígonos que describen el esquema de la región que es "verdadero" (1).
La entrada se proporciona como una secuencia de caracteres '#'
(hash), ' '
(espacio) y \n
(nueva línea). Las líneas pueden diferir en longitud, en cuyo caso se supone que las partes faltantes son espacios. La salida debe ser una lista de polígonos (separados por una nueva línea), cada polígono representado por una lista de coordenadas (separadas por comas).
Ejemplos y requisitos
Las coordenadas deben estar listadas en el sentido de las agujas del reloj. Entrada:
#
Los resultados aceptables incluyen:
(0,0), (1,0), (1,1), (0,1) (1,0), (1,1), (0,1), (0,0) (1,1), (0,1), (0,0), (1,0) (0,1), (0,0), (1,0), (1,1)
Las regiones disjuntas deben devolver múltiples polígonos. Entrada:
# #
Ejemplo de salida (la salida real debe constar de dos líneas):
(0,0), (1,0), (1,1), (0,1) (2,0), (3,0), (3,1), (2,1)
Los agujeros en un polígono se deben enumerar como un polígono separado, pero en orden antihorario. Entrada:
### # # ###
Salida de ejemplo:
(0,0), (3,0), (3,3), (0,3) (1,1), (1,2), (2,2), (2,1)
Usted es libre de elegir si los vértices adyacentes en diagonal se unen o no. Entrada:
# #
Salida de ejemplo:
(0,0), (1,0), (1,1), (0,1) (1,1), (2,1), (2,2), (1,2)
o
(0,0), (1,0), (1,1), (2,1), (2,2), (1,2), (1,1), (0, 1)
Las listas de coordenadas no necesitan ser óptimamente cortas. Por ejemplo:
##
Salidas aceptables:
(0,0), (2,0), (2,1), (0,1) // Redundant coordinates along a straight line are acceptable (0,0), (1,0), (2,0), (2,1), (1,1), (0,1) // Duplicate start- and end-point are acceptable (0,0), (2,0), (2,1), (0,1), (0,0)
Como de costumbre, el programa más corto "gana".