Випишіть послідовність Чей-Морса


22

На цьому сайті є досить багато проблем, які просять роздрукувати послідовність, і це не виняток.

(Наступне пояснення послідовності цього виклику передбачає, що символи в послідовності є 0і1 .)

Рекурсивне визначення послідовності Тю-Морза таке

T_0 = 0
T_2n = T_n
T_2n+1 = 1 - T_n

Більш пряме визначення полягає в тому, що послідовність від 0до 2**m-1і 2**m to 2**(m+1)-1є бінарними доповненнями. Отож 0слідує 1, 01слідує 10, 0110слідує 1001, і, трохи пропустившись, 0110100110010110слідує 1001011001101001.

Завдання полягає в тому, щоб написати програму або функцію, яка виводить послідовність Thue-Morse для перших nелементів, де nє будь-яке невід'ємне ціле число. Для виводу можна використовувати будь-які два символи, як показано в прикладах нижче.

Приклади

>>> tm_01(20)
01101001100101101001
>>> tm_ab(42)
abbabaabbaababbabaababbaabbabaabbaababbaab
>>> tm_paren(37)
())()(())(()())()(()())(())()(())(()(
>>> tm_space_star(12)
 ** *  **  *
>>> tm_01(0)
                # to show that this is a valid input

Правила

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

  • Вихід повинен бути першими nелементами послідовності Thue-Morse, використовуючи будь-які зручні символи. Якщо вам подобається, ви також можете додати роздільник. У своїх прикладах я цього не маю. Примітка: Це правило дозволяє перелічити списки (як і Python), оскільки ,це дійсний роздільник, і я не заперечую за тим, щоб провідні чи кінцеві символи, такі як [і ]у висновку.

  • Це кодовий гольф, тому виграє найменша кількість байтів.

Як завжди, якщо проблема неясна, будь ласка, повідомте мене про це. Успіхів і хорошого гольфу!

Каталог

var QUESTION_ID=65549;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=47581;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"http://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>



1
простішими словами ви могли сказати: функція рекурсивна, заперечуйте введення та додайте його.
Евмель


2
@PeterTaylor Яким способом? Один з можливих відповідей на пов'язане питання - це послідовність Чт-Морса, але це питання полягає в генерації Чт-Морса і нічого іншого.
Шерлок9

1
Оскільки деякі відповіді на попереднє запитання можуть бути використані для відповіді на це запитання з тривіальними змінами, і всі відповіді на це питання можна використовувати для відповіді на попереднє запитання з тривіальними змінами.
Пітер Тейлор

Відповіді:


14

Pyth, 6 байт

xMjR2Q

Спробуйте в Інтернеті: Демонстрація

На основі рішення від @ThomasKwa та варіації @FryAmTheEggman.

Він використовує таку формулу: i-та цифра в послідовності Тю-Морзе:xor(digits of i in base 2) .

Пояснення:

xMjR2Q   implicit: Q = input number
  jR2Q   convert each number in [0, 1, ..., Q-1] to its binary digits
xM       xor each binary list

9

CJam, 17 9 байт

ri{2b:^}/

або

ri,2fb::^

Перевірте це тут.

Пояснення

При цьому використовується альтернативне визначення, подане у Вікіпедії, засноване на парності числа 1s у двійковому поданні n.

ri   e# Read input and convert to integer n.
{    e# For each i from 0 to n-1...
  2b e#   Convert i to base 2.
  :^ e#   Fold XOR over the bits to compute the parity of the number of 1s.
}/

Альтернативне рішення використовує ,для nявного перетворення в діапазон[0 ... n-1] перед використанням операторів infix для обчислення бінарних представлень та XOR, не потребуючи блоку.

Бонусні рішення

Ось деякі рішення, засновані на інших визначеннях. Якщо є два рішення, більш короткий пам'ять дуже швидко вибухне пам'ять (оскільки попередня обчислення генерує 2^nбіти, перш ніж обрізатиn ).

Як L-система з 0 --> 01та 1 --> 10:

ri_2mL2,\{2,aA+f=s:~}*<
ri_2,\{2,aA+f=s:~}*<

Заперечуючи та додаючи попередню частину:

ri_2mL2,\{_:!+}*<
ri_2,\{_:!+}*<

Використовуючи відношення рецидиву, подане у виклику, використовуючи divmodта XOR, щоб розрізняти два рекурсивні визначення:

ri{Ta{2md\j^}j}/

(Хоча, звичайно, це відношення повторення - це просто інший спосіб виразити послідовність Чей-Морза як парність 1-бітів у бінарному поданні n.)


Моє перше 42задумлення було також марнотратне на пам'ять рішення, але я вважав, що використання більш ніж половини терабайт пам'яті для обчислення виходу для (якщо передбачається біт) було б досить необґрунтованим.
JohnE

@JohnE Проблема вирішена. ;)
Мартін Ендер

:^робить мене щасливим. З іншого приводу, святе лайно, це класний алгоритм.
Позов про Моніку

@QPaysTaxes ні :^}?
TheLethalCoder

1
@TheLethalCoder Це мене теж радує
Позов

8

Діалог APL, 8 7 байт

≠⌿⍴∘2⊤⍳

Це монастирський потяг, який очікує початку індексу 0 ( ⎕IO←0). Еквівалентна функція не поїзда є{≠⌿(⍵⍴2)⊤⍳⍵} .

Пояснення:

      ⍳      List of numbers from 0 to (input-1)
  ⍴∘2        (input) copies of 2
     ⊤       Convert all the elements in ⍳ to base 2 to (input) digits
≠⌿           Reduce over the first axis by not-equal

Вихід - це розділений пробілом список 0і 1. Спробуйте тут .


8

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

Mathematica має вбудовану послідовність Чт-Морзе!

Array[ThueMorse,#,0]&

Оригінальна відповідь:

#&@@@DigitCount[Range@#-1,2]~Mod~2&

7

LabVIEW, 15 приміток LabVIEW

тепер як супер фантазійний gif з датчиком

enter image description here


3
Чи можете ви пояснити, як це було б протестовано?
JohnE

варіант 1: отримати тестову версію лабораторії та відновити її, Варіант: запропонуйте спосіб, як я можу надіслати це вам як .exe або .vi (для останнього вам також потрібно отримати лабораторію)
Eumel

1
Дійсно, я просто хотів би побачити, як це поводиться, коли він працює. Чи може запис GIF бути ілюстративним?
JohnE

що відмінна ідея , я тільки що зробив це і буде до нього в секунду
Eumel

6

J, 12 11 байт

@ MartinBüttner врятував байт.

~:/@#:"0@i.

Це монадійна (тобто одинарна) функція, яка використовується наступним чином:

   f =: ~:/@#:"0@i.
   f 10
0 1 1 0 1 0 0 1 1 0

Пояснення

Я використовую альтернативне визначення, що T n - це парність числа 1-бітів у двійковому поданні n.

~:/@#:"0@i.  Input is n.
~:/          Output is XOR folded over
   @#:       the binary representations of
      "0     each element of
        @i.  integers from 0 to n-1.

{.(,-)^:]працює на 9 байт з деяким розтягуванням правила ( що було дозволено ). Напр. Для 5його виходів 5 _5 _5 5 _5. (Додано лише як коментар через розтягнення правила.)
randomra

4

Pyth, 11 10 байт

m%ssM.Bd2Q

Виводи у вигляді списку стилів Python.


Я спробував використовувати XOR через двійкову рядок, але я не знаю майже достатньо про Pyth для цього. Це все одно набагато коротше. +1
ETHproductions

@FryAmTheEggman Ах, я не знав про це, Fтому що шукав "зменшити". Ви можете розміщувати повідомлення як CW ...
lirtosiast

4

Japt , 29 11 байт

Uo ®¤¬r@X^Y

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

Виводиться безпосередньо у вигляді масиву, який зберігає близько 4 байтів.

Необурені і пояснення

Uo ®   ¤  ¬ r@  X^Y
Uo mZ{Zs2 q rXY{X^Y}}
        // Implicit: U = input number
Uo      // Create an array of integers in the range `[0, U)`. 
mZ{Zs2  // Map each item Z in this range to Z.toString(2),
q rXY{  //  split into chars, and reduced by
X^Y}}   //   XORing.
        //  This returns (number of 1s in the binary string) % 2.
        // Implicit: output last expression

Редагувати: Тепер ви можете використовувати наступний 8-байтний код (недійсний; функція, опублікована після цього виклику):

Uo ®¤¬r^

ви можете оновити своє пояснення
Eumel

@Eumel я вже зробив ...?
ETHproductions

код, який ви пояснюєте, і код вище виглядають по-іншому
Eumel

@Eumel Там, це краще?
ETHproductions

ось ідеально :)
Eumel

4

Haskell, 39 36 35 байт

take<*>(iterate([id,(1-)]<*>)[0]!!)

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

Як це працює: почніть з [0]та застосовуйте час x ++ invert x-функції n. Візьміть перші nелементи з отриманого списку. Завдяки ліні Хаскелла лише першаn насправді обчислюються елементи. Примітка: перше <*>знаходиться у контексті функцій, друге - у контекстному списку.

З GHC v8.4 (який не був доступний на момент виклику) є 34-байтне рішення:

take<*>(iterate(id<>map(1-))[0]!!)

Редагувати: -3 респ. -4 байти завдяки @Laikoni. -1 байт завдяки @ Ørjan Johansen.


(\x->x++map(1-)x)можна скоротити до GHC ([id,(1-)]<*>)або (id<>map(1-))8.4.
Лайконі

take<*>(iterate([id,(1-)]<*>)[0]!!)
Ørjan Johansen

3

Haskell, 54 байти

Менш компактний, ніж рішення німі, але я не хотів відмовити вам у цьому фрагменті обфузації функціонального коду. Працює для будь-якої пари об’єктів; наприклад, ви можете замінити (f 0.f 1)на (f 'A'.f 'B').

Виходячи з визначення, що перші 2 н цифрами слідує однакова послідовність перевернутих цифр. Що ми робимо, це складати два списки поруч; один для послідовності, один для зворотного. Постійно додаємо все більш довгі частини одного списку до інших.

Реалізація складається з трьох визначень:

t=(f 0.f 1)t
f c=flip take.(c:).g 1
g n l=l n++g(n+n)l

Функція tприймає будь-яке число і повертає послідовність Thue-Morse такої довжини. Дві інші функції - помічники.

  • Функція fпредставляє або список; f 0є для послідовності, f 1для зворотного.
  • Функція gзабезпечує додання дедалі більш довгих повторів одного списку до іншого.

Скрипка: http://goo.gl/wjk9S0



2

Бурлеск, 21 байт

{0}{J)n!_+}400E!jri.+

Приклади:

blsq ) "20"{0}{J)n!_+}400E!jri.+
{0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1}
blsq ) "42"{0}{J)n!_+}400E!jri.+
{0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1}

Пояснення:

{0}      -- setup
{J)n!_+} -- duplicate, map invert, concatenate
400E!    -- do 400 times (this will eventually run
            out of memory).
jri.+    -- take n elements

Without the jri.+ part you will run out of memory (because it will compute the morse sequence of length incredibly huge number). But since Burlesque is lazy just asking for the first n-element will work anyway.


Приємно. Подібно до мого рішення Haskell. Однак я повторюю лише 99 разів, щоб зберегти один байт.
німі

2

K5, 27 13 байт

{x#((log x)%log 2){x,~x}/0}

Розрахувати послідовність досить просто, проблема полягає в тому, щоб уникнути занадто багато обчислень. Ми можемо визнати, що легке розширення послідовності дає нам послідовність рядків, які є послідовними силами довжиною дві. Беручи до основи 2 журналу вхід і округлення, ми дамо нам достатньо працювати, і тоді ми можемо скоротити його до відповідного розміру:

  {x#((log x)%log 2){x,~x}/0}'(20 42 37 12 0)
(0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1
 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1
 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0
 0 1 1 0 1 0 0 1 1 0 0 1
 ())

Редагувати:

Рішення на основі паритету:

~=/'(64#2)\'!

Дія:

  ~=/'(64#2)\'!20
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1

Note that since K5 doesn't have an arbitrary convert-to-binary primitive I have to specify, for example, a 64-bit decoding. K5 doesn't use arbitrary precision math, so there will be a limit to the size of inputs we can deal with in any case.



2

Perl 5, 62 49 bytes

Yeah, not the best language for this one, but I still like the way it came out. Requires 5.14+ for /r and say.

sub{$_=0;$_.=y/01/10/r while$_[0]>length;say substr$_,0,$_[0]}

Using the parity definition, requires 5.12+ for say:

sub{say map{sprintf("%b",$_)=~y/1//%2}0..$_[0]-1}

2

Prolog (SWI), 115 bytes

Code:

N*X:-N>1,R is N//2,R*Y,X is(N mod 2)xor Y;X=N.
p(N):-M is N-1,findall(E,between(0,M,E),L),maplist(*,L,K),write(K).

Explained:

N*X:-                                 % Calculate Thue-Morse number at index N
     N>1,                             % Input is bigger than 1
     R is N//2,R*Y,X is(N mod 2)xor Y % Thue-Morse digit at index N is binary digits of N xor'ed
     ;X=N.                            % OR set X to N (end of recursion)
p(N):-
      M is N-1,                       % Get index of Nth number
      findall(E,between(0,M,E),L),    % Make a list of number 0->N-1
      maplist(*,L,K),                 % Map * on list L producing K
      write(K).                       % Print K

Example:

p(20).
[0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1]

Try it online here


2

Retina, 70 69 bytes

Using the definition as an L-system with initial word 0 and productions 0 --> 01 and 1 --> 10.

^
0;
(T`d`ab`^(.)+;(?!(?<-1>.)+$)
a
01
)`b
10
!`^(?=.*;(.)+)(?<-1>.)+

Input is taken in unary.

You can run the code from a single file with the -s flag. Or just try it online.

Explanation

^
0;

Prepends 0; to the input, where 0 is the initial word and ; is just a separator.

(T`d`ab`^(.)+;(?!(?<-1>.)+$)

The ( indicates that this is the beginning of a loop (which repeats until the loop stops changing the string). This stage itself turns 0 and 1 into a and b respectively (because d expands to 0-9). It does this as long as current word (whose length is measured with (.)+ is shorter than the input (i.e. as long as we can't read the end of the string by matching as many 1s as we have in the word).

a
01

Replace a (stand-in for 0) with 01.

)`b
10

Replace b (stand-in for 1) with 10. This is also the end of the loop. The loop terminates once the condition in the transliteration stage fails, because then all 0s and 1s will remain unchanged and the other two stages won't find anything to match.

!`^(?=.*;(.)+)(?<-1>.)+

The last step is to truncate the word to the length of the input. This time we measure the length of the input with (.)+ in a lookahead. Then we match that many characters from the beginning of the string.


2

Ruby, 33

->n{n.times{|i|p ("%b"%i).sum%2}}

Call like this:

f=->n{n.times{|i|p ("%b"%i).sum%2}}
f[16]

Uses the fact that the parity of binary numbers forms the thue-morse sequence.

Separator character is newline. Converts number i to a binary string, then calculates the sum of all ASCII codes, modulo 2.

If newline is not an acceptable separator, the following has no separator for an additional 2 bytes:

->n{n.times{|i|$><<("%b"%i).sum%2}}

2

MATL, 9 bytes

This language was designed after the challenge.

Approach 1: 13 bytes

This builds the sequence by concatenating negated copies of increasing-size blocks.

itBFw"t~h]w:)

Example

>> matl itBFw"t~h]w:)
> 20
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1

Explanation

i           % input number, say "N"
tB          % duplicate and convert to binary. Produces a vector
F           % initialize sequence to "false"
w           % swap to bring vector to top
"           % for loop. There will be at least log2(N) iterations
  t~h       % duplicate, negate, concatenate
]           % end for
w           % swap
:)          % index with vector 1, 2, ..., N

Approach 2: 9 bytes

This uses the same approach as Alephalpha's answer.

i:1-B!s2\

Example

>> matl i:1-B!s2\
> 20
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1

Explanation

i           % input "N" 
:1-         % create vector 0, 1, ..., N-1
B           % convert to binary
!           % tranpose
s           % sum
2\          % modulo 2


2

Jelly, 4 bytes

ḶB§Ḃ

Note that this challenge is older than Jelly.

Try it online!

How it works

ḶB§Ḃ  Main link. Argument: n (integer)

Ḷ     Unlength; yield [0, ..., n-1].
 B    Compute the binary representation of each integer in the range.
  §   Take the sum of each binary representation.
   Ḃ  Take the LSB of each sum.

1

Matlab, 42

I am using the fact that it is the same as beginning with 0 and then repeating the step of appending the complement of the current series, n times.

t=0;for k=1:input('');t=[t;~t];end;disp(t)

You can replace the disp(t) by t I think...
AlexR


1

Bash, 71 66 bytes

Based on the definition that the first 2n digits are followed by the same sequence of digits inverted.

x=0;y=1;while((${#x}<$1));do z=$x;x=$x$y;y=$y$z;done;echo ${x::$1}

$1 as a parameter is the desired number of digits.

Fiddle: http://goo.gl/RkDZIC


1

Batch, 115 + 2 = 117 bytes

Based on the Bash answer.

@echo off
set x=0
set y=1
set z=0
:a
set x=!x!!y!
set y=!y!!z!
set z=!x:~0,%1!
if !z!==!x! goto a
echo !z!

Needs an extra /V in the invocation to allow the use of !s.


1

ES6, 53 bytes

f=(i,x="0",y=1)=>x.length<i?f(i,x+y,y+x):x.slice(0,i)

Recursion seemed simpler than a loop.


1

Par, 8 bytes

✶u[Σ_✶¨^

Explanation:

✶          parse implicit input number
 u         range [0..n-1]
  [        map:
   Σ           convert to binary
    _✶         get digit list
      ¨^       fold with xor

Outputs something like:

(0 1 1 0 1 0 0 1)

1

Math++, 86 bytes

Uses 0.0\n for 0 and 1.0\n for 1

?>n
3*!!(n-m)>$
m>a
0>k
6+6*!a>$
9-2*!(a%2)>$
a/2>a
5>$
(a-1)/2>a
!k>k
5>$
k
m+1>m
2>$

1

Arcyóu, 50 55 bytes

I had to add 5 bytes to get it to work correctly :(

(f i(_(#(l)))(r b^(@(> i 0)(pg 0(% i 2)(: i(#/ i 2))))0

Explanation (with Pythonesque pseudocode along the side:

(f i (_ (# (l)))       ; For i in range(int(input())):
  (r b^                ; Reduce with binary xor
    (@ (> i 0)         ; While i > 0:
      (pg 0            ; Return first of its arguments
        (% i 2)        ; i mod 2
        (: i (#/ i 2)) ; i //= 2
      )
    )
    0                  ; Default reduce argument of 0 for the first bit in the sequence

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