Primero, estudie este rompecabezas para tener una idea de lo que va a producir.
Su desafío es escribir un programa o función que genere un gráfico circular como los del rompecabezas, dado un número (base 10) entre 1 y 100 (inclusive). Esto es similar a este desafío , excepto que producirá un gráfico en lugar de números romanos. Los siguientes círculos representan los números del 1 al 10, de izquierda a derecha:
Como dice la respuesta al acertijo, su gráfico debe leerse como un número romano desde adentro hacia afuera, donde el grosor de la línea representa los símbolos del número romano y todo el gráfico representa el número. Para su referencia, aquí están los grosores de línea que necesitará. Cada línea debe tener un relleno de 3px entre ella y la siguiente.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
Por favor, publique una muestra o dos de su salida. Suponga que la entrada es correcta, lagunas estándar , etc., etc. Este es el código de golf, por lo que ganan menos bytes. En caso de empate, la mayoría de los votos ganan. ¡Buena suerte!
fuente
Respuestas:
Mathematica -
166181 bytesUn poco más conciso que la otra respuesta de Mathematica, gracias en parte a un estilo más libre de puntos.
Todo el espacio en blanco es solo por claridad. Esto define una función anónima que devuelve el gráfico deseado.
Animación
Generar un GIF animado de los círculos numéricos es trivial en Mathematica, que tiene funciones incorporadas para animar y exportar secuencias de objetos arbitrarios. Suponiendo que el código anterior se acaba de ejecutar,
Salida de ejemplo
fuente
Lisp común
376331304 bytesEjemplos
(1) (24)
(104) (1903) (3999)
Animación
Para números del 1 al 400:
NB: Para el registro, esta animación se realiza de la siguiente manera:
Tengo una versión modificada del código,
rings
cuyo nombre devuelve el ancho de la imagen producida. Por lo tanto, el resultado del siguiente bucle es el tamaño máximo, aquí 182 :Todo el ciclo toma 9.573 segundos. Eso da aproximadamente 24 ms para cada número entero. Luego, en una cáscara:
Sin golf
Explicaciones
La función toma un número entero
N
entre 1 y 3999 y un nombre de archivoYo uso
(format nil "~@R" N)
para convertir de decimal a romano. Por ejemplo:La
~@R
cadena de control de formato se especifica para trabajar con enteros entre 1 y 3999. Es por eso que hay una limitación para el rango de entradas permitidas.I itero sobre la cadena resultante para construir una lista que
P
contenga(radius width)
parejas, para cada número C.El ancho es un mapeo lineal simple: uso la cadena constante "IVXLCDM" para calcular la posición de C en él. Multiplicando por dos y sumando uno, obtenemos el valor deseado:
Sin embargo, esto se hace de manera ligeramente diferente en la versión de golf:
El cálculo de cada radio tiene en cuenta el ancho de cada anillo, así como los espacios vacíos entre los anillos. Sin ninguna optimización de velocidad, los cálculos siguen siendo precisos porque no se basan en flotantes, sino en números racionales.
Editar : cambié los parámetros para cumplir con las reglas de relleno.
Una vez hecho esto, sé el tamaño requerido del lienzo resultante (dos veces el último radio calculado).
P
y guardo el lienzo.fuente
HTML + JQuery, 288
HTML
JS
Mostrar fragmento de código
Violín
fuente
Java, 565
Ejemplos
15
84
93
Formateado muy bien:
fuente
Mathematica
9-301249 bytes: D Se siente engañoso usar la conversión incorporada a números romanos, pero bueno.
(Cuando hice esto anoche, no tuve mucho tiempo, pero me di cuenta de que podía jugar golf mucho más. Y también tomé algunas pistas de David Zhang ...: D ¡Gracias!)
Un poco más claro:
Esta es una función que puede llamar así:
O bien, puede mostrar los resultados de los valores de una a b con:
Table[r[i],{i,a,b}]
Nota : Esto solo funciona para valores de hasta 399.
fuente
Pitón 2,
322296La secuencia de comandos lee el número que se convertirá desde stdin y muestra la imagen como marcado SVG.
.. Uso 'rojo' en lugar de 'negro', porque ahorra 2 caracteres :)
Aquí hay algunos ejemplos: para 23: http://jsfiddle.net/39xmpq49/ para 42: http://jsfiddle.net/7Ls24q9e/1/
fuente
JavaScript
342334308fuente