Mientras garabateaba en papel de regla cuadrada el otro día, se me ocurrió la fuente de espacio negativo anterior para dígitos. En caso de que aún no lo haya visto, los espacios entre las formas anteriores producen la proporción dorada 1.618033988749 . En este desafío, su tarea es tomar un número como entrada y representarlo exactamente como se muestra en el ejemplo anterior.
Así es como se crean estos. Todas las líneas estarán en una cuadrícula regular, de modo que los dígitos individuales estén formados por un pequeño número de celdas de la cuadrícula. Aquí están las formas de los 10 dígitos (ignoraremos el punto decimal para este desafío):
Sí, el 7 difiere del ejemplo de la proporción áurea en la parte superior. Lo arruiné un poco. Iremos con este.
Observe que cada dígito tiene cinco celdas de alto y tres celdas de ancho. Para representar un número, puede imaginarse colocando todos sus dígitos uno al lado del otro, de modo que haya exactamente una columna vacía entre cada par de dígitos. Por ejemplo, tomando 319
como entrada, escribiríamos:
Observe que agregamos una columna vacía inicial y final. Ahora invertimos las células:
La salida debería ser los límites de los polígonos resultantes:
Por supuesto, puede generar el resultado de cualquier otra manera, siempre que la salida representada tenga el mismo aspecto.
Entrada
- Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función, como una cadena o lista de dígitos. (No puede tomar un número ya que eso no le permitiría admitir ceros iniciales).
- Puede suponer que no habrá más 16 dígitos en la entrada.
Salida
- La salida puede mostrarse en la pantalla o escribirse en un archivo en un formato de imagen común.
- Puede usar tanto gráficos de trama como gráficos vectoriales.
- En cualquier caso, la relación de aspecto de las celdas de la cuadrícula subyacente debe ser 1 (es decir, las celdas deben ser cuadrados).
- En el caso de los gráficos de trama, cada celda debe cubrir al menos 20 por 20 píxeles.
- Las líneas no deben ser más anchas que el 10% del tamaño de la celda. Estoy dispuesto a dejar uno o dos píxeles de margen debido al alias aquí.
- Las líneas y el fondo pueden ser dos colores claramente distinguibles, pero las formas creadas por las líneas no deben rellenarse (es decir, el interior también debe ser el color de fondo).
- No debe haber huecos dentro de cada circuito cerrado.
- Por supuesto, todo el resultado debe ser visible.
Casos de prueba
Aquí hay 10 entradas, que juntas cubren todos los pares posibles de dígitos adyacentes, así como todos los dígitos iniciales y finales posibles:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
Y aquí están los resultados esperados para aquellos:
Asegúrese de que su código también funcione cuando se le da un solo dígito (no quiero incluir los resultados esperados aquí, porque deberían ser obvios, y la sección del caso de prueba está lo suficientemente hinchada como está).
fuente
Respuestas:
BBC BASIC, 182 caracteres ASCII (tamaño de archivo tokenizado de 175 bytes)
Descargue el intérprete en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Puntuación: cuando el programa anterior se pega en el editor y se ejecuta, el editor expandirá las palabras clave abreviadas a palabras clave completas en pantalla, aunque en realidad solo son 1 byte después de la tokenización. (Ejemplo
I.
=INPUT
espacio de almacenamiento de 1 byte).Explicación
Simplemente explicaré lo que hace la línea VDU: dibuja un cuadro cambiando un poco el color de píxel actual en la pantalla. Esto significa que (con un poco de cuidado con las esquinas) es posible simplemente dibujar una celda una al lado de la otra, y el borde intermedio se cancelará y desaparecerá debido al doble dibujo.
Un examen detallado revelará que se dibujan las esquinas superior derecha e inferior izquierda de una celda, pero faltan las partes superior izquierda e inferior derecha ("redondeadas") para que esto funcione.
Después de que se dibuja la celda, el cursor de gráficos se mueve hacia arriba 32 píxeles listo para dibujar la siguiente celda.
El resto del programa es una descompresión de mapa de bits ASCII bastante sencilla. Las dimensiones de la celda son 64x64 unidades para golf / compatibilidad con la forma en que se descomprime el mapa de bits.
q
controla el tamaño de la celda que se traza: 64x64 unidades para una celda que está presente, 0x0 para una celda que está ausente.Código sin golf
Salida
Los
MOVE
s solo llevan la salida a las alturas apropiadas en la pantalla. BBC basic utiliza 2 unidades = 1 píxel en este modo, por lo que las celdas son en realidad 32x32 píxeles.fuente
Octava,
233 225 216213 bytesAquí el primer caso de prueba (de una captura de pantalla redimensionada, st se ajusta a mi monitor =):
La entrada puede tener una longitud arbitraria, como p. Ej.
'07299361548'
fuente
Javascript ES6, 506 bytes
Sin golf:
Supone que hay
<body>
que agregar el lienzo, probado en Firefox 46.Ejemplo ejecutado (asignando una función anónima a f):
rendimientos:
fuente
HTML + JavaScript ES6, 352
Prueba a ejecutar el fragmento a continuación
Menos golf
fuente
Java, 768 bytes
Sin golf
Notas
La entrada es una sola cadena como argumento. Modo de empleo:
javac G.java
,java G 80085
Estoy comenzando con un lienzo negro, luego agrego los números como positivos en blanco. Creo una copia de la imagen y luego volteo cada píxel negro que tiene 4 vecinos negros en la imagen original.
Salidas
Algunos dígitos individuales:
fuente
R, demasiados bytes para jugar al golf (
1530+1115)jajaja al escribir en el disco, luego leer desde el disco editar el relleno negro
fuente
Python 3,
326325 bytesfuente
range(3)
nunca vale la pena.C #, 768
773 776bytesToma el número como argumento de línea de comando. Emite una imagen BMP bonita, limpia y sin alias con el número como nombre.
Original antes del golf:
fuente
Mathematica 328 bytes
Explicación
Se utilizarán cuatro bits en cada una de las 5 líneas de celdas para cada dígito de entrada.
"75557262277174771717557117471774757711117575775717"
representa de 0 a 9 como mapas de bits.Los primeros 5 dígitos en el entero grande anterior, es decir,
75557
cómo se debe mostrar cada fila de matriz para cero.7
representará{0,1,1,1}
, es decir, una celda blanca, seguida, a su derecha, por 3 celdas negras; el inicio0
es un espacio en blanco para separar los dígitos mostrados.5
corresponde a{0,1,0,1}
, que es blanco, negro, blanco, celdas negras.Lo siguiente produce una lista de reglas de reemplazo:
Tenga en cuenta que cuando
3
se ingresa, se reemplazará por71717
Esta representación se expresa en binario:Su inversa negro-blanco se encuentra simplemente intercambiando las
1
s y0
s.Veamos qué aspecto
p
y cómo seq
ve cuando lo muestraArrayPlot
:Esto simplemente une las matrices de ceros y unos para cada dígito antes de representar la matriz grande a través de
ArrayPlot
.*
se definej
como el espacio vertical final después del último dígito.fuente