Desafio
Dada uma imagem da Lua como entrada, produza a fase da Lua.
Fases da lua
Seu programa receberá uma dessas imagens no formato png e você deverá gerar a fase exatamente como indicado:
new moon
waxing crescent
first quarter
waxing gibbous
full moon
waning gibbous
third quarter
waning crescent
Entrada
A entrada será o caminho para um arquivo png de 240 x 240 px e será a imagem acima.
Os bytes da imagem são garantidos para serem os mesmos.
Ganhando
O código mais curto vence
code-golf
image-processing
Beta Decay
fonte
fonte
Respostas:
Node.js , 145 bytes
Experimente online! (gera arquivos fictícios com os mesmos tamanhos)
Como?
Apenas analisamos o tamanho do arquivo e o convertemos em índices em duas tabelas de pesquisa.
Primeira parte:
Segunda parte:
fonte
Python 2 ,
223222 bytes-1 byte graças a OMᗺ
getpixel((x,y))
- retornará o pixel RGBA emx,y
getpixel((n*48,99))[2]for n in[1,2,3,4]
- retornará o canal azul da linha do meio, onden*48 ... for n in 1,2,3,4
haverá 4 pontos onde a luz do sol poderá cobrirn*getpixel(...)
- gerará um valor diferente para cada colunasum(...)%13
- esses valores serão somados e%13
usados para obter um valor único valor para cada fase, que será usado como índice para a lista de fasesOs pixels estão aproximadamente dentro dos círculos vermelhos:
fonte
Ruby, 131 bytes
Deslocamentos de bytes encontrados pela força bruta - pegar o 699º byte do arquivo módulo 7, por exemplo, fornece um índice na primeira tabela de pesquisa.
fonte
Python 2 ,
196165 bytesExperimente online!
fonte
PHP (> = 5,4),
199197 bytes(-2 bytes por mais golfe)
Para executá-lo:
Exemplo:
Notas:
-d error_reporting=0
opção é usada para não emitir avisos / avisos.-d short_open_tag=1
é necessária para permitir tags curtas.https
URL como o exemplo acima, o OpenSSL também deverá estar ativado.Como?
Obtém o tamanho do arquivo (bytes) e cria um número exclusivo para ele por esta fórmula:
((<first_bytes_digit> + <fourth_bytes_digit>) % 11) - 2
Essa fórmula gera números de 0 a 8 com apenas 3 faltando.
Abordagens anteriores:
PHP (> = 5,4), 251 bytes
Para executá-lo:
Exemplo:
Notas:
-d error_reporting=0
opção é usada para não emitir avisos / avisos.-d short_open_tag=1
é necessária para permitir tags curtas.https
URL como o exemplo acima, o OpenSSL também deverá estar ativado.Como?
Verifica a cor de 4 pixels na imagem em
40,120
,80,120
,160,120
e200,120
e decide sobre a fase da lua a partir dessas cores.fonte