Tuliskan urutan Thue-Morse

22

Ada beberapa tantangan di situs ini yang meminta Anda untuk mencetak urutan, dan ini tidak terkecuali.

(Penjelasan berikut dari urutan untuk tantangan ini mengasumsikan simbol dalam urutan adalah 0dan 1.)

Definisi rekursif dari urutan Thue-Morse adalah itu

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

Definisi yang lebih langsung adalah bahwa urutan dari 0ke 2**m-1dan 2**m to 2**(m+1)-1merupakan pelengkap biner. Jadi 0diikuti oleh 1, 01diikuti oleh 10, 0110diikuti oleh 1001, dan, melompati sedikit, 0110100110010110diikuti oleh 1001011001101001.

Tantangannya adalah untuk menulis program atau fungsi yang mencetak urutan Thue-Morse untuk nelemen pertama , di mana nada bilangan bulat non-negatif. Output dapat menggunakan dua simbol, seperti yang ditunjukkan pada contoh di bawah ini.

Contohnya

>>> 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

Aturan

  • Masukan akan berupa bilangan bulat non-negatif. Anda dapat menganggap semua input valid.

  • Output harus menjadi nelemen pertama dari urutan Thue-Morse, menggunakan simbol apa saja yang nyaman. Jika suka, Anda juga dapat menambahkan pemisah. Dalam contoh saya, saya belum. Catatan: Aturan ini memungkinkan daftar (seperti yang dari Python), seperti ,pemisah yang valid dan saya tidak keberatan memimpin atau mengikuti karakter, seperti [dan ]dalam output.

  • Ini adalah kode golf, sehingga jumlah byte terkecil menang.

Seperti biasa, jika masalahnya tidak jelas, beri tahu saya. Semoga berhasil dan bermain golf dengan baik!

Katalog

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>

Sherlock9
sumber
1
Terkait
Martin Ender
1
dengan kata-kata yang lebih sederhana, Anda bisa mengatakan: fungsinya rekursif, meniadakan input dan menambahkannya.
Eumel
2
Borderline dupe
Peter Taylor
2
@PeterTaylor Dengan cara apa? Satu jawaban yang mungkin untuk pertanyaan terkait adalah urutan Thue-Morse, tetapi pertanyaan ini adalah untuk menghasilkan Thue-Morse dan tidak ada yang lain.
Sherlock9
1
Karena beberapa jawaban untuk pertanyaan sebelumnya dapat digunakan untuk menjawab pertanyaan ini dengan perubahan sepele, dan semua jawaban untuk pertanyaan ini dapat digunakan untuk menjawab pertanyaan sebelumnya dengan perubahan sepele.
Peter Taylor

Jawaban:

14

Pyth, 6 byte

xMjR2Q

Cobalah online: Demonstrasi

Berdasarkan solusi dari @ThomasKwa dan variasi @FryAmTheEggman.

Ia menggunakan formular sebagai berikut: idigit -th di urutan Thue-Morse adalah: xor(digits of i in base 2).

Penjelasan:

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

CJam, 17 9 byte

ri{2b:^}/

atau

ri,2fb::^

Uji di sini.

Penjelasan

Ini menggunakan definisi alternatif yang diberikan di Wikipedia, berdasarkan pada paritas jumlah 1s dalam representasi biner dari 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.
}/

Solusi alternatif digunakan ,untuk mengubah nsecara eksplisit menjadi rentang [0 ... n-1]sebelum menggunakan operator infiks untuk menghitung representasi biner dan XOR tanpa perlu blok.

Solusi Bonus

Berikut adalah beberapa solusi berdasarkan definisi lain. Jika ada dua solusi, yang lebih pendek akan meledakkan memori dengan sangat cepat (karena precomputation menghasilkan 2^nbit sebelum dipotong ke n).

Sebagai sistem-L dengan 0 --> 01dan 1 --> 10:

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

Dengan meniadakan dan menambahkan bagian sebelumnya:

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

Menggunakan relasi perulangan yang diberikan dalam tantangan, menggunakan divmoddan XOR untuk membedakan antara dua definisi rekursif:

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

(Meskipun, tentu saja, hubungan perulangan ini hanya cara yang berbeda untuk mengekspresikan urutan Thue-Morse sebagai paritas 1-bit dalam representasi biner dari n.)

Martin Ender
sumber
Solusi boros memori adalah pemikiran pertama saya juga, tapi saya pikir menggunakan lebih dari setengah terabyte memori untuk menghitung output untuk 42(dengan asumsi bitset) akan sangat tidak masuk akal.
JohnE
@JohnE Masalah dipecahkan. ;)
Martin Ender
:^membuatku bahagia. Pada catatan lain, sial, itu algoritma yang keren.
Dana Gugatan Monica
@ QPaysTaxes bukan :^}?
TheLethalCoder
1
@TheLethalCoder Itu membuat saya bahagia juga
Gugatan Dana Monica
8

Dyalog APL, 8 7 byte

≠⌿⍴∘2⊤⍳

Ini adalah kereta monadik yang mengharapkan asal indeks 0 ( ⎕IO←0). Fungsi non-kereta setara adalah {≠⌿(⍵⍴2)⊤⍳⍵}.

Penjelasan:

      ⍳      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

Output adalah daftar yang dipisahkan oleh ruang dari 0dan 1. Coba di sini .

lirtosiast
sumber
8

Mathematica, 35 21 byte

Mathematica memiliki built-in untuk urutan Thue-Morse!

Array[ThueMorse,#,0]&

Jawaban asli:

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

LabVIEW, 15 Primview LabVIEW

sekarang sebagai gif super mewah dengan probe

masukkan deskripsi gambar di sini

Eumel
sumber
3
Bisakah Anda menjelaskan bagaimana ini akan diuji?
JohnE
opsi 1: dapatkan versi uji labview dan bangun kembali, Opsi: menyarankan cara bagaimana saya dapat mengirimkan ini kepada Anda sebagai .exe atau .vi (untuk yang terakhir Anda harus mendapatkan labview juga)
Eumel
1
Sungguh saya hanya ingin melihat bagaimana ini berperilaku ketika berjalan. Apakah merekam GIF bisa menjadi ilustrasi?
JohnE
ide bagus saya baru saja melakukannya dan akan segera melakukannya
Eumel
6

J, 12 11 byte

@ MartinBüttner menyimpan satu byte.

~:/@#:"0@i.

Ini adalah fungsi monadik (artinya unary), digunakan sebagai berikut:

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

Penjelasan

Saya menggunakan definisi alternatif bahwa T n adalah paritas dari jumlah 1-bit dalam representasi biner dari 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.
Zgarb
sumber
{.(,-)^:]bekerja untuk 9 byte dengan beberapa aturan peregangan ( yang telah diizinkan ). Misalnya untuk 5itu output 5 _5 _5 5 _5. (Ditambahkan hanya sebagai komentar karena aturan yang berlaku.)
randomra
4

Pyth, 11 10 byte

m%ssM.Bd2Q

Output sebagai daftar gaya-Python.

lirtosiast
sumber
Saya mencoba menggunakan XOR pada string biner, tetapi saya tidak tahu cukup banyak tentang Pyth untuk melakukan itu. Ini jauh lebih pendek. +1
ETHproduk
@FryAmTheEggman Ah, saya tidak tahu Fkarena saya mencari 'kurangi'. Anda dapat memposting sebagai CW ...
lirtosiast
4

Japt , 29 11 byte

Uo ®¤¬r@X^Y

Cobalah online!

Output langsung sebagai array, yang menghemat sekitar 4 byte.

Tanpa penjelasan dan penjelasan

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

Sunting: Sekarang Anda dapat menggunakan kode 8-byte berikut (tidak valid; fitur yang diterbitkan setelah tantangan ini):

Uo ®¤¬r^
Produksi ETH
sumber
Anda mungkin ingin memperbarui penjelasan Anda
Eumel
@Eumel sudah saya lakukan ...?
ETHproduk
kode yang Anda jelaskan dan kode di atas terlihat berbeda
Eumel
@Eumel Ada, apakah itu lebih baik?
ETHproductions
itu sempurna :)
Eumel
4

Haskell, 39 36 35 byte

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

Cobalah online!

Cara kerjanya: mulai dengan [0]dan terapkan kali- x ++ invert xfungsi n. Ambil nelemen pertama dari daftar yang dihasilkan. Berkat kemalasan Haskell, hanya nelemen pertama yang benar-benar dihitung. Catatan: yang pertama <*>dalam konteks fungsi, yang kedua dalam konteks daftar.

Dengan GHC v8.4 (yang tidak tersedia pada saat tantangan) ada solusi 34 byte:

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

Edit: -3 resp. -4 byte terima kasih kepada @Laikoni. -1 byte terima kasih kepada @ Ørjan Johansen.

nimi
sumber
(\x->x++map(1-)x)dapat disingkat menjadi ([id,(1-)]<*>)atau (id<>map(1-))dengan GHC 8.4.
Laikoni
take<*>(iterate([id,(1-)]<*>)[0]!!)
Ørjan Johansen
3

Haskell, 54 byte

Kurang kompak daripada solusi nimi, tapi saya tidak ingin menyangkal Anda sepotong kode kebingungan fungsional. Berfungsi untuk pasangan benda apa pun; mis. Anda bisa mengganti (f 0.f 1)dengan (f 'A'.f 'B').

Berdasarkan definisi bahwa 2 n digit pertama diikuti oleh urutan digit yang sama terbalik. Apa yang kami lakukan adalah membangun dua daftar berdampingan; satu untuk urutan, satu untuk kebalikannya. Kami terus menambahkan bagian yang semakin panjang dari satu daftar ke yang lain.

Implementasinya terdiri dari tiga definisi:

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

Fungsi tmenerima nomor apa pun dan mengembalikan urutan Thue-Morse dari panjang itu. Dua fungsi lainnya adalah pembantu.

  • Fungsi fmewakili salah satu daftar; f 0adalah untuk urutan, f 1untuk kebalikannya.
  • Fungsi gmenangani penambahan pengulangan yang semakin lama dari satu daftar ke yang lain.

Biola: http://goo.gl/wjk9S0

Ruud Helderman
sumber
2

Burlesque, 21 byte

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

Contoh:

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}

Penjelasan:

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

Tanpa jri.+bagian Anda akan kehabisan memori (karena itu akan menghitung urutan panjang morse jumlah yang sangat besar ). Tetapi karena Burlesque malas, hanya meminta elemen-n pertama akan berhasil.

mroman
sumber
Bagus. Mirip dengan solusi Haskell saya. Namun, saya ulangi hanya 99 kali untuk menghemat satu byte.
nimi
2

K5, 27 13 byte

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

Menghitung urutannya cukup mudah, masalahnya menghindari komputasi terlalu banyak. Kita dapat mengenali bahwa perluasan urutan yang mudah memberi kita urutan string yang merupakan kekuatan dua panjang berturut-turut. Mengambil basis log 2 dari input dan mengumpulkan akan memberi kita cukup untuk bekerja dengan dan kemudian kita dapat memotongnya ke ukuran yang sesuai:

  {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
 ())

Edit:

Solusi berbasis paritas:

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

Dalam aksi:

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

Perhatikan bahwa karena K5 tidak memiliki primitif convert-to-binary yang sewenang-wenang, saya harus menentukan, misalnya, decoding 64-bit. K5 tidak menggunakan matematika presisi arbitrer, jadi akan ada batasan ukuran input yang bisa kita tangani dalam hal apa pun.

JohnE
sumber
2

Oktaf, 33 31 byte

Disimpan 2 byte berkat Thomas Kwa.

@(n)mod(sum(dec2bin(0:n-1)'),2)
alephalpha
sumber
2

Perl 5, 62 49 byte

Ya, bukan bahasa terbaik untuk yang satu ini, tapi saya masih suka caranya keluar. Membutuhkan 5,14+ untuk /rdan say.

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

Menggunakan definisi paritas, membutuhkan 5.12+ untuk say:

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

Prolog (SWI), 115 byte

Kode:

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).

Dijelaskan:

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

Contoh:

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

Cobalah online di sini

Emigna
sumber
2

Retina , 70 69 byte

Menggunakan definisi sebagai sistem-L dengan kata 0dan produksi awal 0 --> 01dan 1 --> 10.

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

Input diambil secara unary .

Anda dapat menjalankan kode dari satu file dengan -sbendera. Atau coba saja secara online.

Penjelasan

^
0;

Sandi 0;input, di mana 0kata awal dan ;hanya pemisah.

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

Yang (menunjukkan bahwa ini adalah awal dari suatu loop (yang berulang sampai loop berhenti mengubah string). Tahap ini sendiri berubah 0dan 1menjadi adan bmasing - masing (karena ddiperluas ke 0-9). Ini melakukan ini selama kata saat ini (yang panjangnya diukur dengan (.)+lebih pendek dari input (yaitu selama kita tidak dapat membaca akhir string dengan mencocokkan sebanyak yang 1kita miliki dalam kata).

a
01

Ganti a(siap untuk 0) dengan 01.

)`b
10

Ganti b(siap untuk 1) dengan 10. Ini juga merupakan akhir dari perulangan. Loop berakhir setelah kondisi pada tahap transliterasi gagal, karena semua 0s dan 1s akan tetap tidak berubah dan dua tahap lainnya tidak akan menemukan apa pun yang cocok.

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

Langkah terakhir adalah memotong kata hingga panjang input. Kali ini kita mengukur panjang input dengan (.)+di lookahead. Kemudian kami mencocokkan banyak karakter dari awal string.

Martin Ender
sumber
2

Ruby, 33

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

Panggil seperti ini:

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

Menggunakan fakta bahwa paritas bilangan biner membentuk urutan thue-morse.

Karakter pemisah adalah baris baru. Mengonversi angka imenjadi string biner, lalu menghitung jumlah semua kode ASCII, modulo 2.

Jika baris baru bukan pemisah yang dapat diterima, berikut ini tidak memiliki pemisah untuk 2 byte tambahan:

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

MATL , 9 byte

Bahasa ini dirancang setelah tantangan .

Pendekatan 1: 13 byte

Ini membangun urutan dengan menggabungkan salinan blok ukuran yang dinegasikan.

itBFw"t~h]w:)

Contoh

>> 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

Penjelasan

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

Pendekatan 2: 9 byte

Ini menggunakan pendekatan yang sama dengan jawaban Alephalpha .

i:1-B!s2\

Contoh

>> 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

Penjelasan

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

C, 88 83 byte

Menghitung paritas untuk setiap posisi individu.

i,j;main(int c,char**a){for(;i<atoi(a[1]);putchar(c))for(c=48,j=i++;j;j&=j-1)c^=1;}

Biola: http://goo.gl/znxmOk

Ruud Helderman
sumber
2

Jelly , 4 byte

ḶB§Ḃ

Perhatikan bahwa tantangan ini lebih tua dari Jelly.

Cobalah online!

Bagaimana itu bekerja

Ḷ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.
Dennis
sumber
1

Matlab, 42

Saya menggunakan fakta bahwa itu sama dengan memulai dengan 0dan kemudian mengulangi langkah menambahkan pelengkap dari seri saat ini, nkali.

t=0;for k=1:input('');t=[t;~t];end;disp(t)
cacat
sumber
Anda dapat mengganti disp (t) dengan t saya pikir ...
AlexR
1

𝔼𝕊𝕄𝕚𝕟, 11 karakter / 23 byte (tidak kompetitif)

Ⓐïⓜ_ⓑⓢĊ⇀$^_

Try it here (Firefox only).

Lingkaran kuat dengan yang ini.

Mama Fun Roll
sumber
1

Bash, 71 66 byte

Berdasarkan definisi bahwa 2 n digit pertama diikuti oleh urutan digit yang sama terbalik.

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

$1 sebagai parameter adalah jumlah digit yang diinginkan.

Biola: http://goo.gl/RkDZIC

Ruud Helderman
sumber
1

Batch, 115 + 2 = 117 byte

Berdasarkan jawaban Bash.

@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!

Membutuhkan tambahan /Vdalam doa untuk memungkinkan penggunaan !s.

Neil
sumber
1

ES6, 53 byte

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

Rekursi tampak lebih sederhana daripada satu lingkaran.

Neil
sumber
1

Par , 8 byte

✶u[Σ_✶¨^

Penjelasan:

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

Menghasilkan sesuatu seperti:

(0 1 1 0 1 0 0 1)
Lynn
sumber
1

Matematika ++ , 86 byte

Penggunaan 0.0\nuntuk 0 dan 1.0\nuntuk 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>$
SuperJedi224
sumber
1

Arcyóu , 50 55 byte

Saya harus menambahkan 5 byte agar berfungsi dengan benar :(

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

Penjelasan (dengan kodesemu Pythonesque di sepanjang sisinya:

(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
bkul
sumber