Fórmula autorreferencial de Tupper (copiada de Wikipedia)
La fórmula autorreferencial de Tupper es una fórmula definida por Jeff Tupper que, cuando se representa en dos dimensiones en una ubicación muy específica en el plano, se puede "programar" para reproducir visualmente la fórmula en sí. Se utiliza en varios cursos de matemática y ciencias de la computación como un ejercicio de fórmulas gráficas.
¿Dónde está la función del piso?
Sea k
el siguiente número de 543 dígitos:
960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
Si uno gráficas El conjunto de puntos (x, y)
en 0 <= x < 106
y k <= y < k + 17
que satisface la desigualdad dada anteriormente, las miradas gráfico resultante de este tipo (nota que los ejes en esta parcela se han invertido, de lo contrario la imagen se revele boca abajo):
¿Y qué?
Lo interesante de esta fórmula es que se puede usar para graficar cualquier imagen posible de 106x17 en blanco y negro. Ahora, buscar en realidad sería extremadamente tedioso, por lo que hay una manera de averiguar el valor k donde aparece su imagen. El proceso es bastante simple:
- Comience desde el píxel inferior de la primera columna de su imagen.
- Si el píxel es blanco, se agregará un 0 al valor k. Si es negro, agregue un 1.
- Mueva hacia arriba la columna, repitiendo el paso 2.
- Una vez al final de la columna, pase a la siguiente columna y comience desde abajo, siguiendo el mismo proceso.
- Después de analizar cada píxel, convierta esta cadena binaria a decimal y multiplique por 17 para obtener el valor k.
¿Cual es mi trabajo?
Su trabajo es crear un programa que pueda tomar cualquier imagen de 106x17 y generar su valor k correspondiente. Puede hacer los siguientes supuestos:
- Todas las imágenes serán exactamente 106x17
- Todas las imágenes solo contendrán píxeles negros (# 000000) o blancos (#FFFFFF), nada en el medio.
También hay algunas reglas:
- La salida es simplemente el valor k. Debe estar en la base adecuada, pero puede estar en cualquier formato.
- Las imágenes deben leerse desde PNG o PPM.
- No hay lagunas estándar.
Imágenes de prueba
[ ] debería producir ~ 1.4946x10 542
[ ] debería producir ~ 7.2355x10 159
[ ] debería producir 2 1801 * 17
[ ] debería producir (2 1802 -1) * 17
Echa un vistazo a este Gist para las soluciones exactas.
Este es el código de golf , por lo que gana el menor número de bytes.
Enlaces Útiles
quine
alguna parte.Respuestas:
CJam, 16
Con muchas gracias a Dennis. Pruébalo en línea
En caso de que tenga problemas con la URL, esta es la entrada que probé:
Usé el formato que GIMP generó al exportar como ASCII pbm, con el comentario eliminado.
Explicación:
fuente
l;l~\qN-/W%zs:~2b*
debería funcionar igual de bien.Pyth - 21 bytes
Simple de hacer con la
i
conversión de base de pyth . Toma la entrada comoPBM
nombre de archivo y lee usando el'
comando. Tuve que usar!M
para negar negros y blancos. Todo lo demás se explica por sí mismo.Pruébalo aquí en línea . (El intérprete web no puede leer archivos, por lo que se modifica y toma el archivo como entrada).
fuente
Python 2:
133110 bytesUn primer intento en python usando PIL:
Gracias a los comentarios útiles a continuación
fuente
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
y ubicarsea%17
en los lugares apropiados, y puede abusar del hecho de que 1 es verdadero y 0 es falso. Aquí está el resultado de estos cambios, bajará a 111 bytes :)input()
se llama en cada iteración del bucle con esa modificación. Sin embargo, editando con otros consejos, gracias.(...<1) --> 0**...
¿tal vez?C #, 199
¡Esto fue divertido! No hay nada de malo en recargar un mapa de bits 106 * 17 veces, ¿verdad? Lo hice como una función para guardar algunos bytes, no estoy seguro si eso es legal.
i
es el nombre del archivo de entrada.Además, como una sola expresión, solo porque es una expresión, con
i
provisto o subbed (167 bytes)fuente
Mathematica 69 Bytes
Binarize @ se puede omitir si la imagen tiene formato monocromo.
Esta función reproducirá la imagen:
fuente