Leonardo da Pisano alias Fibonacci war maßgeblich an der Einführung des hindu-arabischen Zahlensystems in Europa beteiligt. Davor arbeiteten dort Mathematiker in der Basis 60 mit römischen Ziffern.
Zum Beispiel könnte die Quadratwurzel von zwei wie folgt approximiert werden: ein und vierundzwanzig Teile von sechzig und einundfünfzig Teile von dreitausendsechshundert , und wie folgt geschrieben werden: i xxiv li , wobei die Skalierung durch den Kontext bestimmt wird. Zu dieser Zeit war „Nichts“ bekannt ( dh Null), hatte aber keine Standarddarstellung in diesem Zahlensystem.
Hätte Fibonacci diese neuen Nachkommastellen ignoriert, die er auf seinen Reisen angetroffen hatte, hätte er mit Sicherheit die Mängel des derzeitigen Systems behoben. Dieses verbesserte System nennen wir Fibonacci Sexagesimals .
Ihre Aufgabe ist es, ein Programm-, Funktions- oder Code-Snippet zu schreiben, das eine Gleitkommazahl im ASCII- oder Binärformat annimmt und in römischen Zahlen zur Basis 60 ausgibt. Die Eingabe kann eine Datei, eine Konsole, eine Befehlszeile oder ein Funktionsargument sein, und die Ausgabe kann eine Datei oder eine Konsole sein, je nachdem, was am einfachsten ist.
Die Ausgabe kann in Groß- oder Kleinschreibung erfolgen und muss die folgenden Verbesserungen enthalten:
- Verwenden Sie n oder N , um null anzugeben. Dies bedeutet, dass ein Ort keinen Wert hat, dh „null“ (ein Problem mit dem System).
- Verwenden Sie e oder E , um et anzugeben , das dem Sexagesimalpunkt entspricht (ein weiteres Problem mit dem System).
- Verwenden Sie einen mittleren Punkt · oder ein Sternchen *, um Gruppen von römischen Ziffern zu trennen (ein weiteres Problem mit dem System)
Angenommen, die Eingabe ist ein Gleitkommawert mit einer Mantisse, die nicht größer als lix · lix · lix · lix · lix ist . Brüche kleiner als n · e · n · n · n · n · i können ignoriert werden. Unter der Voraussetzung, dass die Eingabe diese Einschränkungen aufweist, können maximal zehn Gruppen von römischen Ziffern mit einem e ausgegeben werden.
Zahlen, die kleiner sind als ich, müssen ein führendes n · e haben, um sicherzustellen, dass der Kontext klar ist.
Einige Beispiele: input
→ Ausgabe
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
Der Ausgang muss unnötige führende n · im Mantissenteil, isolierte e oder nachfolgende · n im Bruchteil des Ausgangs vermeiden . So sind beispielsweise n · n · n · n · i , i · e und i · e · n · n · n · n · n falsche Ausgaben für eine Eingabe von 1
.
Unterschiede von plus oder minus n · e · n · n · n · n · i in der Ausgabe liegen innerhalb der Toleranzen und sind akzeptabel.
Die Eingabe ist ein zulässiger Gleitkommawert in der Sprache Ihrer Wahl. Sie kann also positive oder negative Exponenten enthalten, sofern die Eingabe nicht außerhalb des oben angegebenen Bereichs liegt.
Und schließlich römische Ziffer Einbauten sind erlaubt!
Antworten:
Python 3,
323319320 BytesDiese Antwort implementiert Fibonaccis Sexagesimale mit dem Begrenzer
*
und ohne Rücksicht auf Kolmogorovs Komplexität in den Listen der römischen Ziffern (zumindest für den Moment). Es wurde versucht, die Schleifewhile
und zu verbindenfor
, unter der die römischen Ziffern unter einer Schleife erzeugt werden. Diese Versuche waren jedoch noch nicht erfolgreich. Alle Golftipps und Vorschläge sind willkommen und geschätzt.Edit: Bugfixing und Golfen.
Edit: Mehr Fehlerbehebung.
Ungolfed:
quelle
C - 584 Bytes
Nicht konkurrierend (offensichtlich), sondern als Inspiration:
Speichern unter
fs.c
, Erstellen mitgcc -o fs fs.c -lm
und Ausführen als./fs <arg>
.Testfälle:
Größte Mantisse und Fraktion:
Ich verwende
double
als Arbeitstyp, daher übersteigt die größte kombinierte Mantisse und Fraktion die native Genauigkeit dieses Typs. Wenn ich eslong double
stattdessen verwenden würde, könnte es damit umgehen.quelle
int main
muss nicht zurückkehren0
.Haskell (
333322315 Byte)Mir ist nicht klar, ob die letzte Sexagesimalziffer bei mir gerundet werden soll oder ob das Abschneiden erlaubt ist. das schneidet ab, ich denke das könnte man bei python3 auch?
(-9 Bytes, dank H.PWiz ! -2 Bytes durch den Wegfall
where
für(\->)$
, -5 mehr durch diese erfindend
Funktion und Golfa++"."++x
zua++'.':x
.)Ungolfed:
Die Methode, ganze Zahlen in römische Zahlen umzuwandeln, wurde Thomas Ahle auf StackOverflow schamlos gestohlen und nur ein wenig golfen.
quelle
["l","xl","x","ix","v","iv","i"]
kann seinwords"l xl x ix v iv i"