FizzBuzz настільки простий, ставка, що ви можете це зробити назад. У цьому виклику вам буде задана довжина рядка FizzBuzz і ви повинні дати додатне ціле число, яке створило цей рядок.
Опис
Щоб розбити це, рядок FizzBuzz для nгенерується за допомогою наступного алгоритму.
Почніть з порожнього рядка і для кожного i=1..n(включно):
- Якщо
iділиться на3і на5, додайтеFizzBuzzдо рядка. - Якщо
iпросто ділиться3додаваннямFizz. - Якщо
iпросто ділиться5додаваннямBuzz. - Якщо
iне ділиться на жодне, додайте десяткове представленняi.
Так, наприклад FizzBuzz(15), наступне:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz
Вам дадуть Length(FizzBuzz(n))і повинні визначитись n. Ви можете припустити, що введення є позитивним і завжди буде довжиною деякої строки FizzBuzz.
Правила
Ваше рішення може мати повну програму чи визначення функції будь-якою стандартно прийнятною мовою. Ваша програма / функція може приймати аргументи і повертати відповіді будь-яким стандартно прийнятим способом . Стандартні лазівки заборонені.
Ви можете припустити, що введення є позитивним та дійсним (описує довжину деякого рядка FizzBuzz) і менше, ніж найбільше ціле число, яке може бути представлене на вашій мові.
Це кодовий гольф, тому найкоротші виграші в байті.
Приклади
Ось кілька прикладів випадків
Length(FizzBuzz(n)) -> n
1 -> 1
6 -> 3
15 -> 6
313 -> 100
3677 -> 1001
Редагувати
Виправлений останній тестовий випадок. Дякуємо @SteadyBox.