Desafio
Escreva um programa que, dado um array booleano bidimensional (equivalente a um bitmap monocromático), produz uma série de polígonos que descrevem o contorno da região que é "verdadeiro" (1).
A entrada é fornecida como uma sequência de caracteres '#'(hash), ' '(espaço) e \n(nova linha). As linhas podem diferir em comprimento; nesse caso, as partes ausentes são consideradas espaços. A saída deve ser uma lista (separada por nova linha) de polígonos, cada polígono representado por uma lista de coordenadas (separada por vírgula).
Exemplos e Requisitos
As coordenadas devem ser listadas no sentido horário. Entrada:
#Saídas aceitáveis incluem:
(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)Regiões separadas devem retornar vários polígonos. Entrada:
# #Exemplo de saída (a saída real deve consistir em duas linhas):
(0,0), (1,0), (1,1), (0,1) (2,0), (3,0), (3,1), (2,1)Os furos em um polígono devem ser listados como um polígono separado, mas na ordem anti-horária. Entrada:
### # # ###Exemplo de saída:
(0,0), (3,0), (3,3), (0,3) (1,1), (1,2), (2,2), (2,1)Você é livre para escolher se os vértices adjacentes na diagonal se juntam ou não. Entrada:
# #Exemplo de saída:
(0,0), (1,0), (1,1), (0,1) (1,1), (2,1), (2,2), (1,2)ou
(0,0), (1,0), (1,1), (2,1), (2,2), (1,2), (1,1), (0, 1)As listas de coordenadas não precisam ser otimamente curtas. Por exemplo:
##Saídas aceitáveis:
(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 sempre, o programa mais curto “vence”.