Сначала поговорим о последовательностях Битти . Учитывая положительное иррациональное число r , мы можем построить бесконечную последовательность, умножив положительные целые числа на r по порядку и взяв слово для каждого полученного вычисления. Например,
Если r > 1, мы имеем специальное условие. Мы можем сформировать другое иррациональное число s как s = r / ( r - 1). Затем он может генерировать свою собственную последовательность Битти, B s . Аккуратно фокус в том , что Б г и Б ы являются взаимодополняющими , а это означает , что каждое положительное целое число в точности одну из двух последовательностей.
Если мы установим r = ϕ, золотое сечение, то получим s = r + 1 и две специальные последовательности. Ниже последовательность Wythoff для г :
1, 3, 4, 6, 8, 9, 11, 12, 14, 16, 17, 19, 21, 22, 24, 25, 27, 29, ...
и верхняя последовательность Витоффа для s :
2, 5, 7, 10, 13, 15, 18, 20, 23, 26, 28, 31, 34, 36, 39, 41, 44, 47, ...
Это последовательности A000201 и A001950 в OEIS, соответственно.
Соревнование
Учитывая положительное входное целое число 1 <= n <= 1000
, выведите одно из двух различных значений, указывающих, находится ли вход в нижней последовательности Wythoff или в верхней последовательности. Выходными значениями могут быть -1
и 1
, true
и false
, upper
и lower
, и т. Д.
Хотя представленный алгоритм теоретически должен работать для всех входных данных, на практике он должен работать только с первыми 1000 входными числами.
I / O и правила
- Вход и выход могут быть заданы любым удобным способом .
- Можно предположить, что ввод и вывод соответствуют типу номера вашего языка.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
источник
Ответы:
JavaScript (ES6),
5035 байтВыходы
1
для нижнего и0
верхнего. Объяснение: Частичные списки логических значений могут быть построены с использованием тождества, подобного Фибоначчи: с учетом двух списков, начиная с1
и10
, каждый последующий список является объединением двух предыдущих, приводя к101
,10110
и10110101
т. Д. В этом случае немного сложнее иметь фальшивая 0-я запись0
и использовать ее для создания второго элемента списка.источник
Haskell , 26 байтов
Попробуйте онлайн!
Нет поплавков, неограниченная точность. Спасибо за H.PWiz за два байта.
источник
~(x:t)
. Спасибоundefined
. Тот факт, что есть два разных определенных, просто случайно.Python , 25 байт
Попробуйте онлайн!
Использует очень простое условие:
Обратите внимание, что результат по модулю положительный, хотя
-n
и отрицательный, что соответствует Python по модулю.Это соответствует этому коду:
Попробуйте онлайн!
Мы экономим байт, удваивая до
-(n*2)%(phi*2)<2
.источник
05AB1E , 9 байтов
Попробуйте онлайн!
0 означает верхний, 1 означает нижний. Попробуйте первые 100: попробуйте онлайн!
Необработанный командный дамп:
источник
ï
:)5t>;
2 байта, возможно, не стоит того ...ï
и¢
LOL :) Все наши решения так тесно связаныЖеле , 5 байт
Попробуйте онлайн!
Сохранено 1 байт благодаря гольфу xnor's Python .
Желе , 6 байт
Попробуйте онлайн!
Возвращает 1 для нижнего и 0 для верхнего.
источник
Øp
5t>;
Brain-Flak , 78 байт
Попробуйте онлайн!
Ничего не выводит для нижнего и
0
верхнего. Переход на более разумную схему вывода будет стоить 6 байт.источник
Python 2 ,
393332 байта-6 байт благодаря г-ну Xcoder
-1 байт благодаря Захари
Попробуйте онлайн!
Возвращает
False
для нижнего иTrue
верхнегоисточник
lambda n,r=(1+5**.5)/2:-~n//r<n/r
экономит 6 байт.lambda n,r=.5+5**.5/2:-~n//r<n/r
должно работать так же, чтобы побрить один байтЮлия 0,6 , 16 байт
Попробуйте онлайн!
Играя с числами, я наткнулся на это свойство: floor (n / φ) == floor ((n + 1) / φ), если n находится в верхней последовательности Wythoff, и floor (n / φ) <floor ( (n + 1) / φ), если n находится в нижней последовательности Витоффа. Я не выяснил, как возникает это свойство, но оно дает правильные результаты, по крайней мере, до n = 100000 (и, вероятно, за его пределами).
Старый ответ:
Юлия 0,6 , 31 байт
Попробуйте онлайн!
Возвращает
true
для нижней иfalse
верхней последовательности Wythoff.источник
Pyth , 8 байт
Попробуй это здесь!
Возвращает 1 для нижнего и 0 для верхнего.
источник
Wolfram Language (Mathematica) , 26 байтов
Попробуйте онлайн!
Целое число
n
находится в нижней последовательности Wythoff iffceil(n/phi) - 1/phi < n/phi
.Доказательство того, что
ceil(n/phi) - 1/phi < n/phi
...Достаточная:
Пусть
ceil(n/phi) - 1/phi < n/phi
.Тогда
ceil(n/phi) * phi < n + 1
.Примечание
n == n/phi * phi <= ceil(n/phi) * phi
.Следовательно,
n <= ceil(n/phi) * phi < n + 1
.Так как
n
иceil(n/phi)
являются целыми числами, мы вызываем определение floor и statefloor(ceil(n/phi) * phi) == n
иn
находятся в нижней последовательности Wythoff.Необходимо; доказательство контрацептивом:
Пусть
ceil(n/phi) - 1/phi >= n/phi
.Тогда
ceil(n/phi) * phi >= n + 1
.Заметка
n + phi > (n/phi + 1) * phi > ceil(n/phi) * phi
Отсюда
n > (ceil(n/phi) - 1) * phi
.Так как
(ceil(n/phi) - 1) * phi < n < n + 1 <= ceil(n/phi) * phi
,n
не в нижней последовательности Wythoff.источник
Japt , 10 байт
Возвращает true для нижнего и false для верхнего.
Попробуйте онлайн!
Объяснение:
источник
Java 10,
775352 байтаПорт @ Род Пита 2 ответ .
-1 байт благодаря @ Zacharý .
Попробуйте онлайн.
Старый
7776 байт ответ:-1 байт, спасибо @ovs 'за то, что я рекомендовал себе на прошлой неделе .. xD
Возврат
1
за понижение;0
для верхнего.Попробуйте онлайн.
Объяснение:
i*Phi
вычисляется путем взятия(sqrt(5)+1)/2 * i
, а затем мы помещаем его в пол, приводя его к целому числу, чтобы усечь десятичное число.источник
++i<=n
на ваш старый ответ можноi++<n
.n->{var r=Math.sqrt(5)/2+.5;return(int)(-~n/r)<n/r;}
Хаскелл ,
15313912679 байтовНеограниченная точность!
Попробуйте онлайн!
объяснение
Вместо того, чтобы использовать приближение золотого сечения для вычисления результата, это означает, что они подвержены ошибкам при увеличении размера входных данных. Этот ответ не дает. Вместо этого он использует формулу, представленную в OEIS, которая
a
является уникальной последовательностью, такой, чтогде
b
заказанный комплимент.источник
Брахилог , 8 байт
Попробуйте онлайн!
Предикат успешно выполняется, если вход находится в нижней последовательности Wythoff, и не работает, если он находится в верхней последовательности Wythoff.
Если сбой завершения является допустимым методом вывода, первый байт может быть опущен.
источник
φ
используется в программе Brachylog. В конце концов!MATL , 8 байт
Попробуйте онлайн!
объяснение
источник
К (ок) , 20 байтов
Решение:
Попробуйте онлайн!
Объяснение:
источник
TI-BASIC (TI-84), 18 байтов
Вход находится в
Ans
.Выход находится
Ans
и автоматически распечатывается.Печать
1
если вход находится в нижней последовательности или0
если в верхней последовательности.Пример:
Объяснение:
Примечание: TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
источник
cQuents , 5 байтов
Попробуйте онлайн!
объяснение
источник