Scrivi la sequenza mar-mer


22

Ci sono alcune sfide su questo sito che ti chiedono di stampare una sequenza, e questa non fa eccezione.

(La seguente spiegazione della sequenza per questa sfida presuppone che i simboli nella sequenza siano 0e 1.)

La definizione ricorsiva della sequenza Gio-Morse è quella

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

Una definizione più diretta è che la sequenza da 0a 2**m-1e 2**m to 2**(m+1)-1sono complementi binari. Quindi 0è seguito da 1, 01è seguito da 10, 0110è seguito da 1001e, saltando un po 'avanti, 0110100110010110è seguito da 1001011001101001.

La sfida è scrivere un programma o una funzione che stampi la sequenza Thue-Morse per i primi nelementi, dove nc'è un numero intero non negativo. L'output può utilizzare due simboli qualsiasi, come mostrato negli esempi seguenti.

Esempi

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

Regole

  • L'input sarà qualsiasi numero intero non negativo. Puoi presumere che tutti gli input siano validi.

  • L'output deve essere il primo nelemento della sequenza Thue-Morse, usando tutti i simboli che sono convenienti. Se lo desideri, puoi anche aggiungere un separatore. Nei miei esempi, non l'ho fatto. Nota: questa regola consente elenchi (come quelli di Python), in quanto ,è un separatore valido e non mi dispiace i caratteri iniziali o finali, come [e ]nell'output.

  • Questo è il codice golf, quindi vince il minor numero di byte.

Come sempre, se il problema non è chiaro, per favore fatemi sapere. Buona fortuna e buon golf!

Catalogare

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 parole più semplici potresti dire: la funzione è ricorsiva, annulla l'input e la accoda.
Eumel,


2
@PeterTaylor In che modo? Una possibile risposta alla domanda collegata è la sequenza Gio-Morse, ma questa domanda è generare il Gio-Morse e nient'altro.
Sherlock9,

1
Poiché alcune delle risposte alla domanda precedente possono essere utilizzate per rispondere a questa domanda con cambiamenti banali, e tutte le risposte a questa domanda possono essere utilizzate per rispondere alla domanda precedente con cambiamenti banali.
Peter Taylor,

Risposte:


14

Pyth, 6 byte

xMjR2Q

Provalo online: dimostrazione

Basato sulla soluzione di @ThomasKwa e una variante di @FryAmTheEggman.

Si utilizza la seguente formulario: la icifra esimo della sequenza Thue-Morse è: xor(digits of i in base 2).

Spiegazione:

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 byte

ri{2b:^}/

o

ri,2fb::^

Provalo qui.

Spiegazione

Questo utilizza la definizione alternativa fornita su Wikipedia, basata sulla parità del numero di 1s nella rappresentazione binaria di 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.
}/

La soluzione alternativa utilizza ,per trasformare nesplicitamente un intervallo [0 ... n-1]prima di utilizzare gli operatori infix per calcolare le rappresentazioni binarie e XOR senza bisogno di un blocco.

Soluzioni bonus

Ecco alcune soluzioni basate su altre definizioni. Se ci sono due soluzioni, quella più corta farà esplodere la memoria molto rapidamente (perché il precomputazione genera 2^nbit prima di troncare a n).

Come sistema L con 0 --> 01e 1 --> 10:

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

Negando e aggiungendo la parte precedente:

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

Utilizzando la relazione di ricorrenza indicata nella sfida, usando divmode XOR per distinguere tra le due definizioni ricorsive:

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

(Anche se, naturalmente, questa relazione di ricorrenza è solo un modo diverso di esprimere la sequenza Thue-Morse come parità dei 1 bit nella rappresentazione binaria di n.)


Anche la soluzione che sprecava memoria era il mio primo pensiero, ma ho pensato che usare più di mezzo terabyte di memoria per calcolare l'output 42(supponendo un set di bit) sarebbe stato abbastanza irragionevole.
Giovanni

@JohnE Problema risolto. ;)
Martin Ender il

:^mi rende felice. In un'altra nota, merda santa, è un algoritmo interessante.
Fondo Monica's Lawsuit

@QPaysTaxes no :^}?
TheLethalCoder il

1
@TheLethalCoder Anche questo mi rende felice
Finanzia la causa di Monica il

8

Dyalog APL, 8 7 byte

≠⌿⍴∘2⊤⍳

Questo è un treno monadico che prevede un'origine indice di 0 ( ⎕IO←0). La funzione equivalente non treno è {≠⌿(⍵⍴2)⊤⍳⍵}.

Spiegazione:

      ⍳      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

L'output è un elenco separato da spazi di 0e 1. Provalo qui .


8

Mathematica, 35 21 byte

Mathematica ha un built-in per la sequenza Thue-Morse!

Array[ThueMorse,#,0]&

Risposta originale:

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

7

LabVIEW, 15 primitivi LabVIEW

ora come gif super fantasia con una sonda

inserisci qui la descrizione dell'immagine


3
Potresti spiegare come questo sarebbe testato?
Giovanni

opzione 1: ottenere la versione di prova di labview e ricostruirla, Opzione: suggerire un modo in cui posso inviarti questo come .exe o .vi (per quest'ultimo devi ottenere anche labview)
Eumel

1
Vorrei solo vedere come si comporta quando funziona. La registrazione di una GIF sarebbe illustrativa?
Giovanni

che grande idea l'ho appena fatto e lo farò in un secondo
Eumel

6

J, 12 11 byte

@ MartinBüttner ha salvato un byte.

~:/@#:"0@i.

Questa è una funzione monadica (che significa unaria), usata come segue:

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

Spiegazione

Sto usando la definizione alternativa che T n è la parità del numero di 1 bit nella rappresentazione binaria di 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.

{.(,-)^:]funziona per 9 byte con un certo allungamento delle regole ( che è stato consentito ). Ad esempio, per le 5uscite 5 _5 _5 5 _5. (Aggiunto solo come commento a causa
dell'estensione

4

Pyth, 11 10 byte

m%ssM.Bd2Q

Output come un elenco in stile Python.


Ho provato ad usare XOR sulla stringa binaria, ma non so abbastanza su Pyth per farlo. Questo è molto più breve comunque. +1
ETHproductions

@FryAmTheEggman Ah, non lo sapevo Fperché ho cercato "riduci". Puoi pubblicare come CW ...
lirtosiast,

4

Japt , 29 11 byte

Uo ®¤¬r@X^Y

Provalo online!

Emette direttamente come un array, che consente di risparmiare circa 4 byte.

Ungolfed e spiegazione

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

Modifica: ora puoi utilizzare il seguente codice a 8 byte (non valido; funzione pubblicata dopo questa sfida):

Uo ®¤¬r^

potresti voler aggiornare la tua spiegazione
Eumel

@Eumel l'ho già fatto ...?
ETHproductions

il codice che spieghi e il codice sopra sembrano diversi
Eumel

@Eumel Ecco, è meglio?
ETHproductions

perfetto :)
Eumel,

4

Haskell, 39 36 35 byte

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

Provalo online!

Come funziona: iniziare con [0]e applicare le x ++ invert x-Function nvolte. Prendi i primi nelementi dall'elenco risultante. Grazie alla pigrizia di Haskell nvengono calcolati solo i primi elementi. Nota: il primo <*>è nel contesto della funzione, il secondo nel contesto dell'elenco.

Con GHC v8.4 (che non era disponibile al momento della sfida) esiste una soluzione a 34 byte:

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

Modifica: -3 resp. -4 byte grazie a @Laikoni. -1 byte grazie a @ Ørjan Johansen.


(\x->x++map(1-)x)può essere abbreviato in ([id,(1-)]<*>)o (id<>map(1-))con GHC 8.4.
Laikoni,

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

3

Haskell, 54 byte

Meno compatto della soluzione di nimi, ma non volevo negarti questo pezzo di offuscamento del codice funzionale. Funziona con qualsiasi coppia di oggetti; ad esempio è possibile sostituire (f 0.f 1)con (f 'A'.f 'B').

In base alla definizione che le prime 2 n cifre sono seguite dalla stessa sequenza di cifre invertite. Quello che facciamo è costruire due elenchi fianco a fianco; uno per la sequenza, uno per l'inverso. Aggiungiamo continuamente parti sempre più lunghe di una lista all'altra.

L'implementazione consiste di tre definizioni:

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

La funzione taccetta qualsiasi numero e restituisce la sequenza Giu-Morse di quella lunghezza. Le altre due funzioni sono di aiuto.

  • La funzione frappresenta una delle due liste; f 0è per la sequenza, f 1per l'inverso.
  • La funzione gsi occupa di aggiungere ripetizioni sempre più lunghe di un elenco all'altro.

Fiddle: http://goo.gl/wjk9S0



2

Burlesque, 21 byte

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

Esempi:

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}

Spiegazione:

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

Senza la jri.+parte rimarrai senza memoria (perché calcolerà la sequenza morse di lunghezza numero incredibilmente enorme ). Ma dal momento che Burlesque è pigro, la semplice richiesta del primo elemento n funzionerà comunque.


Bello. Simile alla mia soluzione Haskell. Tuttavia, ripeto solo 99 volte per salvare un byte.
nimi,

2

K5, 27 13 byte

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

Calcolare la sequenza è abbastanza semplice, il problema è evitare il calcolo troppo. Possiamo riconoscere che la facile espansione della sequenza ci dà una sequenza di stringhe che sono potenze successive di due di lunghezza. Prendere il log base 2 dell'input e arrotondare per eccesso ci darà abbastanza per lavorare con e quindi possiamo tagliarlo alla dimensione appropriata:

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

Modificare:

Una soluzione basata sulla parità:

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

In azione:

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

Si noti che poiché K5 non ha una primitiva conversione-binaria arbitraria, devo specificare, ad esempio, una decodifica a 64 bit. K5 non usa matematica di precisione arbitraria, quindi ci sarà un limite alla dimensione degli input che possiamo trattare in ogni caso.


2

Ottava, 33 31 byte

Salvato 2 byte grazie a Thomas Kwa.

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

2

Perl 5, 62 49 byte

Sì, non è la lingua migliore per questo, ma mi piace ancora il modo in cui è uscito. Richiede 5.14+ per /re say.

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

Utilizzando la definizione di parità, richiede 5.12+ per say:

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

2

Prolog (SWI), 115 byte

Codice:

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

Ha spiegato:

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

Esempio:

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

Provalo online qui


2

Retina , 70 69 byte

Usando la definizione come un sistema L con parola iniziale 0e produzioni 0 --> 01e 1 --> 10.

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

L'input è preso in unario .

È possibile eseguire il codice da un singolo file con il -sflag. O semplicemente provalo online.

Spiegazione

^
0;

Si prepara 0;all'input, dove si 0trova la parola iniziale ed ;è solo un separatore.

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

Il (indica che questo è l'inizio di un ciclo (che ripete finché l'anello smette di cambiare la stringa). Questa fase stessa si trasforma 0e 1in ae brispettivamente (perché si despande in 0-9). Lo fa fintanto che la parola corrente (la cui lunghezza è misurata (.)+è più corta dell'input (cioè finché non possiamo leggere la fine della stringa abbinando quanti più 1s abbiamo nella parola).

a
01

Sostituire a( sostituire 0) con 01.

)`b
10

Sostituire b( sostituire 1) con 10. Questa è anche la fine del ciclo. Il ciclo termina una volta che la condizione nella fase di traslitterazione fallisce, perché quindi tutti 0i 1parametri rimarranno invariati e le altre due fasi non troveranno nulla che corrisponda.

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

L'ultimo passaggio consiste nel troncare la parola per la lunghezza dell'input. Questa volta misuriamo la lunghezza dell'input con (.)+in un lookahead. Quindi abbiniamo quel numero di caratteri dall'inizio della stringa.


2

Ruby, 33

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

Chiama in questo modo:

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

Usa il fatto che la parità dei numeri binari costituisce la sequenza di martedì.

Il carattere separatore è newline. Converte il numero iin una stringa binaria, quindi calcola la somma di tutti i codici ASCII, modulo 2.

Se newline non è un separatore accettabile, quanto segue non ha un separatore per ulteriori 2 byte:

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

2

MATL , 9 byte

Questo linguaggio è stato progettato dopo la sfida .

Approccio 1: 13 byte

Questo crea la sequenza concatenando copie negate di blocchi di dimensioni crescenti.

itBFw"t~h]w:)

Esempio

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

Spiegazione

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

Approccio 2: 9 byte

Questo utilizza lo stesso approccio della risposta di Alephalpha .

i:1-B!s2\

Esempio

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

Spiegazione

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


2

Gelatina , 4 byte

ḶB§Ḃ

Nota che questa sfida è più antica di Jelly.

Provalo online!

Come funziona

Ḷ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

Sto usando il fatto che è lo stesso di iniziare 0e poi ripetere il passaggio di aggiungere il complemento della serie attuale, i ntempi.

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

Puoi sostituire disp (t) con t Penso ...
AlexR


1

Bash, 71 66 byte

In base alla definizione che le prime 2 n cifre sono seguite dalla stessa sequenza di cifre invertite.

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

$1 come parametro è il numero desiderato di cifre.

Fiddle: http://goo.gl/RkDZIC


1

Lotto, 115 + 2 = 117 byte

Basato sulla risposta di 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!

Ha bisogno di un extra /Vnell'invocazione per consentire l'uso di !s.


1

ES6, 53 byte

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

La ricorsione sembrava più semplice di un ciclo.


1

Par , 8 byte

✶u[Σ_✶¨^

Spiegazione:

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

Emette qualcosa del tipo:

(0 1 1 0 1 0 0 1)

1

Math ++ , 86 byte

Utilizza 0.0\nper 0 e 1.0\nper 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 byte

Ho dovuto aggiungere 5 byte per farlo funzionare correttamente :(

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

Spiegazione (con pseudocodice in pitone sul lato:

(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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.