El arte de la programación informática

Oct 19 2020

EDITAR: Sé que se supone que no debemos editar nuevos requisitos después de la primera publicación, pero hasta donde yo entiendo, este requisito está implícito en todas las preguntas aquí: ¡
Explique su respuesta! Por lo menos un poco. Entonces, un lector casual tiene la oportunidad de seguir sus reflexiones y apreciar su genio.

Aquí hay uno simple pero espero que sea divertido:

¿Puedes recrear alguno de los siguientes patrones?

Reglas:

  1. Solo aritmética de enteros

  2. Estrictamente local, es decir, solo se pueden usar las coordenadas x, y de un punto para calcular su color.

  3. Sin tablas de búsqueda

  4. Sin fuerza bruta (es por eso que la etiqueta sin computadoras está ahí en caso de que se lo pregunte), aparte de eso, puede usar las computadoras como mejor le parezca.

(5.) Cuanto más simple, mejor

Notas:


Los patrones son todos periódicos y usan colores 0,1,2,3,4.
No es necesario utilizar exactamente los mismos colores, cinco colores bastarán.
Deliberadamente no puse una versión de texto de los patrones porque se supone que no debes usar la fuerza bruta.
Todavía soy bastante nuevo en la creación de rompecabezas, cualquier comentario es bienvenido.

Un ejemplo con solución:


Posible respuesta $f(x,y) = \left [ \lfloor \frac x 3 \rfloor - \lceil \frac {y+2x+1} 6 \rceil - \lceil \frac {y+1} 6 \rceil \right ] \mod 5$

Respuestas

5 GarethMcCaughan Oct 19 2020 at 20:26

Creo que el primer patrón es (con (0,0) en la parte superior izquierda)

$$\Biggl\{\left\lfloor\frac{2x+3y-2}8\right\rfloor+\left\lfloor\frac{-3x-2y+3}8\right\rfloor \Biggr\} \mathop{\textrm{mod}}5.$$

Y el último es (con (0,0) en la parte superior izquierda)

$$\Biggl\{x+y+m(x-y)-\left\lfloor\frac x4\right\rfloor\Biggl\}\mathop{\textrm{mod}}5$$

dónde

$m(x)$ va $0, +1, 0, -1$ Dependiendo de $x$ mod 4. Hay muchas formas sin tablas de búsqueda de definir $m$; por ejemplo$m(x)=(x \mathop{\textrm{mod}}2)\cdot(-1)^{\lfloor x/2\rfloor}$.

La pregunta se ha actualizado para incluir una solicitud para "explicar su respuesta".

No tengo mucha explicación que ofrecer para el primer patrón. yo solo

pensé que debería probar cosas de la forma $\lfloor\textrm{linear}(x,y)\rfloor+\lfloor\textrm{linear}(x,y)\rfloor\pmod5$, con los coeficientes de las dos cosas lineales coincidiendo para dar al patrón el tipo correcto de simetría; la periodicidad del patrón sugirió que probablemente quería 8 o 16 en los denominadores, un poco de experimentación mostró (como debería haber sido obvio desde el principio) que la diferencia entre los denominadores$x$ y $y$Los coeficientes aparecen en cuántas "bandas" hay de suroeste a noreste, y luego solo hubo unos pocos casos para tratar de ver si dieron el patrón correcto. Después de encontrar algo con el patrón correcto pero un desplazamiento en$x$ y $y$Yo reemplacé $x,y$ con $x-\delta,y-\epsilon$ dónde $\delta,\epsilon$era el offset que necesitaba producir y simplificado. Hecho.

Puedo decir un poco más sobre el cuarto.

En primer lugar, el patrón de bandas muy obvio sugirió que dentro de mi "... mod 5" quería un término $\lfloor x/4\rfloor$. El resto tenía que producir un patrón de "serpiente" periódico simple y agradable. Las serpientes corren de suroeste a noreste yendo a la derecha, derecha, arriba, arriba, derecha, derecha, arriba, arriba, derecha, derecha, etc. Si solo tomamos los contornos de$x+y$entonces tendríamos líneas diagonales simples, que en realidad son bastante similares a esas serpientes; podemos convertir líneas diagonales en serpientes sumando y restando 1 en un conjunto de lugares cuidadosamente seleccionados. Si agrega 1 todo por una línea diagonal de noroeste a sureste, efectivamente empuja todos los contornos una unidad diagonalmente hacia adentro; si resta 1, efectivamente los empuja una unidad diagonalmente hacia afuera. Al mirar un poco el patrón, uno ve que lo que se necesita es que la mitad de las diagonales NW-SE permanezcan como están y la otra mitad alterne entre ser empujadas hacia adentro y hacia afuera, lo que significa que debemos agregar esa función$m(x,y)$ antes de reducir el mod 5.

4 LukasRotter Oct 19 2020 at 17:34

(2 de 4)


$(0,0)$ está abajo a la izquierda, no arriba a la izquierda.

2do patrón:

$f(x,y) = \left [ \left\lceil \frac {3x} 8 \right\rceil - \left\lfloor \frac {5x} 8 - \frac {y} 4 \right\rfloor \mod 5 - \left\lfloor -\frac {y} 8 \right\rfloor \mod 5 \right] \mod 5$

3er patrón:

$f(x,y) = \left [ \left\lceil \frac {3x+3} 7 \right\rceil - \left\lfloor \frac {6x-y} 7 \right\rfloor - 7 \right] \mod 5$