Schreiben Sie die Thue-Morse-Sequenz auf


22

Auf dieser Website gibt es eine Reihe von Herausforderungen, bei denen Sie aufgefordert werden, eine Sequenz auszudrucken. Dies ist keine Ausnahme.

(Bei der folgenden Erläuterung der Sequenz für diese Challenge wird davon ausgegangen, dass die Symbole in der Sequenz 0und sind 1.)

Die rekursive Definition der Thue-Morse-Sequenz lautet:

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

Eine direktere Definition ist, dass die Reihenfolge von 0bis 2**m-1und 2**m to 2**(m+1)-1binäre Komplemente sind. So 0wird gefolgt von 1, 01gefolgt von 10, 0110gefolgt von 1001, und, vorwärts springen ein wenig, 0110100110010110wird gefolgt von 1001011001101001.

Die Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die die Thue-Morse-Sequenz für die ersten nElemente ausgibt, wobei nes sich um eine beliebige nicht negative Ganzzahl handelt. Für die Ausgabe können zwei beliebige Symbole verwendet werden, wie in den folgenden Beispielen gezeigt.

Beispiele

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

Regeln

  • Die Eingabe ist eine beliebige nicht negative Ganzzahl. Sie können davon ausgehen, dass alle Eingaben gültig sind.

  • Die Ausgabe muss die ersten nElemente der Thue-Morse-Sequenz sein, wobei alle Symbole verwendet werden, die zweckmäßig sind. Wenn Sie möchten, können Sie auch ein Trennzeichen hinzufügen. In meinen Beispielen habe ich nicht. Hinweis: Diese Regel erlaubt Listen (wie die von Python), da ,es sich um ein gültiges Trennzeichen handelt und es mir egal ist, ob Zeichen wie [und ]in der Ausgabe vor- oder nachgestellt werden.

  • Das ist Codegolf, also gewinnt die kleinste Anzahl von Bytes.

Wie immer, wenn das Problem unklar ist, lassen Sie es mich bitte wissen. Viel Glück und gutes Golfen!

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>



1
in einfacheren worten könnte man sagen: die funktion ist rekursiv, negiere die eingabe und hänge sie an.
Eumel


2
@ PeterTaylor In welcher Weise? Eine mögliche Antwort auf die verknüpfte Frage ist die Thue-Morse-Sequenz, aber diese Frage besteht darin, die Thue-Morse und nichts anderes zu generieren.
Sherlock9

1
Da einige der Antworten auf die vorherige Frage verwendet werden können, um diese Frage mit geringfügigen Änderungen zu beantworten, können alle Antworten auf diese Frage verwendet werden, um die vorherige Frage mit geringfügigen Änderungen zu beantworten.
Peter Taylor

Antworten:


14

Pyth, 6 Bytes

xMjR2Q

Probieren Sie es online aus: Demonstration

Basierend auf der Lösung von @ThomasKwa und einer Variante von @FryAmTheEggman.

Es verwendet das folgende Formular: die i-te Ziffer in der Morsefolge ist: xor(digits of i in base 2).

Erläuterung:

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 Bytes

ri{2b:^}/

oder

ri,2fb::^

Teste es hier.

Erläuterung

Hierbei wird die in Wikipedia angegebene alternative Definition verwendet, die auf der Parität der Anzahl der 1s in der binären Darstellung der basiert 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.
}/

Die alternative Lösung verwendet ,, um nexplizit in einen Bereich [0 ... n-1]umzuwandeln, bevor Infix-Operatoren zum Berechnen der binären Darstellungen und des XOR verwendet werden, ohne dass ein Block erforderlich ist.

Bonus-Lösungen

Hier finden Sie einige Lösungen, die auf anderen Definitionen basieren. Wenn es zwei Lösungen gibt, sprengt die kürzere sehr schnell den Speicher (da die Vorberechnung 2^nvor dem Abschneiden auf Bits generiert n).

Als L-System mit 0 --> 01und 1 --> 10:

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

Durch Negieren und Anhängen des vorherigen Teils:

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

Verwenden Sie divmodund XOR, um anhand der in der Abfrage angegebenen Wiederholungsrelation zwischen den beiden rekursiven Definitionen zu unterscheiden:

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

(Obwohl diese Wiederholungsbeziehung natürlich nur eine andere Art ist, die Thue-Morse-Sequenz als die Parität der 1-Bits in der binären Darstellung von auszudrücken n.)


Die speicherverschwenderische Lösung war auch mein erster Gedanke, aber ich dachte, 42dass es ziemlich unvernünftig wäre, mehr als ein halbes Terabyte Speicher für die Berechnung der Ausgabe zu verwenden (vorausgesetzt, ein Bitset).
JohnE

@ JohnE Problem gelöst. ;)
Martin Ender

:^macht mich glücklich. Ein weiterer Punkt, heiliger Mist, das ist ein cooler Algorithmus.
Fund Monica's Lawsuit

@ QPaysTaxes nicht :^}?
TheLethalCoder

1
@TheLethalCoder Das freut mich auch
Fund Monicas Klage

8

Dyalog APL, 8 7 Bytes

≠⌿⍴∘2⊤⍳

Dies ist ein monadischer Zug, der einen Indexursprung von 0 ( ⎕IO←0) erwartet . Die äquivalente Nichtzugfunktion ist {≠⌿(⍵⍴2)⊤⍳⍵}.

Erläuterung:

      ⍳      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

Die Ausgabe ist eine durch Leerzeichen getrennte Liste von 0und 1. Probieren Sie es hier aus .


8

Mathematica, 35 21 Bytes

Mathematica hat eine eingebaute für die Thue-Morse-Sequenz!

Array[ThueMorse,#,0]&

Ursprüngliche Antwort:

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

7

LabVIEW, 15 LabVIEW-Grundelemente

jetzt als super schickes gif mit sonde

Bildbeschreibung hier eingeben


3
Könnten Sie erklären, wie dies getestet werden würde?
JohnE

Option 1: labview test version holen und neu erstellen, Option: einen Weg vorschlagen, wie ich dies als .exe oder .vi an dich senden kann (für letztere musst du auch labview bekommen)
Eumel

1
Eigentlich möchte ich nur sehen, wie sich das verhält, wenn es läuft. Wäre die Aufnahme eines GIF illustrativ?
JohnE

das ist eine großartige idee, die ich gerade gemacht habe und sie in einer
Eumel

6

J, 12 11 Bytes

@ MartinBüttner hat ein Byte gespeichert.

~:/@#:"0@i.

Dies ist eine monadische (dh unäre) Funktion, die wie folgt verwendet wird:

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

Erläuterung

Ich benutze die alternative Definition, dass T n die Parität der Anzahl der 1-Bits in der binären Darstellung von n ist.

~:/@#:"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.

{.(,-)^:]Funktioniert für 9 Bytes mit einigem Rule Stretching ( was erlaubt wurde ). ZB dafür 5Ausgänge 5 _5 _5 5 _5. (Wurde nur als Kommentar hinzugefügt, da sich die Regeln dehnen.)
zufällig

4

Pyth, 11 10 Bytes

m%ssM.Bd2Q

Ausgabe als Python-Liste.


Ich habe versucht, XOR über die Binärzeichenfolge zu verwenden, aber ich weiß nicht genug über Pyth, um das zu tun. Das ist sowieso viel kürzer. +1
ETHproductions

@FryAmTheEggman Ah, ich wusste es nicht, Fweil ich nach "Reduzieren" gesucht habe. Sie könnten als CW ...
Lirtosiast

4

Japt , 29 11 Bytes

Uo ®¤¬r@X^Y

Probieren Sie es online!

Gibt direkt als Array aus, wodurch ca. 4 Bytes eingespart werden.

Ungolfed und Erklärung

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

Bearbeiten: Sie können jetzt den folgenden 8-Byte- Code verwenden (nicht gültig; Feature veröffentlicht nach dieser Herausforderung):

Uo ®¤¬r^

Vielleicht möchten Sie Ihre Erklärung aktualisieren
Eumel

@Eumel hab ich schon gemacht ...?
ETHproductions

Der Code, den Sie erklären, und der Code oben sehen anders aus
Eumel

@Eumel Gibt es das besser?
ETHproductions

das ist perfekt :)
Eumel

4

Haskell, 39 36 35 Bytes

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

Probieren Sie es online!

So funktioniert es: Beginnen Sie mit [0]und wenden Sie die x ++ invert x-Funktionszeiten nan. Nehmen Sie die ersten nElemente aus der resultierenden Liste. Dank Haskells Faulheit werden nur die ersten nElemente tatsächlich berechnet. Hinweis: Die erste <*>befindet sich im Funktionskontext, die zweite im Listenkontext.

Mit GHC v8.4 (das zum Zeitpunkt der Herausforderung noch nicht verfügbar war) gibt es eine 34-Byte-Lösung:

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

Bearbeiten: -3 resp. -4 Bytes dank @Laikoni. -1 Byte danke an @ Ørjan Johansen.


(\x->x++map(1-)x)kann auf ([id,(1-)]<*>)oder (id<>map(1-))mit GHC 8.4 gekürzt werden .
Laikoni

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

3

Haskell, 54 Bytes

Weniger kompakt als Nimis Lösung, aber ich wollte Ihnen diese funktionale Code-Verschleierung nicht verweigern. Funktioniert für jedes Paar von Objekten. zB kann man ersetzen (f 0.f 1)durch (f 'A'.f 'B').

Basierend auf der Definition, dass auf die ersten 2 n Ziffern die gleiche Folge von invertierten Ziffern folgt. Wir bauen zwei Listen nebeneinander auf. eine für die Sequenz, eine für die Inverse. Wir hängen fortlaufend immer längere Teile einer Liste an die andere an.

Die Implementierung besteht aus drei Definitionen:

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

Funktion t akzeptiert eine beliebige Zahl und gibt die Thue-Morse-Sequenz dieser Länge zurück. Die beiden anderen Funktionen sind Helfer.

  • Funktion f repräsentiert eine der beiden Listen. f 0ist für die Sequenz, f 1für die Umkehrung.
  • Funktion g sorgt dafür, dass immer längere Wiederholungen einer Liste an die andere angehängt werden.

Geige: http://goo.gl/wjk9S0



2

Burlesque, 21 Bytes

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

Beispiele:

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}

Erläuterung:

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

Ohne den jri.+Teil wird Ihnen der Speicher ausgehen (weil dadurch die Morsefolge mit der unglaublich großen Länge berechnet wird ). Aber da Burlesque faul ist, funktioniert es trotzdem, nur nach dem ersten n-Element zu fragen.


Nett. Ähnlich wie bei meiner Haskell-Lösung. Ich wiederhole es jedoch nur 99 Mal, um ein Byte zu sparen.
nimi

2

K5, 27 13 Bytes

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

Die Berechnung der Sequenz ist ziemlich einfach, das Problem besteht darin, zu viel Rechenaufwand zu vermeiden. Wir können erkennen, dass die einfache Erweiterung der Folge uns eine Folge von Folgen ergibt, die aufeinanderfolgende Zweierpotenzen sind. Wenn wir die logarithmische Basis 2 der Eingabe nehmen und aufrunden, haben wir genug Zeit, um damit zu arbeiten. Dann können wir sie auf die entsprechende Größe zuschneiden:

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

Bearbeiten:

Eine paritätsbasierte Lösung:

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

In Aktion:

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

Beachten Sie, dass ich, da K5 keine willkürliche Umwandlung in ein binäres Grundelement hat, zum Beispiel eine 64-Bit-Dekodierung angeben muss. K5 verwendet keine willkürliche Präzisionsmathematik, so dass die Größe der Eingaben, mit denen wir uns auf jeden Fall befassen können, begrenzt ist.


2

Oktave, 33 31 Bytes

2 Bytes gespart dank Thomas Kwa.

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

2

Perl 5, 62 49 Bytes

Ja, nicht die beste Sprache für diese, aber ich mag immer noch die Art und Weise, wie sie herauskam. Benötigt 5.14+ für /rund say.

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

Für die Verwendung der Paritätsdefinition ist 5.12+ erforderlich für 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).

Erklärt:

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

Beispiel:

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

Probieren Sie es hier online aus


2

Retina , 70 69 Bytes

Verwendung der Definition als L-System mit Anfangswort 0und Produktionen 0 --> 01und 1 --> 10.

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

Die Eingabe erfolgt unär .

Sie können den Code aus einer einzelnen Datei mit dem -sFlag ausführen . Oder versuchen Sie es einfach online.

Erläuterung

^
0;

Stellt 0;vor die Eingabe, wobei 0das Anfangswort und ;nur ein Trennzeichen ist.

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

Das (zeigt an, dass dies der Anfang einer Schleife ist (die wiederholt wird, bis die Schleife aufhört, die Zeichenfolge zu ändern). Diese Phase selbst dreht 0und 1in aundb jeweils (weil dausdehnt 0-9). Dies geschieht so lange, wie das aktuelle Wort (dessen Länge mit gemessen wird, (.)+ist kürzer als die Eingabe 1).

a
01

Ersetzen a (Ersatz für 0) durch 01.

)`b
10

Ersetzen b(Ersatz für1 ) durch 10. Dies ist auch das Ende der Schleife. Die Schleife wird beendet, sobald die Bedingung in der Transliterationsphase fehlschlägt, da dann alle 0s und 1s unverändert bleiben und die anderen beiden Phasen nichts Passendes finden.

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

Der letzte Schritt ist das Abschneiden des Wortes auf die Länge der Eingabe. Dieses Mal messen wir die Länge der Eingabe mit(.)+ einem Lookahead. Dann stimmen wir mit so vielen Zeichen ab dem Anfang der Zeichenfolge überein.


2

Ruby, 33

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

Rufen Sie wie folgt an:

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

Verwendet die Tatsache, dass die Parität von Binärzahlen die Thue-Morse-Sequenz bildet.

Trennzeichen ist Newline. Wandelt die Zahl umi in eine Binärzeichenfolge um und berechnet dann die Summe aller ASCII-Codes, Modulo 2.

Wenn newline kein akzeptables Trennzeichen ist, enthält Folgendes kein Trennzeichen für zusätzliche 2 Bytes:

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

2

MATL , 9 Bytes

Diese Sprache wurde nach der Herausforderung entworfen .

Ansatz 1: 13 Bytes

Dies baut die Sequenz auf, indem negierte Kopien von Blöcken mit zunehmender Größe verkettet werden.

itBFw"t~h]w:)

Beispiel

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

Erläuterung

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

Ansatz 2: 9 Bytes

Dies verwendet den gleichen Ansatz wie Alephalphas Antwort .

i:1-B!s2\

Beispiel

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

Erläuterung

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


2

Gelee , 4 Bytes

ḶB§Ḃ

Beachten Sie, dass diese Herausforderung älter als Jelly ist.

Probieren Sie es online!

Wie es funktioniert

Ḷ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

Ich benutze die Tatsache, dass es das Gleiche ist, als würde ich mit dem 0Anhängen des Komplements der aktuellen Serie beginnen und diesen Schritt dann wiederholen n.

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

Sie können die disp (t) durch t ersetzen, denke ich ...
AlexR


1

Bash, 71 66 Bytes

Basierend auf der Definition, dass auf die ersten 2 n Ziffern die gleiche Folge von invertierten Ziffern folgt.

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

$1 als parameter wird die gewünschte ziffernanzahl angegeben.

Geige: http://goo.gl/RkDZIC


1

Batch, 115 + 2 = 117 Bytes

Basierend auf der Bash-Antwort.

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

Benötigt ein Extra /Vim Aufruf, um die Verwendung von !s zu ermöglichen .


1

ES6, 53 Bytes

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

Rekursion schien einfacher als eine Schleife.


1

Par , 8 Bytes

✶u[Σ_✶¨^

Erläuterung:

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

Gibt so etwas aus wie:

(0 1 1 0 1 0 0 1)

1

Math ++ , 86 Bytes

Verwendet 0.0\nfür 0 und 1.0\nfür 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

Ich musste 5 Bytes hinzufügen, damit es richtig funktioniert :(

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

Erklärung (mit Pythonesque-Pseudocode an der Seite:

(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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.