Leonardo da Pisano, alias Fibonacci, contribuyó decisivamente a llevar el sistema de numeración hindú-árabe a Europa. Antes de eso, los matemáticos allí trabajaban en base sesenta con números romanos.
Por ejemplo, la raíz cuadrada de dos podría aproximarse como: una y veinticuatro partes de sesenta y cincuenta y una partes de tres mil seiscientos , y se escribiría como: i xxiv li , con la escala determinada por el contexto. En ese momento, se conocía la "nada" ( es decir, cero), pero no tenía una representación estándar en este sistema numérico.
Si Fibonacci hubiera ignorado estos dígitos decimales recién descubiertos que encontró durante sus viajes, seguramente habría abordado las deficiencias en el sistema actual. Este sistema mejorado lo llamaremos sexagesimales de Fibonacci .
Su tarea es escribir un programa, función o fragmento de código que tome un número de coma flotante en formato ASCII o binario y que salga en una base de sesenta números romanos. La entrada puede ser archivo, consola, línea de comando o argumento de función y la salida puede ser archivo o consola, lo que sea más fácil.
La salida puede ser mayúscula o minúscula, y debe incluir estas mejoras:
- use n o N para indicar nulo, lo que significa que un lugar no tiene valor, es decir , "cero" (un problema con el sistema)
- use e o E para indicar et correspondiente al punto sexagesimal (otro problema con el sistema)
- use un punto medio · o un asterisco * para separar grupos de números romanos (otro problema más con el sistema)
Suponga que la entrada será de coma flotante con una mantisa no mayor que lix · lix · lix · lix · lix . Las fracciones inferiores a n · e · n · n · n · n · i pueden ignorarse. Entonces, siempre que la entrada tenga estas restricciones, como máximo se pueden generar diez grupos de números romanos con una e .
Números menores que i debe tener un líder n · e para asegurar el contexto está claro.
Algunos ejemplos: input
→ salida
0
→ n1
→ i60
→ i · n0.1
→ n · e · vi3600
→ i · n · n10.5
→ x · e · xxx16777215
→ i · xvii · xl · xx · xv3.1415926536
→ iii · e · viii · xxix · xliv · n · xlvii
La salida debe evitar la entrada innecesaria n · en la parte mantisa, e aislada , o n · final en la parte fraccionaria de la salida. Entonces, por ejemplo, n · n · n · n · i , i · e , e i · e · n · n · n · n · n son salidas incorrectas para una entrada de 1
.
Las diferencias de más o menos n · e · n · n · n · n · i en la salida están dentro de las tolerancias y son aceptables.
La entrada es cualquier punto flotante legal en el idioma de su elección, por lo que puede incluir exponentes positivos o negativos siempre que la entrada no quede fuera del rango especificado anteriormente.
¡Y finalmente, se permiten los números romanos incorporados !
Respuestas:
Python 3,
323319320 bytesEsta respuesta implementa los sexagesimales de Fibonacci con el delimitador
*
y sin tener en cuenta la complejidad de Kolmogorov en las listas de números romanos (por ahora, al menos). Se hicieron intentos para unirse al buclewhile
yfor
bajo el cual se generan los números romanos en un bucle, pero esos intentos aún no han tenido éxito. Cualquier sugerencia y sugerencia de golf es bienvenida y apreciada.Editar: corrección de errores y golf.
Editar: Más corrección de errores.
Sin golf:
fuente
C - 584 bytes
No compite (obviamente), pero sirve como inspiración:
Guardar como
fs.c
, construir congcc -o fs fs.c -lm
y ejecutar como./fs <arg>
.Casos de prueba:
Mayor mantisa y fracción:
Lo estoy usando
double
como tipo de trabajo, por lo que la mayor fracción y mantisa combinadas excede la precisión nativa de ese tipo. Si lo usaralong double
, podría manejarlo.fuente
int main
No tiene que volver0
.Haskell (
333322315 bytes)No estoy claro si se supone que el último dígito sexagesimal se redondea cuando lo hago o si se permite el truncamiento; esto se trunca, creo que el Python3 también podría hacerlo.
(-9 bytes, ¡gracias H.PWiz ! -2 bytes eliminando
where
por(\->)$
, -5 más inventando estad
función y jugandoa++"."++x
al golfa++'.':x
).Sin golf:
El método de convertir números enteros a números romanos fue robado descaradamente de Thomas Ahle en StackOverflow y solo jugó un poco.
fuente
["l","xl","x","ix","v","iv","i"]
puede serwords"l xl x ix v iv i"