Леонардо да Пизано, он же Фибоначчи, сыграл важную роль в распространении индуистско-арабской системы счисления в Европе. До этого там математики работали в базе шестидесяти с римскими цифрами.
Например, квадратный корень из двух может быть аппроксимирован как: одна и двадцать четыре части по шестьдесят и пятьдесят одна часть по три тысячи шестьсот и записан как: i xxiv li , с масштабированием, определяемым контекстом. В то время «ничто» было известно ( то есть ноль), но не имело стандартного представления в этой системе счисления.
Если бы Фибоначчи проигнорировал эти новомодные десятичные цифры, с которыми он столкнулся во время своих путешествий, он, несомненно, исправил бы недостатки существующей системы. Эту улучшенную систему мы назовем шестигранными числами Фибоначчи .
Ваша задача - написать программу, функцию или фрагмент кода, который принимает число с плавающей запятой в ASCII или двоичном формате и выводит его из шестидесяти римских цифр. Входными данными может быть файл, консоль, командная строка или аргумент функции, а выходные данные могут быть файловыми или консольными, в зависимости от того, что проще всего.
Выходные данные могут быть в верхнем или нижнем регистре и должны включать следующие улучшения:
- использовать п или N , чтобы указать нуль означает место , не имеет значения, то есть «ноль» (проблема с системой)
- используйте e или E для обозначения et, соответствующего сексуальной точке (другая проблема с системой)
- используйте среднюю точку · или звездочку * для разделения групп римских цифр (еще одна проблема с системой)
Предположим, что ввод будет с плавающей точкой с мантиссой не больше, чем lix · lix · lix · lix · lix . Фракции, меньшие чем n · e · n · n · n · n · i, можно игнорировать. Таким образом, при условии, что ввод имеет эти ограничения, можно вывести не более десяти групп римских цифр с одним знаком e .
Числа, меньшие, чем я, должны иметь начальное n, чтобы гарантировать ясность контекста.
Некоторые примеры: input
→ вывод
0
→ п1
→ я60
→ я · н0.1
→ n · e · vi3600
→ i · n · n10.5
→ x · e · xxx16777215
→ я · xvii · xl · xx · xv3.1415926536
→ iii · e · viii · xxix · xliv · n · xlvii
Выходные данные должны избегать ненужного начального n · в части мантиссы, изолированной e или конечного · n в дробной части выхода. Так, например, n · n · n · n · i , i · e и i · e · n · n · n · n · n являются неправильными выходами для входа 1
.
Различия плюс или минус n · e · n · n · n · n · i в выходных данных находятся в пределах допуска и допустимы.
Входными данными являются любые допустимые значения с плавающей запятой на выбранном вами языке, поэтому они могут включать положительные или отрицательные показатели, если входные данные не выходят за пределы указанного выше диапазона.
И , наконец, римская цифра Модульное будут разрешены!
Ответы:
Python 3,
323319320 байтЭтот ответ реализует шестнадцатеричные числа Фибоначчи с разделителем
*
и без учета сложности Колмогорова в списках римских цифр (на данный момент, по крайней мере). Были сделаны попытки присоединитьсяwhile
иfor
цикл , при котором римские цифры генерируются под одной петле, но эти попытки пока не увенчались успехом. Любые советы и предложения по гольфу приветствуются и приветствуются.Редактировать: Исправление ошибок и гольф.
Редактировать: Больше исправления ошибок.
Ungolfed:
источник
C - 584 байта
Не конкурирует (очевидно), но служит источником вдохновения:
Сохранить как
fs.c
, построить сgcc -o fs fs.c -lm
и запустить как./fs <arg>
.Тестовые случаи:
Самая большая мантисса и фракция:
Я использую
double
в качестве рабочего типа, так что наибольшая мантисса и фракция в совокупности превышают естественную точность этого типа. Если бы я использовалlong double
вместо этого, он мог бы справиться с этим.источник
int main
не должен возвращаться0
.Haskell (
333322315 байт)Мне неясно, должна ли округляться последняя шестнадцатеричная цифра, когда я делаю, или разрешено усечение; это усекает, я думаю, что Python3 тоже может?
(-9 байтов, спасибо H.PWiz ! -2 байта, исключив
where
для(\->)$
, -5 больше, изобретая этуd
функцию и играяa++"."++x
в гольфa++'.':x
.)Ungolfed:
Метод преобразования целых чисел в римские цифры был бесстыдно украден у Томаса Але на StackOverflow и немного поиграл в гольф.
источник
["l","xl","x","ix","v","iv","i"]
может бытьwords"l xl x ix v iv i"