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.