В этом задании вы будете вычислять числа из любопытной последовательности.
Ваш ввод - одно десятичное неотрицательное целое число. Поменяйте местами биты в этом целом числе, а затем возведите в квадрат число, чтобы получить требуемый результат.
При обращении битов вы не должны использовать начальные нули на входе. Например:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
Первые 25 входов / выходов этой последовательности:
0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9
Ваше решение должно работать для целых чисел произвольного размера. Если ваш язык не имеет удобного встроенного метода их использования, реализуйте свой ответ так, как будто он есть. Вы тогда извиняетесь, если ваш ответ разбивается на большие числа. Однако не используйте хитрости / ограничения, которые работают только для ограниченного домена (например, таблицы поиска).
Ваша оценка - это количество байтов исходного кода.
Бонус -50%, если вы никогда не конвертируете число в двоичный код. Это не ограничивается встроенными функциями. Если вы перебираете число по битам (с помощью сдвига, маскирования или любого другого метода), это также будет учитываться как преобразование. Я не знаю, возможно ли это на самом деле, но это дает стимул для определения паттерна в последовательности.
Наименьший счет выигрывает.
Ответы:
Par , 5 байт
Это чтение-двоичный-обратный-двоичный-квадрат.
источник
Mathematica,
4221 байтСпасибо alephalpha за сокращение в два раза.
Фактическая причина, по которой я сделал это в Mathematica, была в том, что я хотел посмотреть на сюжет ... это выглядит забавно:
источник
Минколанг 0,14 , 43 байта
Спасибо Мего за то, что вдохновили меня.
Протестируйте код здесь и проверьте все тесты здесь .
объяснение
Это использует это отношение повторения:
Если
n
это вход, тоa(n)
результирующее число после того, как его двоичная последовательность была перевернута. 0 и 1 очевидны. Дляa(2n) = a(n)
, рассмотрим, чтоx0
(гдеx
любая последовательность двоичных цифр) перевернуто0x
, что совпадает сx
. Потомуa(2n+1)
что рассуждения немного сложнее.x1
перевернуто есть1x
, что равноx + 2^k
для некоторыхk
. Этоk
еще одно , чем число цифр вx
, который являетсяfloor(log_2(n))+1
. Далее следует полная формула, за исключением того, что она немного изменена. Это то, что я на самом деле код:Как Мего и я работали в чате
floor(n/2) = (n - n%2)/2
. Таким образом,log_2(floor(n/2))+1 = log_2(n - n%2)
. Кроме того, умножение на(n%2)
объединяет нечетные и четные части в одно выражение.Наконец, без лишних слов, вот код, объяснил.
источник
2n
и2n+1
в рекуррентном отношении вы должны немедленно думать об этом как о цикле по битам.Japt ,
2928117 байт(Вы можете сохранить программу в виде 7-байтового файла в формате IEC_8859-1, а затем загрузить его в интерпретатор .)
Japt - это сокращенный JavaScript, созданный ETHproductions .
Попробуйте онлайн!
Объяснение:
¢
это ярлык дляUs2
, который компилируется вU.s(2)
.U
является входным (неявным),.s(2)
вызываемым числом, вызывает.toString(2)
(конвертирует в двоичный файл, анализирует как строку).w
компилируется в.w()
, который переворачивает строку (.split('').reverse().join('')
).n2
работает какparseInt(<number>,2)
, то есть преобразует двоичный код в десятичный.²
вызываетMath.pow(<number>,2)
, то есть возводит в квадрат число.источник
n
, так что вы можете это сделатьUs2 a w a n2 p2
. Хорошая работа, хотя!w
работает со строками так же, как и с массивами, так что вам не нужны двеa
Us2
=¢
, иp2
=²
,¢w n2 ²
Python, 32 байта
Попробуйте онлайн.
Код довольно прост:
bin(6)
например, дает0b110
, двоичное представление 6.[:1:-1]
переворачивает строку и удаляет0b
.int
преобразует строку в двоичное целое число и**2
возводит ее в квадратисточник
Джольф , 7 байт
Просто запустите это. Ввод на странице не работает.
объяснение
Я добавил
Q
команду, которая делает это 6 байтов:QC_Bj2
источник
TeaScript , 9 байт
11TeaScript - это JavaScript для игры в гольф
Будет ли гольф больше, как только я вернусь к своему компьютеру
Попробуйте онлайн!
Проверить все
источник
Серьезно ,
87 байтТакие вызовы идеально подходят для серьезно :)
Попробуйте онлайн
Объяснение:
источник
J
109 байтЭто молчаливый, монадический глагол. Попробуйте онлайн!
Спасибо @randomra за вывод 1 байта!
Как это устроено
источник
CJam, 10 байтов
Попробуйте онлайн
источник
JavaScript,
64635653 байтаЯ понимаю, что я очень долго, но эй, я могу это сделать: P
демонстрация
источник
parseInt(
тебя можно сделать+("0b"+
[...n.toString(2)]
и.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Пока не работает ни в одномPerl 6 , 21 байт
Пример использования:
источник
PHP, 45 байт
источник
Shell, 25
Вход / выход через STDIN / STDOUT:
источник
Pyth - 9 байт
Простые преобразования. Я фактически назначил 2 для вар, что довольно странно.
Тестовый пакет .
источник
Pyth, 9 байт
Это очень простой ответ на основе Pyth, похожий на Python
источник
𝔼𝕊𝕄𝕚𝕟, 12 символов / 21 байт
Try it here (Firefox only).
Неконкурентный ответ, 9 символов / 18 байт
Try it here (Firefox only).
источник
Рубин, 35 байт
источник
TI-Basic (TI-84 Plus CE), 42 байта
источник