Опис виклику
У нас було декілька проблем, пов’язаних із послідовністю "Подивись і скажи" . Швидке нагадування:
- Послідовність починається з
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? Можливо, не завжди існує унікальний спосіб виразити ціле число, але я впевнений, що завжди є кращий (стандартний) - виправте мене, якщо я помиляюся.