Зворотний і квадратний


19

У цьому виклику ви будете обчислювати числа з цікавої послідовності.

Ваш вхід - це одне десяткове невід’ємне ціле число. Зверніть біти в це ціле число, а потім квадратне число, щоб отримати необхідний вихід.

При оберненні бітів ви не повинні використовувати жодні провідні нулі на вході. Наприклад:

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% бонус, якщо ви ніколи не перетворюєте число в / з двійкового. Це не обмежується вбудованими файлами, якщо ви перебираєте число по бітах (шляхом зміщення чи маскування чи будь-яким іншим методом), воно також вважатиметься перетворенням. Я не знаю, чи це насправді можливо, але це стимулює помітити візерунок у послідовності.

Найменший рахунок виграє.



1
Якщо код викликає метод, який призводить до символьної рядки, що представляє біти, чи підходить бонус?
Бред Гілберт b2gills

2
@ BradGilbertb2gills No.
orlp

Я припускаю, що використання математики для вилучення бітів також вважається бінарним перетворенням?
lirtosiast

Відповіді:


5

Пар , 5 байт

✶Σ⌐Σ²

Це читання-бінарний-зворотний-бінарний-квадрат.



@ CᴏɴᴏʀO'Bʀɪᴇɴ Цей лічильник байтів передбачає UTF-8. Я вважаю, що Маріс використовує деяке кодування, яке не є UTF-8, щоб підрахувати його байти, але він не вказав це кодування.
orlp

Пар використовує власне дивне кодування. Його канонічне зображення являє собою певну підмножину <256 символів Unicode. Я не впевнений, чи має це ім’я; Я повинен зачекати, щоб @Ypnypn задзвонив.
Lynn

О Я бачу. @orlp
Conor O'Brien

Можливо, у нього є власний SBCS?
HyperNeutrino

19

Математика, 42 21 байт

Завдяки алефальфі за скорочення вдвічі.

#~IntegerReverse~2^2&

Справжня причина, що я робив це в Mathematica, полягала в тому, що я хотів подивитися сюжет ...

enter image description here


11
Але мені подобається оцінка! XD
Conor O'Brien

1
чому ця відповідь має більше голосів, ніж відповідь з найменшими байтами? o_O
Seadrus

27
@Seadrus Ви знаєте, що вони говорять. Малюнок вартує 7 байт.
Мартін Ендер

5
тому ваш рахунок дорівнює 42 + 7 = 49 байт: P
Seadrus

3
Вибачте, @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Мартін Ендер

8

Мінколанг 0,14 , 43 байти

Дякую Мего, що надихнула цього.

n1{d1`,2$3*&$z2zd2%-2l$Md1%-;z2%*z2:{+}2;N.

Випробуйте код тут і перевірте всі тестові справи тут .

Пояснення

Для цього використовується це відношення:

a(0) = 0
a(1) = 1
a(2n) = a(n)
a(2n+1) = a(n) + 2^(floor(log_2(n))+1)

Якщо 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. Повна формула випливає, за винятком того, що вона трохи модифікована. Це те, що я насправді кодую:

a(0) = 0
a(1) = 1
a(n) = a(n//2) + (n%2) * 2^(floor(log_2(n - n%2)))

Як Mego і я працював в чаті, floor(n/2) = (n - n%2)/2. Таким чином, log_2(floor(n/2))+1 = log_2(n - n%2). Крім того, множення на (n%2)збір і непарних, і парних частин в один вираз.

Нарешті, без зайвих прихисток, ось код, пояснений.

n                                              Take number from input
 1{                                            Start recursion that takes only one element
   d1`,                                        1 if top of stack 0 or 1, 0 otherwise
       2$3*                                    26
           &                                   Jump if top of stack is not zero
            $z                                 Store top of stack in register (z)

               zd2%-                           n - n%2
                    2l$M                       log_2(n - n%2)
                        d1%-                   floor(log_2(n - n%2))
              2             ;                  2^floor(log_2(n - n%2))
                             z2%               n%2
                                *              Multiply
                                 z2:           n//2
                                    {          Recurse
                                     +         Add
                                      }        Return
                                       2;N.    Square it, output as number, and stop.

1
Я думаю, що повторення - це лише переформулювання ітерації над окремими бітами.
Мартін Ендер

3
Я боюся, що це не рахується. Щоразу, коли ви бачите 2nі 2n+1у відношенні рецидиву, вам слід негайно вважати це петлею над бітами.
orlp

1
@orlp: Ну, це облом. Я якось переконаний, що ваш бонус неможливий.
El'endia Starman

@ El'endiaStarman Я майже це отримав, думаю.
Conor O'Brien

8

Japt , 29 28 11 7 байт

(Ви можете зберегти програму як 7-байтний IEC_8859-1-закодований файл, а потім завантажити його в інтерпретатор .)

Japt - це скорочений JavaScript, зроблений ETHproductions .

¢w n2 ²

Спробуйте в Інтернеті!

Пояснення:

  1. ¢це ярлик до Us2, який компілюється в U.s(2). Uє введенням (неявна),.s(2) викликається числом, викликає .toString(2)(перетворюється у двійковий, аналізує як рядок).

  2. wкомпілює в .w(), що обертає рядок (.split('').reverse().join('') ).

  3. n2 працює як parseInt(<number>,2) , тобто перетворює двійкове в десяткове.

  4. ²виклики Math.pow(<number>,2), тобто квадрати числа.


1
Існує функція рядка дляNumber n, щоб ви могли це зробити Us2 a w a n2 p2. Хороша робота, хоча!
ETHproductions

1
Крім того, wпрацює так само, як у рядках, як і в масивах, тому вам не потрібно два as :)
ETHproductions

1
Останнє: Us2 = ¢, і p2= ², знизивши його до 7 байт:¢w n2 ²
ETHproductions

3
Онлайн перекладач тепер приймає IEC_8859-1 закодовані файли. (Хоча я не впевнений, як зробити UTF-8 та UTF-16 також ...)
ETHproductions

2
@ETHproductions - тепер я можу поставити +1 цьому :)
Digital Trauma

5

Пітон, 32 байти

lambda x:int(bin(x)[:1:-1],2)**2

Спробуйте в Інтернеті.

Код досить простий: bin(6)наприклад, дає 0b110, двійкове подання 6. [:1:-1]повертає рядок і видаляє 0b. intперетворює рядок у ціле число з двійкового та **2розміщує його у квадраті.


5

Джольф , 7 байт

Просто запустіть його. Вхід на сторінці не працює.

^C_Bj22

Пояснення

^C_Bj22
    j   numeric input
   B    convert to binary (str)
  _     reverse
 C   2  parse as binary integer to base 10
^     2 square
        implicit output

Я додав Qкоманду, яка робить це 6 байтів:QC_Bj2


4
Закреслена 7 все ще схожа на 7.
спагетто

2
@quartata Не так вже й погано, як перекреслений 4.
orlp

4

TeaScript , 9 байт 11

TeaScript - це JavaScript для гольфу

®x÷v¤)**2

Буде гольф ще раз, коли я повернусь до свого комп’ютера

Спробуйте в Інтернеті!

Перевірте всіх


Чи розуміє перекладач будь-які кодування, крім UTF8? Використовуючи кодування UTF8, я думаю, що ваш запис триває 12 байт .
Цифрова травма

4

Серйозно , 8 7 байт

2;,¡R¿ª

Такі виклики ідеально підходять серйозно :)

Спробуйте в Інтернеті

Пояснення:

2;,¡    get a string representing the (decimal) input in binary, with a 2 on the bottom of the stack
R      reverse the string
¿    convert binary string to decimal int (using that extra 2 from earlier)
ª      square it

Гарна робота, що відповідає Джолфу!
Conor O'Brien

+1 за те, що ваш перекладач приймає кодування CP437 (або принаймні шістнадцяткове його представлення)
Digital Trauma

4

J, 10 9 байт

2^~|.&.#:

Це мовчазне, монадійне дієслово. Спробуйте в Інтернеті!

Дякуємо @randomra за те, що виграли 1 байт!

Як це працює

2^~|.&.#:  Right argument: y

       #:  Convert y to binary.
   |.      Reverse the digits.
     &.    Dual; apply the inverse of #:, i.e., convert back to integer.
 ^~        Apply power (^) with reversed argument order (~)...
2          to 2 and the previous result.

Посилання не працює, на сторінці google з’являється помилка 404, на якій написано "Запрошена URL-адреса /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html не знайдена на цьому сервері. Це все, що ми знаємо."
Bijan


2

JavaScript, 64 63 56 53 байт

n=>parseInt([...n.toString(2)].reverse().join``,2)**2

Я розумію, що я дуже довгий, але ей, я можу це зробити: P

Демо


замість цього parseInt(ви можете зробити+("0b"+
Downgoat

@Downgoat гм, здається, не дає правильних результатів.
nicael

[...n.toString(2)]і.join``
Conor O'Brien

1
Навіть коротше ж / ES7 (49 байт): n=>+("0b"+[...n.toString(2)].reverse().join``)**2. Ще не працює в жодних браузерах
Downgoat

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Дякую, це економить кілька байт.
nicael

2

Perl 6 , 21 байт

{:2(.base(2).flip)²}

Приклад використання:

say {:2(.base(2).flip)²}(26); # 121

say (0..24).map: {:2(.base(2).flip)²};
# (0 1 1 9 1 25 9 49 1 81 25 169 9 121 49 225 1 289 81 625 25 441 169 841 9)

my &code = {:2(.base(2).flip)²};
say code 3; # 9

say chars code 10¹⁰⁰; # 140




1

Pyth, 9 байт

^i_.BQ2 2

Це дуже проста відповідь, заснована на піті, схожа на відповідь Python


1

𝔼𝕊𝕄𝕚𝕟, 12 символів / 21 байт

⦅`ᶀ`+ᴙ(ïß2)²

Try it here (Firefox only).

Неконкурентна відповідь, 9 знаків / 18 байт

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).


1
Через цей лічильник байтів дає 15 байт (використовує інше кодування).
nicael

Я оцінюю за допомогою UTF-8 (до тих пір, поки не зможу кодування Mines працювати).
Mama Fun Roll

... назва мови ... - це поля?
corsiKa

Це ESMin у doublestruck. Характеристики Unicode не підтримуються повністю.
Mama Fun Roll


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.