Последовательность кривой дракона (или обычная последовательность складывания бумаги) является двоичной последовательностью. a(n)
задается отрицанием бита слева от младшего значащего 1 из n
. Например, для вычисления a(2136)
мы сначала преобразуем в двоичный файл:
100001011000
Мы находим наш наименее значимый бит
100001011000
^
Возьмите немного налево
100001011000
^
И вернуть свое отрицание
0
задача
Учитывая положительное целое число в качестве ввода, вывода a(n)
. (Вы можете вывести целочисленный или логический). Вы должны стремиться к тому, чтобы ваш код был как можно меньше, измеряемым байтами.
Тестовые случаи
Вот первые 100 записей в порядке
1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1
100001011000
является0
. Вы имеете в виду наименее значимый1
?Ответы:
Mathematica 25 байт
Другие способы сделать это:
56 байт
58 байт
источник
Python 3 ,
2221 байт1 байт благодаря ETHproductions.
Попробуйте онлайн!
Побитовая арифметика
источник
0+(...)
?n&1
быть в скобках? Или1+(n^~-n)<1
это можно заключить в скобки? Или это1+(n^~-n)
...&
имеет самый низкий приоритет, так что это1+(n^~-n)
Сетчатка ,
383429 байтПопробуйте онлайн!
Мартин и Лики, по сути, выдвинули эту идею еще на 5 байтов!
Преобразует входной сигнал в унарный, а затем постепенно делит число на 2. Как только он больше не может делать это равномерно (т. Е. Число нечетное), он затем удаляет патчи 4 из входа, вычисляя результат последней операции mod 4 Наконец, это проверяет, был ли результат равен 1, что означает, что цифра слева от младшего значащего 1 бита была равна нулю. Если это правда, конечный результат равен 1, в противном случае он равен нулю.
источник
Желе , 5 байт
Попробуйте онлайн!
Как это работает
источник
Алиса , 8 байт
Попробуйте онлайн!
Принимает ввод как кодовую точку символа Юникод и выводит результат в виде байта 0x00 или 0x01 соответственно.
Для тестируемости вот десятичная версия ввода / вывода с 12 байтами, которая использует точно такой же алгоритм (отличается только ввод / вывод):
Попробуйте онлайн!
Если бы Алиса была языком игры в гольф и не требовала явного ввода-вывода и завершения программы, это заняло бы всего 5 байтов (
2z1xn
), превосходя и 05AB1E, и Jelly.объяснение
источник
05AB1E , 6 байтов
Попробуйте онлайн!
источник
Мудрый ,
282016 байтПопробуйте онлайн!
объяснение
Это порт ответа Python про Лаки Нун. К сожалению, он не работает на TIO, потому что версия интерпретатора TIO немного устарела.
Мы начинаем с того, что делаем 3 копии нашего ввода
::
, затем уменьшаем верхнюю копию на 1. Это перевернет все биты до первого 1. Затем мы зафиксируем это с другой копией нашего ввода. Поскольку все биты вплоть до первой 1 на нашем входе были перевернуты, это приведет к тому, что все эти биты будут равны 1 в результате. Если мы затем добавим единицу~-
к результату, мы получим единицу 1 в месте слева от нашего наименее значимого 1. Мы И это с помощью ввода, чтобы получить этот бит из ввода. Теперь у нас будет,0
если этот бит был выключен, и степень 2, если этот бит был включен, мы можем изменить это на сингл1
или0
с:[?>]
. Как только это будет сделано, нам нужно только отменить бит,~-^
и все готово.источник
Python 2 , 19 байт
Попробуйте онлайн!
источник
Haskell ,
454339 байт6 байтов сохранено благодаря nimi
Попробуйте онлайн!
источник
div
вместоquot
.divMod
:f x|(d,m)<-divMod x 2=[mod(1+d)2,f d]!!m
|(d,m)<-divMod x 2
Это шаблон охранник для привязкиd
кdiv x 2
иm
кmod x 2
. Мы используемm
для индексации двухэлементный список[...,...]!!m
. В случаеm==0
возвращенияmod(1+d)2
и в случаеm==1
f d
.[f d,mod(1+d)2]
. Попробуйте онлайн! ,Машинный код x86,
171615 байт:Предполагается ABI, где параметры помещаются в стек, а возвращаемое значение находится в
AL
регистре.Это разбирается следующим образом:
источник
JavaScript (ES6),
1714 байтИзменить: Сохранение 3 байтов путем переноса ответа @ Деннис, как только я заметил, что логический вывод был приемлемым.
источник
C (gcc) , 20 байтов
Попробуйте онлайн!
источник
INTERCAL , 50 байтов
Унарные операторы INTERCAL вполне подходят для этого, поэтому я решил написать свой первый пост.
источник
Haskell , 33 байта
Попробуйте онлайн!
Использует 0-индексацию.
источник
~
в этом контексте? Я понимаю, что это ленивый матч, но зачем тебе ленивый матч?Желе ,
76 байт1 байт благодаря Эрику Аутгольферу.
Попробуйте онлайн!
Более длинные программы
Họ¡2&2Ị
Bt0ṫ-ḄỊ
источник
ṖṪṆ
(как мой удаленный ответ) вместоṫ-ḄỊ
.BUḌDḊḢ¬
,,, ,
109 байтобъяснение
Возьмите вход как 3 например.
источник
Haskell , 26 байтов
Попробуйте онлайн!
Логический выход.
источник
Октава , 34 байта
Попробуйте онлайн!
Объяснение:
источник
Подача конкурсных предложений:
Python 2 ,
4139 байтПопробуйте онлайн!
-2 байта благодаря FryAmTheEggman
Начальное решение:
Python 2 , 43 байта
Попробуйте онлайн!
источник
~-x&1
Я думаю, что вместо этого работает в то время как условия.MATL ,
1110 байтПопробуйте онлайн! Или посмотрите первые 100 выходов .
объяснение
источник
Пари / ГП , 20 байт
Используя символ Кронекера .
Попробуйте онлайн!
источник
Befunge-98 , 19 байт
Попробуйте онлайн!
источник
SCALA, 99 (78?) Символов, 99 (78?) Байтов
где
i
вход.Как видите, я сохраняю 21 байт, если не позабочусь о нуле (как это сделал автор в своем тестовом примере):
Это мой первый Codegolf, поэтому я надеюсь, что у меня все получилось :)
Попробуйте онлайн! Хотя довольно долго вычислять лол.
источник
C (gcc) ,
3531 байтПерешел на рекурсивную реализацию. Попробуйте онлайн!
источник
Java 8, 17 байт
Прямой порт ответа LeakyNun's Python 3 . Я недостаточно знаком с побитовыми операциями и приоритетами операторов, чтобы увидеть более короткое решение; может быть, есть способ избежать лишних парентезов?
источник
Japt ,
10 89 байтПопробуйте онлайн!
объяснение
источник
false
для всего, потому что символ (0 или 1) всегда является строкой.1
.JavaScript (ES6),
5334 байтаисточник
a=>!+(a=a.toString(2))[a.lastIndexOf(1)-1]
PHP> = 7.1, 32 байта
PHP Sandbox Online
PHP , 40 байт
Попробуйте онлайн!
PHP , 41 байт
Попробуйте онлайн!
источник
Common Lisp, 56 байт
Попробуйте онлайн!
источник
Чип , 93 байта
Принимает входные данные как байты с прямым порядком байтов. (TIO имеет немного Python, который делает это для вас). Дает выход либо как
0x0
или0x1
. (TIO использует xxd для проверки значения).Попробуйте онлайн!
Как это сделать?
Чип просматривает ввод по одному байту за раз, поэтому обработка многобайтового ввода добавляет объем, но не так сильно, как я опасался.
Давайте углубимся в это:
Это
HZ
старший бит предыдущего байта (если он был) иA
-G
семь младших бит текущего байта. Они используются для определения младшего установленного бита числа.Когда найден младший установленный бит, у нас есть несколько дел. Этот первый фрагмент говорит: «если у нас есть установленный бит (
)
s), то прекратитеS
подавлять вывод иt
завершите работу после того, как мы напечатаем ответ.Какой бы бит текущего байта (
A
-H
) предшествовал только группе нулей, затем единица (\
и/
: они смотрят на биты непосредственно к северу от них; мы можем верить, что все предыдущие биты были нулевыми) передаются на провода на право (v
,'
, ...), то в зависимости от того значения она переворачивается и дается как младший бит выхода (~a
).источник