Опис виклику
У нас було декілька проблем, пов’язаних із послідовністю "Подивись і скажи" . Швидке нагадування:
- Послідовність починається з
1
, - Подальші терміни цієї послідовності формуються шляхом перерахування кожної групи повторюваних цифр у попередньому терміні,
Отже, перші кілька термінів:
1 "one"
11 "one one" (we look at the previous term)
21 "two ones"
1211 "one two, one one"
111221 "one one, one two, two ones"
312211 "three ones, two twos, one one"
Тепер давайте зробимо те саме, але замість цього використовуйте римські цифри . Ми починаємо з I
та дотримуємось тих самих правил (замість них застосовуємо правило підрахунку цифр до знаків, тому читаємо IVX
як one one, one five, one ten
замість того one four, one ten
чи іншого способу):
I "one"
II "one one"
III "two ones" = "II" + "I"
IIII "three ones" = "III" + "I"
IVI "four ones" = "IV" + "I"
IIIVII "one one, one five, one one"
IIIIIVIII "three ones, one five, two ones" = ("III" + "I") + ("I" + "V") + ("II" + "I")
Дано додатне ціле число N
:
- Виведіть перші
N
цифри цієї послідовності (будь-який розумний роздільник також добре, як і["I", "II", "III", ...]
- Виведіть
N
цей термін цієї послідовності (він може бути індексований 0).
Не забудьте зробити свій код якомога коротшим, адже це завдання з гольфу з кодом !
EDIT: Я вважаю, що завжди існує один стандартний / бажаний спосіб вираження цілих чисел як римських цифр, (наприклад 95
-> XCV
замість VC
). Кілька перетворювачів римських цифр, які я знайшов в Інтернеті, підтверджують свою думку. Якщо ви сумніваєтеся, використовуйте Інтернет-конвертер , оскільки перелік усіх можливих кращих справ та конкретних правил написання римських цифр не є суть цього завдання.
EDIT2: @PeterTaylor і @GregMartin відзначили, що тільки цифри менше або дорівнює 5
в послідовності, так що вам не доведеться турбуватися про неоднозначність римських цифр (номер 1
- 8
це I
, II
, III
, IV
, V
, VI
, VII
, і VIII
)
4
/ IV
/ IIII
? Або 95
/ XCV
/ VC
? Можливо, не завжди існує унікальний спосіб виразити ціле число, але я впевнений, що завжди є кращий (стандартний) - виправте мене, якщо я помиляюся.