Neste concurso, você precisa escrever um programa que aceite uma imagem em pixel preto e branco e tente alterá-la, de forma que a forma branca forme o domínio em estrela , com o mínimo de alterações possível.
As alterações permitidas estão transformando pixels brancos em pretos e pixels pretos em brancos.
A saída deve consistir novamente na mesma imagem, mas desta vez com todas as alterações e com o centro marcado. Os pixels que foram alterados de branco para preto devem ser exibidos em azul, os que foram alterados de preto para branco devem ser exibidos em amarelo e pelo menos um pixel central deve ser exibido em vermelho. (As cores exatas são com você.) O programa deve exibir a imagem especificada, bem como o número total de alterações que foram feitas.
Definições
Star Domain
O conjunto de pixels brancos da imagem representa um domínio em estrela se (e somente se) houver (pelo menos) um pixel central . O pixel central é um dos pixels brancos que podem ser conectados por uma linha reta a todos os outros pixels brancos, de modo que a linha atravesse apenas pixels brancos. (O pixel central não é necessariamente único.)
Linha reta entre dois pixels
Dado dois pixels (início e fim, ambos vermelhos na ilustração abaixo), a linha reta entre os dois pixels consiste em todos os pixels, que tocam na linha (matemática, amarela na ilustração abaixo) que leva do centro da primeira pixel para o centro do último pixel. Um pixel não está tocando a linha se apenas o tocar em um canto; portanto, para que ele pertença à linha de pixel, a linha (matemática, amarela) deve cruzar o pixel em questão com um comprimento diferente de zero. (Se apenas tocar o ponto de canto, isso será considerado como comprimento zero). Considere os seguintes exemplos:
Exemplo
A primeira imagem deve representar um exemplo de entrada de teste 'e as duas outras imagens representam duas saídas possíveis válidas para o exemplo dado:
As áreas amarelas (anteriormente pretas) contam também para o domínio 'branco', enquanto as áreas azuis (anteriormente brancas) contam para a parte 'preta' fora do domínio e o ponto vermelho a cada vez representa um possível pixel central.
Casos de teste
Os seguintes casos de teste são pngs, cada um com um tamanho de 256 x 256 pixels.
Pontuação
Execute seu programa com os seguintes casos de teste e inclua a saída (imagem / número de alterações) em sua resposta. Farei uma tabela de classificação para cada caso de teste. Sua pontuação será a soma de cada classificação na tabela de classificação - quanto menor a pontuação, melhor. Aplicam-se brechas padrão. Não é permitido fazer o programa reconhecer esses casos de teste e executar um caso especial para eles. (Não é permitido pré-calcular e salvar os pixels centrais ideais para cada um desses casos de teste.) O programa deve funcionar para qualquer imagem.
Entre os melhores
Name | Score | 1 - rk | 2 - rk | 3 - rk | 4 - rk | 5 - rk | 5 - rk | Total Changes
------------+-------+------------+------------+------------+------------+------------+------------+--------------
Maltysen | 11 | 28688 - 2 | 24208 - 2 | 24248 - 1 | 7103 - 2 | 11097 - 2 | 13019 - 2 | 108363
TheBestOne | 7 | 0 - 1 | 13698 - 1 | 24269 - 2 | 103 - 1 | 5344 - 1 | 4456 - 1 | 47867
Respostas:
Java 8, 47.867 mudanças no total.
Usa a média da imagem como ponto central. Em seguida, atrai todos os raios possíveis para o centro e fornece o melhor raio para a cor. Em seguida, pinta todos os pontos inválidos em preto.
Resultados
Imagem 1 - 0 alterações, Imagem 2 - 13.698 alterações
Imagem 3 - 24.269 alterações, Imagem 4 - 103 alterações
Imagem 5 - 5.344 alterações, Imagem 6 - 4.456 alterações
Sem pixels inválidos removidos, 42.782 alterações no total
Pixels verdes são a primeira camada de pixels inválidos.
Imagem 1 - 0 alterações, Imagem 2- 9.889 alterações
Imagem 3 - 24.268 alterações, Imagem 4 - 103 alterações
Imagem 5 - 4.471 alterações, Imagem 6- 4.050 alterações
Todos os pixels brancos em todas as imagens podem ter uma linha desenhada para eles a partir do pixel central, se a linha não precisar se originar / terminar nos centros, mas em qualquer lugar do pixel.
args[0]
contém o nome do arquivo de entrada.args[1]
contém o nome do arquivo de saída.Imprime para o
stdout
número de alterações.fonte
Python - PIL -
216.228108.363 alterações no totalWhoo! Corte ao meio graças a @AJMansfield! Esse algoritmo ignora toda a preocupação com o cálculo de linhas e otimização e o que não.
Apenas muda todos os brancos para preto, exceto um. Se não houver brancos, torna um preto um branco.Ele verifica se há mais brancos ou pretos e altera cada um do outro tipo, exceto um. Se não houver preto, ele faz (0, 0) o centro.Resultados
Imagem 1 - 28688 alterações, Imagem 2 - 24208 alterações
Imagem 3 - 24248 alterações, Imagem 4 - 7103 alterações
Imagem 5 - 11097 alterações, Imagem 6 - 13019 alterações
Pega o nome do arquivo de raw_input e grava em out.png e imprime o número de alterações.
fonte