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.Respostas:
CJam, 16
Com muito obrigado a Dennis. Experimente online
Caso você esteja tendo problemas com o URL, esta é a entrada que eu testei:
Usei o formato que o GIMP gerou ao exportar como ASCII pbm, com o comentário removido.
Explicação:
fonte
l;l~\qN-/W%zs:~2b*
deve funcionar da mesma forma.Pitão - 21 bytes
Simples de fazer com a
i
conversão básica de pyth . Recebe a entrada comoPBM
nome do arquivo e lê usando o'
comando Eu tive que usar!M
para negar negros e brancos. Tudo o resto é auto-explicativo.Experimente aqui online . (O intérprete da Web não pode ler os arquivos, portanto é modificado e recebe o arquivo como entrada).
fonte
Python 2:
133110 bytesUma primeira tentativa em python usando PIL:
Obrigado aos comentadores úteis abaixo
fonte
from PIL import Image k=0 for a in range(1802):y=a%17;x=a/17;k=(0 if Image.open(input()).load()[x,16-y][0]else 1)+k*2 print k*17
a/17
ea%17
nos locais apropriados, e pode abusar do fato de 1 ser verdadeiro e 0 ser falso. Aqui está o resultado dessas mudanças, você vai ser até 111 bytes :)input()
é chamado em todas as iterações do loop com essa modificação. Editando com outras dicas, obrigado.(...<1) --> 0**...
talvez?C #, 199
Isso foi divertido! Não há nada errado em recarregar um bitmap 106 * 17 vezes, certo? Eu fiz isso como uma função para salvar alguns bytes, não tenho certeza se isso é legal.
i
é o nome do arquivo de entrada.Além disso, como uma expressão única, apenas porque é uma expressão, com
i
fornecida ou subbedada (167 bytes)fonte
Mathematica 69 Bytes
O Binarize @ pode ficar de fora se a imagem estiver no formato monocromático.
Esta função irá reproduzir a imagem:
fonte