Tarea
La tarea es colocar los polígonos en mosaico, dada una configuración de vértice.
Puntuación
Su puntaje es igual al "nivel de complejidad" que alcanza su envío. Los niveles de complejidad son acumulativos, lo que significa que para alcanzar el n. ° 3 también debe admitir los n. ° 1 y n. ° 2.
Las presentaciones en un nivel de complejidad igual se distinguen por el recuento de bytes; victorias más bajas.
Entrada
La entrada es una cadena que contiene una configuración de vértice, que representa una figura de vértice. Es decir, una lista de enteros separados por puntos, donde cada entero (n) representa un n-gon regular, conectado por un vértice común.
Se deben admitir las siguientes configuraciones de vértices:
3.3.3.3.3.3
3.3.3.3.6
3.3.3.4.4
(tenga en cuenta que el orden se refleja en la figura del vértice, por lo tanto, el siguiente es diferente)3.3.4.3.4
3.12.12
3.4.6.4
3.6.3.6
4.4.4.4
4.6.12
4.8.8
6.6.6
Salida - Nivel de complejidad # 1: Figura de vértice
En este nivel de complejidad, la salida es una imagen que muestra la figura del vértice correspondiente a la entrada dada.
La entrada se antepone con un F
símbolo para indicar que la figura del vértice debe salir, y no el mosaico completo.
Por ejemplo F3.6.3.6
da esta figura de vértice:
Salida - Nivel de complejidad # 2: Mosaico
En este nivel de complejidad, la salida es una imagen que muestra un mosaico uniforme utilizando la figura del vértice correspondiente a la entrada dada.
Por ejemplo 3.6.3.6
da este mosaico:
No hay restricciones de color o formato (salvo lagunas).
Salida - Nivel de complejidad # 3: Mosaico dual
En este nivel de complejidad, se puede formar un 'mosaico dual' a partir de cada mosaico. Esto se logra dibujando líneas desde el centro de cada polígono hasta el centro de cada polígono limítrofe.
El mosaico dual se especifica anteponiendo la entrada con a V
.
Por ejemplo V3.6.3.6
da este doble mosaico (en rojo):
3.3.3.4.4
3.3.4.4.3
3.4.4.3.3
4.4.3.3.3
4.3.3.3.4
. ¿Tenemos que admitir todos los sinónimos, o solo el léxico más bajo (como se indica en la pregunta)? Además,3.3.3.3.6
existe en dos formas de imagen espejo. Entiendo que cualquiera es aceptable.3.3.3.4.4
falta por ejemplo. en.wikipedia.org/wiki/… coincide exactamente con su lista. Entiendo que los polígonos de contorno o rellenos son aceptables (¿o una combinación de los dos?) Algunos duales ya están en la lista. Por ejemplo,4.4.4.4
es su propio dual3.3.3.3.3.3
y6.6.6
son mutalmente duales. Como los duales se muestran independientemente de sus padres, entiendo que no hay necesidad de una alineación correcta con los padres.3.3.3.3.6
pero ¿cómo saber cuál es? :)Respuestas:
BBC BASIC
Rev 1 Código de golf, 655 caracteres ASCII, tamaño de archivo tokenizado 614
Algunas mejoras importantes en la tabla de datos, al dividir la cadena
A.B..N
en un número(1*A+2*B+..n*N)+n
antes de buscar, y al almacenar solo un vector de traducción (el otro es generado por el código). Más explicaciones cuando haya terminado de jugar golf.Rev 0 Código de golf, 770 caracteres ASCII, tamaño de archivo tokenizado 728
Todo lo que he hecho aquí es eliminar comentarios, espacios en blanco innecesarios y comillas, y poner todo
DATA
en una línea. Ciertamente hay espacio para más golf.Explicación
Esta es una continuación de mi respuesta anterior de Nivel 1, pero decidí publicarla por separado porque es bastante larga.
Nivel 2
Esto se logra mediante la traducción de mis plantillas de "nivel 1.5" de mi respuesta anterior. Los dos vectores de traducción para cada mosaico están codificados. Aprovecho el hecho de que un triángulo isósceles de base 80 y altura 70 es una muy buena aproximación de un triángulo equilátero, y un triángulo rectángulo con vector de hipotenusa
(56,56)
tiene una longitud de hipotenusa muy cercana a 80.Nivel 3
Para trazar los duales, en lugar de trazar un borde del polígono, trazamos un radio desde el medio de ese borde hasta el centro del polígono. Esto está en ángulo recto con el borde y tiene una longitud de
1/TAN/(PI/n)
veces del vector (u, v) que a su vez es la mitad del borde.Desafortunadamente, debido a que ciertos polígonos en las inclinaciones
3.3.3.3.6
y3.4.6.4
no se trazan explícitamente, no se trazarían si solo hiciéramos esto. Por lo tanto, el radio también se extiende hacia afuera desde el polígono. La extensión hacia el exterior está controlada por la variableo
.Por defecto, la extensión es suficiente para alcanzar el centro de un triángulo, pero para
3.4.6.4
ello debe extenderse más para dibujar los duales de los cuadrados que no se trazan explícitamente. Por lo tanto, se aplica suficiente extensión para completar los cuadrados faltantes cuando los hexágonos y los triángulos se trazan explícitamente, pero la extensión normal se aplica cuando los cuadrados se trazan explícitamente, para evitar líneas espurias en los triángulos adyacentes.Así es como se ven sin las extensiones de radios. Los agujeros en el patrón dual se pueden ver claramente. La salida correcta se puede ver en la imagen principal en la parte inferior de la respuesta
Código comentado
Las diferencias con respecto a mi respuesta anterior se indican en línea.
Salida
El programa realiza solo un mosaico o doble para cada ejecución. Sin embargo, traza los duales en rojo. Para ahorrar espacio, ejecuté el programa dos veces sin borrar la pantalla para superponer el dual encima del mosaico normal.
fuente
Mathematica
El nivel 1 contiene las plantillas de mosaico básicas que se estampan repetidamente para mosaico de un plano.
El nivel 2 hace el mosaico.
Todavía hay 2 inclinaciones que no he podido lograr. Parecen requerir rotación así como traslación.
Nivel 1: Figura de Vértice (559 bytes)
Pruebas
Nivel 2: Mosaico (690 bytes adicionales)
Las reglas devuelven compensaciones de mosaico y sangrías para cada configuración.
r
es la función básica que genera las inclinaciones.p
muestra la plantilla y el mosaico respectivo. Los espacios en blanco corresponden a aquellos no cubiertos por la plantilla.Pruebas
Mosaico triangular
hexagonal
cuadrado
desconocido
cuadrado truncado
trihexagonal
hexagonal truncado
sin nombre
triangular alargado
Inclinaciones para descubrir
fuente
3.3.3.3.3.3
mitad, de modo que las unidades se superpongan, puede deshacerse de esos diamantes y arreglar ese mosaico. Todavía tienes más que hacer3.3.3.3.6
,3.4.6.4
y4.6.12
sin embargo.4.6.12 anyone know what it should look like?
- Todas las inclinaciones requeridas están en en.wikipedia.org/wiki/… . Vea mi comentario sobre la pregunta. Esta es una página diferente a la mencionada en la pregunta. Pero4.6.12
también se muestra en esa página de todos modos.R
Paso 1
Aquí está mi esfuerzo para construir los azulejos. Azulejos para venir a continuación. Esto no valida la entrada, por lo que los inválidos dibujarán algunos mosaicos extraños. La entrada se escribe después de la primera línea
Paso 1, 2 y 3: 1898
Finalmente volví a eso. La mayor parte de esto se trata de establecer compensaciones y manejar casos especiales :). Editar: la bandera V para los duales ahora se maneja
El proceso general es:
Probablemente todavía pueda jugar golf un poco más.
fuente
BBC BASIC
Descargue el emulador en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Nivel 1
Nivel 1.5
El nivel 1.5 es mi propia designación, pero es un hito importante en mi método.
La traducción de las figuras de vértice no siempre conduce al mosaico correcto. En algunos casos faltan líneas.
Mi solución a esto es rodear el polígono más grande, dibujando la figura del vértice para cada segundo vértice de ese polígono. Esta es una solución general para todos los casos. Tenga en cuenta que el polígono más grande siempre tiene un número par de lados y la figura del vértice a menudo alterna en sentido horario / antihorario a medida que avanza por el polígono. Esto se puede ver más claramente con
4.6.12
, pero también es cierto de4.8.8
y3.12.12
: cuando se ve desde cualquier 8-gon o 12-gon en particular, los vértices alternos son imágenes especulares entre sí. Esto también es lo que está sucediendo, algo menos obvio, con3.3.3.4.4
y3.3.4.3.4
: cuando se ve desde un cuadrado en particular, los vértices alternos son imágenes especulares entre sí.El algoritmo que uso para mover 2 lados alrededor del polígono es hacer siempre 14 iteraciones del ciclo de dibujo de bordes, independientemente de cuántos bordes tenga el polígono. 8 es un factor de 16, por lo tanto, al dibujar octágonos, el cursor gráfico termina 16-14 = 2 vértices detrás de donde comenzó. 3- 4- 6- y 12- gons tienen lados que son factores de 12, por lo que el cursor gráfico termina 14-12 = 2 vértices delante de donde comenzó.
Las figuras se pueden ver a continuación. Mañana espero resolver las traducciones correctas para completar el mosaico. En todos los casos, se dibujan suficientes líneas para completar el nivel 2 solo con traducciones. En algunos casos, se dibuja mucho más que el mínimo requerido, pero no hay problema con la superposición: las reglas no dicen nada sobre dibujar líneas solo una vez :-)
En general, el polígono más grande es el último en la lista. Desafortunadamente, hay un caso en el que esto no es así: por lo
3.4.6.4
tanto, la figura dibujada en este caso se centra en un cuadrado en lugar de un hexágono. Hay suficientes líneas para completar el nivel 2 usando solo traducciones, aunque habrá ciertos cuadrados que no se dibujan explícitamente. Esto presentará algunos problemas en el nivel 3 (afortunadamente creo que sé cómo resolver esto). De manera similar,3.3.3.3.6
hay suficientes líneas para completar el nivel 2 usando solo traducciones, pero habrá ciertos triángulos que no se dibujan explícitamente.Código
El código para el nivel 1.5 está comentado, solo se activa el código para el nivel 1. Hay cuatro líneas que comienzan con a
REM
. Elimina estosREM
s para activar el nivel 1.5.Niveles 2 y 3
Mira mi otra respuesta.
fuente