Thue-Morse dizisini yaz


22

Bu sitede bir dizi yazdırmanızı isteyen birkaç zorluk var ve bu bir istisna değil.

(Bu sorun için dizisinin Aşağıdaki açıklama sırayla semboller kabul 0ve 1.)

Thue-Morse dizisinin özyinelemeli tanımı şöyledir:

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

Daha doğrudan bir tanım sekansı olduğunu 0için 2**m-1ve 2**m to 2**(m+1)-1ikili tamamlar. Yani 0takip eder 1, 01izler 10, 0110takip eder 1001öncesinde biraz atlama, ve, 0110100110010110takip eder 1001011001101001.

Buradaki zorluk, negatif olmayan bir tamsayı olan ilk elemanlar için Thue-Morse dizisini basan bir program veya işlev yazmaktır . Çıktı, aşağıdaki örneklerde gösterildiği gibi herhangi iki simgeyi kullanabilir.nn

Örnekler

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

kurallar

  • Giriş, negatif olmayan bir tamsayı olacaktır. Tüm girişlerin geçerli olduğunu varsayabilirsiniz.

  • Çıktı n, uygun olan sembolleri kullanarak, Thue-Morse dizisinin ilk elemanları olmalıdır . İsterseniz bir ayırıcı da ekleyebilirsiniz. Örneklerimde yapmadım. Not: Bu kural ,geçerli bir ayırıcı olduğu gibi listelemelere (Python'dakiler gibi) izin verir ve çıktının içinde [ve dışında ]bulunan karakterleri ve baştaki karakterleri dikkate almam .

  • Bu kod golf, yani en küçük bayt sayısı kazanır.

Her zaman olduğu gibi, sorun açık değilse, lütfen bana bildirin. İyi şanslar ve iyi golf!

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
basit kelimelerle söyleyebileceğiniz şeyler: fonksiyon özyinelemelidir, girişi yok sayın ve ekleyin.
Eumel


2
@PeterTaylor Ne şekilde? Bağlantılı soruya olası cevaplardan biri Thue-Morse dizisidir, ancak bu soru Thue-Morse'u ve başka hiçbir şeyi üretmemek.
Sherlock9

1
Çünkü önceki soruya verilen cevapların bazıları bu soruyu önemsiz değişikliklerle cevaplamak için kullanılabilir ve bu soruya verilen tüm cevaplar önceki soruyu önemsiz değişikliklerle cevaplamak için kullanılabilir.
Peter Taylor

Yanıtlar:


14

Pyth, 6 bayt

xMjR2Q

Çevrimiçi deneyin: Gösteri

@ThomasKwa’nın çözümü ve @FryAmTheEggman’ın bir varyasyonuna dayanarak.

Aşağıdaki Formular kullanır: iThue-Morse dizisinde inci haneli: xor(digits of i in base 2).

Açıklama:

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 bayt

ri{2b:^}/

veya

ri,2fb::^

Burada test et.

açıklama

Bu, Vikipedi'de verilen alternatif tanımı kullanarak, 1ikili sayıdaki s sayısının paritesine dayanmaktadır 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.
}/

Alternatif çözüm kullanır ,açmak için nbir aralığa açıkça [0 ... n-1]bir blok gerek kalmadan ikili temsilleri ve XOR hesaplamak için infix operatörlerini kullanmadan önce.

Bonus Çözümleri

İşte diğer tanımlara dayanan bazı çözümler. İki çözüm varsa, kısa olanı belleği çok hızlı bir şekilde patlatacaktır (çünkü ön hesaplama 2^nkesmeden önce bit üretir n).

Bir L sistemi olarak 0 --> 01ve 1 --> 10:

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

Önceki kısmı olumsuzlayarak ve ekleyerek:

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

Mücadelede verilen yineleme ilişkisini kullanmak divmod, iki özyinelemeli tanım arasında ayrım yapmak için ve XOR kullanarak :

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

(Her ne kadar, elbette, bu yinelenme ilişkisi, Thue-Morse dizisini ikili gösterimdeki 1-bit paritesi olarak ifade etmenin sadece farklı bir yoludur n.)


Hafızada boşa harcanan çözüm benim de ilk düşüncemdi, ancak çıktısını hesaplamak için yarım terabaytlık bir bellek kullanmanın 42(bir bit setinin varsayarak) mantıksız olacağını düşündüm .
JohnE

@JohnE Sorun çözüldü. ;)
Martin Ender

:^beni mutlu ediyor. Başka bir notta, kutsal bok, bu serin bir algoritma.
Fon Monica'nın Davası

@QPaysTaxes değil :^}mi?
TheLethalCoder

1
@TheLethalCoder Beni de mutlu ediyor
Fon Monica'nın Davası

8

Dyalog APL, 8 7 bayt

≠⌿⍴∘2⊤⍳

Bu, 0 ( ⎕IO←0) endeks orijini bekleyen monadik bir tren . Eşdeğer tren olmayan fonksiyon {≠⌿(⍵⍴2)⊤⍳⍵}.

Açıklama:

      ⍳      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

Çıktı, boşlukla ayrılmış bir 0ve listesidir 1. Burada dene .


8

Mathematica, 35 21 bayt

Mathematica'nın Thue-Morse dizisi için yerleşik bir yeri var!

Array[ThueMorse,#,0]&

Orijinal cevap:

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

7

LabVIEW, 15 LabVIEW İlkelleri

şimdi bir sonda ile süper fantezi gif

görüntü tanımını buraya girin


3
Bunun nasıl test edileceğini açıklayabilir misiniz?
JohnE

seçenek 1: labview test sürümünü edinin ve yeniden oluşturun, Seçenek: bunu .exe veya .vi olarak size nasıl göndereceğimi bir yol önerin (ikincisi için de labview almanız gerekir)
16'da

1
Gerçekten, bunun çalıştığı zaman nasıl davrandığını görmek istiyorum. Bir GIF kaydı açıklayıcı olur mu?
JohnE,

Bu harika bir fikir, sadece bunu yaptım ve bir saniye içinde
tamamlayacağım

6

J, 12 11 bayt

@ MartinBüttner bir bayt kaydetti.

~:/@#:"0@i.

Bu, monadik (unary anlamına gelir) fonksiyonudur, aşağıdaki şekilde kullanılır:

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

açıklama

Tn'nin n'nin ikili gösterimindeki 1-bit sayısının paritesi olduğu alternatif tanımını kullanıyorum .

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

{.(,-)^:](germe bazı kural ile 9 bayt için çalışır izin verilmiş olan ). Örneğin 5bunun için çıktılar 5 _5 _5 5 _5. (Sadece kural genişletme nedeniyle yorum olarak
eklenir

4

Pyth, 11 10 bayt

m%ssM.Bd2Q

Python tarzı bir liste olarak çıkar.


XOR'u ikili dizginin üzerinden kullanmayı denedim, ancak Pyth hakkında bunun için neredeyse yeterince bilgim yok. Bu zaten çok daha kısa. +1
ETHProductions

@FryAmTheEggman Ah, bilmiyordum Fçünkü 'azaltmak' için aradım. CW olarak
yayınlayabilirsiniz

4

Japt , 29 11 bayt

Uo ®¤¬r@X^Y

Çevrimiçi deneyin!

Doğrudan yaklaşık 4 bayt tasarruf sağlayan bir dizi olarak çıktı verir.

Ungolfed ve açıklama

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

Düzenleme: Artık aşağıdaki 8 bayt kodu kullanabilirsiniz (geçerli değil; bu zorluğun ardından yayınlanan özellik):

Uo ®¤¬r^

açıklamanızı güncellemek isteyebilirsiniz
Eumel

@Eumel zaten yaptım ...?
ETHProductions,

açıkladığınız kod ve yukarıdaki kod farklı görünüyor
Eumel

@Eumel Orada, daha iyi mi?
ETHProductions,

thats perfect :)
Eumel 19

4

Haskell, 39 36 35 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır: -fonksiyon zamanları ile başlayın [0]ve uygulayın . Sonuçtaki listeden ilk elemanları al . Haskell'in tembelliği sayesinde yalnızca ilk unsurlar hesaplanır. Not: ilki işlev bağlamında, ikincisi liste bağlamındadır.x ++ invert xnnn<*>

GHC v8.4 ile (meydan okuma sırasında mevcut değildi) 34 baytlık bir çözüm var:

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

Düzenleme: -3 cevap. @Likoni sayesinde -4 byte. @ Ørjan Johansen sayesinde -1 bayt.


(\x->x++map(1-)x)GHC ile ([id,(1-)]<*>)veya kısaltılabilir (id<>map(1-)). 8.4.
Laikoni

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

3

Haskell, 54 bayt

Nimi'nin çözümünden daha az kompakt, ancak bu işlevsel kod gizleme parçasını inkar etmek istemedim. Herhangi bir nesne çifti için çalışır; mesela sen yerini alabilir (f 0.f 1)tarafından (f 'A'.f 'B').

İlk 2 n rakamın ters çevrildiği aynı rakam dizisi tarafından takip edildiğine göre. Yaptığımız şey yan yana iki liste oluşturmak; dizi için biri, biri tersi için. Sürekli olarak bir listenin giderek daha uzun bölümlerini diğerine ekliyoruz.

Uygulama üç tanımdan oluşmaktadır:

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

İşlev therhangi bir sayıyı kabul eder ve bu uzunluktaki Thue-Morse dizisini döndürür. Diğer iki fonksiyon yardımcıdır.

  • İşlev f, her iki listeyi de temsil eder; f 0sıra f 1için, ters için.
  • İşlev g, bir listenin diğerine giderek daha uzun tekrarlar eklemeyi önemser.

Keman: http://goo.gl/wjk9S0



2

Burlesque, 21 bayt

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

Örnekler:

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}

Açıklama:

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

jri.+Parça olmadan hafızanız tükenir (çünkü inanılmaz derecede büyük sayının mors dizisini hesaplayacaktır ). Fakat Burlesque tembel olduğundan, sadece ilk n elemanını sormak yine de işe yarayacak.


Güzel. Haskell çözümüme benzer. Ancak, bir bayt kaydetmek için yalnızca 99 kez yineliyorum.
nimi

2

K5, 27 13 bayt

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

Diziyi hesaplamak oldukça kolaydır, sorun çok fazla bilgi işlemden kaçınmaktır. Dizinin kolay genişlemesinin bize, iki uzunluktaki ardışık güçler olan bir dizi dizisi verdiğini kabul edebiliriz. Girişin log tabanını 2 almak ve yuvarlamak bize birlikte çalışmamızı sağlayacak ve sonra uygun boyutta kesebiliriz:

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

Düzenle:

Eşlik tabanlı bir çözüm:

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

Eylemde:

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

K5'in ikili bir rasgele dönüştürme ilkeline sahip olmadığından, örneğin bir 64 bit kod çözme belirtmem gerektiğini unutmayın. K5 isteğe bağlı hassas matematik kullanmıyor, bu nedenle her durumda başa çıkabileceğimiz girdilerin boyutunda bir sınır olacak.


2

Octave, 33 31 bayt

Thomas Kwa sayesinde 2 bayt kaydedildi.

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

2

Perl 5, 62 49 bayt

Evet, bunun için en iyi dil değil ama yine de ortaya çıkış şeklini seviyorum. İçin 5.14+ gerektirir /rve say.

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

Eşlik tanımını kullanmak için, aşağıdakiler için 5.12+ gerekir say:

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

2

Prolog (SWI), 115 bayt

Kod:

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

Açıklaması:

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

Örnek:

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

Burada çevrimiçi deneyin


2

Retina , 70 69 bayt

Tanımı L-sistemi olarak ilk kelime 0ve yapımlarla kullanmak 0 --> 01ve 1 --> 10.

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

Giriş unary olarak alınmıştır .

Kodu, -sbayrakla birlikte tek bir dosyadan çalıştırabilirsiniz . Ya da sadece çevrimiçi deneyin.

açıklama

^
0;

Opsiyonlar 0;girişine, 0ilk kelime ve ;bir ayırıcıdır.

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

Bunun (bir döngünün başlangıcı olduğunu gösterir (döngü dize değiştirmeyi bırakana kadar tekrar eder). Bu aşama, kendisi döner 0ve 1içine ave b(nedeniyle sırasıyla dgenişletir için 0-9). Bunu, mevcut sözcüğü (uzunluğu ölçülen (.)+girişten daha kısa olduğu sürece yapar (yani, dizideki 1kelimeyi sahip olduğumuz kadar s ile eşleştirerek okuyamadığımız sürece ).

a
01

İle değiştirin a(stand-in 0) 01.

)`b
10

İle değiştirin b(stand-in 1) 10. Bu aynı zamanda döngünün de sonu. Döngü, harf çevirme aşamasındaki koşul başarısız olduğunda sona erer, çünkü o zaman tüm 0s ve 1s'ler değişmeden kalır ve diğer iki aşama eşleşecek bir şey bulamaz.

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

Son adım, kelimeyi girişin uzunluğuyla kesmektir. Bu kez girişin uzunluğunu (.)+bir gözle kontrol ediyoruz . Ardından dizenin başından bu kadar çok karakterle eşleşiriz.


2

Ruby, 33

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

Böyle ara:

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

İkili sayıların paritesinin, ton-mors dizisini oluşturduğu gerçeğini kullanır.

Ayırıcı karakter yeni satır. Sayıyı iikili bir dizgeye dönüştürür , ardından tüm ASCII kodlarının toplamını, modulo 2'yi hesaplar.

Newline kabul edilebilir bir ayırıcı değilse, aşağıdakilerde ek 2 bayt için ayırıcı yoktur:

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

2

MATL , 9 bayt

Bu dil mücadeleden sonra tasarlandı .

Yaklaşım 1: 13 bayt

Bu, artan boyuttaki blokların negatif kopyalarını birleştirerek diziyi oluşturur.

itBFw"t~h]w:)

Örnek

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

açıklama

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

Yaklaşım 2: 9 bayt

Bu, Alephalpha'nın cevabıyla aynı yaklaşımı kullanır .

i:1-B!s2\

Örnek

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

açıklama

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


2

Jöle , 4 bayt

ḶB§Ḃ

Bu sorunun Jelly'den daha eski olduğuna dikkat edin.

Çevrimiçi deneyin!

Nasıl çalışır

Ḷ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

0Mevcut serinin tamamlayıcısını, defaları ekleme adımını tekrarlamakla başlayıp aynı olanı tekrar ediyorum n.

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



1

Bash, 71 66 bayt

İlk 2 n rakamın ters çevrildiği aynı rakam dizisi tarafından takip edildiğine göre.

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

$1 parametre olarak istenen basamak sayısıdır.

Keman: http://goo.gl/RkDZIC


1

Toplu, 115 + 2 = 117 bayt

Bash cevabı dayanarak.

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

/VÇağrıda !s kullanımına izin vermek için ekstraya ihtiyaç var .


1

ES6, 53 bayt

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

Özyineleme bir döngüden daha basit görünüyordu.


1

Par , 8 bayt

✶u[Σ_✶¨^

Açıklama:

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

Gibi bir şey çıktılar:

(0 1 1 0 1 0 0 1)

1

Matematik ++ , 86 bayt

0.0\n0 ve 1.0\n1 için kullanır

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

Doğru çalışması için 5 bayt eklemek zorunda kaldım.

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

Açıklama (Yanında Pythonesque sözde kodu ile:

(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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.