Esta imagem foi criada sobrepondo 7 retângulos de cores diferentes um sobre o outro:
Os retângulos preto e marrom estão desobstruídos , ou seja, nenhum outro retângulo está acima deles.
Escreva um programa que capte uma imagem como essa e remova qualquer retângulo desobstruído, produzindo a imagem resultante.
Exemplo
Se você executou seu programa na imagem acima e continuou executando-o novamente na saída, ele pode progredir assim.
Execução 1 - Preto removido (poderia ter sido marrom):
Execução 2 - Marrom removido (única opção):
Execução 3 - Amarelo removido (única opção):
Execução 4 - Azul removido (poderia ter sido verde):
Execução 5 - Verde removido (única opção):
Execução 6 - Marrom removido (única opção):
Execução 7 - Vermelho removido (única opção):
Qualquer execução adicional deve produzir a mesma imagem em branco.
Esperamos que o Stack Exchange não tenha compactado com perda nenhuma dessas imagens.
A imagem sempre terá um fundo branco e cada retângulo terá uma cor RGB exclusiva que não é branca.
Você pode assumir que a imagem sempre pode ser interpretada como um conjunto de retângulos sobrepostos. Especificamente, você pode assumir que, para uma cor específica, o pixel com a cor mais próxima da parte superior da imagem faz parte da borda superior do retângulo dessa cor. O mesmo vale para as bordas inferior, esquerda e direita.
Assim, por exemplo, nesta imagem, a borda superior do retângulo vermelho estaria logo abaixo da borda inferior do retângulo amarelo, pois o retângulo laranja cobria a antiga borda superior vermelha:
Nesta imagem, o retângulo vermelho pode ser removido primeiro (junto com preto / marrom / laranja / cinza):
Quando a ordem dos retângulos inferiores é ambígua, você pode dar a eles qualquer ordem.
Por exemplo, a imagem da esquerda aqui pode se tornar do meio ou da direita:
A saída não deve ter sobreposições paradoxais (portanto, é possível torná-la com o algoritmo do pintor ). Portanto, nesta imagem ( obrigado user23013 ), teria que ser verde sob o retângulo laranja:
detalhes adicionais
- A imagem e os retângulos podem ter quaisquer dimensões.
- Os retângulos podem tocar na borda da imagem.
- Pode haver até 256 3 - 1 retângulos.
- Se a entrada for totalmente branca, a saída também deve ser.
- Você pode usar bibliotecas de imagens.
- A entrada deve ser o nome do arquivo de imagem ou os dados brutos da imagem. Pode vir do stdin ou da linha de comando.
- A saída pode ser gravada no mesmo ou em outro arquivo de imagem, transmitida em bruto para stdout ou simplesmente exibida.
- É permitido qualquer formato comum de arquivo de imagem truecolor sem perdas .
O envio com o menor número de bytes vence.