Fórmula autorreferencial de Tupper (copiada da Wikipedia)
A fórmula auto-referencial de Tupper é uma fórmula definida por Jeff Tupper que, quando representada graficamente em duas dimensões em um local muito específico no plano, pode ser "programada" para reproduzir visualmente a própria fórmula. É usado em vários cursos de matemática e ciências da computação como um exercício de fórmulas gráficas.
Onde está a função do piso.
Seja k
o número de 543 dígitos a seguir:
960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
Se um gráficos o conjunto de pontos (x, y)
em 0 <= x < 106
e k <= y < k + 17
satisfazendo a desigualdade dado acima, as resultantes aparência do gráfico como este (nota que os eixos deste plano foram revertidas, caso contrário, a imagem sai de cabeça para baixo):
E daí?
O interessante dessa fórmula é que ela pode ser usada para representar graficamente qualquer possível imagem em preto e branco de 106x17. Agora, pesquisar na pesquisa seria extremamente tedioso, então há uma maneira de descobrir o valor-k em que sua imagem aparece. O processo é bastante simples:
- Comece pelo pixel inferior da primeira coluna da sua imagem.
- Se o pixel for branco, um 0 será acrescentado ao valor k. Se estiver preto, anexe 1.
- Mova a coluna para cima, repetindo a etapa 2.
- Uma vez no final da coluna, vá para a próxima coluna e comece da parte inferior, seguindo o mesmo processo.
- Após a análise de cada pixel, converta essa sequência binária em decimal e multiplique por 17 para obter o valor-k.
Qual é o meu trabalho?
Seu trabalho é criar um programa que possa capturar qualquer imagem de 106x17 e gerar o valor k correspondente. Você pode fazer as seguintes suposições:
- Todas as imagens terão exatamente 106x17
- Todas as imagens conterão apenas pixels preto (# 000000) ou branco (#FFFFFF), nada no meio.
Existem algumas regras também:
- A saída é simplesmente o valor k. Ele deve estar na base adequada, mas pode estar em qualquer formato.
- As imagens devem ser lidas em PNG ou PPM.
- Sem brechas padrão.
Imagens de teste
[ ] deve produzir ~ 1,4946x10 542
[ ] deve produzir ~ 7.2355x10 159
[ ] deve produzir 2 1801 * 17
[ ] deve produzir (2 1802 -1) * 17
Confira este Gist para as soluções exatas.
Isso é código-golfe , portanto, o menor número de bytes vence.
Links úteis
quine
algum lugar.