Escribe la secuencia Thue-Morse


22

Hay bastantes desafíos en este sitio que le piden que imprima una secuencia, y esta no es una excepción.

(La siguiente explicación de la secuencia para este desafío supone que los símbolos en la secuencia son 0y 1.)

La definición recursiva de la secuencia Thue-Morse es que

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

Una definición más directa es que la secuencia de 0a 2**m-1y 2**m to 2**(m+1)-1son complementos binarios. Entonces 0es seguido por 1, 01seguido por 10, 0110seguido por 1001, y, saltando un poco hacia adelante, 0110100110010110seguido por 1001011001101001.

El desafío es escribir un programa o una función que imprima la secuencia Thue-Morse para los primeros nelementos, donde nhay cualquier número entero no negativo. La salida puede usar cualquiera de los dos símbolos, como se muestra en los ejemplos a continuación.

Ejemplos

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

Reglas

  • La entrada será cualquier número entero no negativo. Puede asumir que todas las entradas son válidas.

  • La salida debe ser los primeros nelementos de la secuencia Thue-Morse, utilizando cualquier símbolo que sea conveniente. Si lo desea, también puede agregar un separador. En mis ejemplos, no tengo. Nota: Esta regla permite listas (como las de Python), ya que ,es un separador válido y no me importa los caracteres iniciales o finales, como [y ]en la salida.

  • Este es el código de golf, por lo que gana el menor número de bytes.

Como siempre, si el problema no está claro, hágamelo saber. ¡Buena suerte y buen golf!

Catalogar

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
en palabras más simples, se podría decir: la función es recursiva, niega la entrada y la agrega.
Eumel


2
@PeterTaylor ¿De qué manera? Una posible respuesta a la pregunta vinculada es la secuencia Thue-Morse, pero esta pregunta es generar Thue-Morse y nada más.
Sherlock9

1
Debido a que algunas de las respuestas a la pregunta anterior se pueden usar para responder esta pregunta con cambios triviales, y todas las respuestas a esta pregunta se pueden usar para responder la pregunta anterior con cambios triviales.
Peter Taylor

Respuestas:


14

Pyth, 6 bytes

xMjR2Q

Pruébelo en línea: demostración

Basado en la solución de @ThomasKwa y una variación de @FryAmTheEggman.

Se utiliza la siguiente formular: el idígito-ésimo en la secuencia Thue-Morse es: xor(digits of i in base 2).

Explicación:

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:^}/

o

ri,2fb::^

Pruébalo aquí.

Explicación

Utiliza la definición alternativa dada en Wikipedia, basada en la paridad del número de 1s en la representación binaria de 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 solución alternativa se utiliza ,para convertir nexplícitamente en un rango [0 ... n-1]antes de usar operadores infijos para calcular las representaciones binarias y el XOR sin necesidad de un bloque.

Soluciones de bonificación

Aquí hay algunas soluciones basadas en otras definiciones. Si hay dos soluciones, la más corta explotará la memoria muy rápidamente (porque la precomputación genera 2^nbits antes de truncar n).

Como un sistema L con 0 --> 01y 1 --> 10:

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

Al negar y agregar la parte anterior:

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

Usando la relación de recurrencia dada en el desafío, usando divmody XOR para distinguir entre las dos definiciones recursivas:

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

(Aunque, por supuesto, esta relación de recurrencia es solo una forma diferente de expresar la secuencia Thue-Morse como la paridad de los 1 bits en la representación binaria de n).


La solución que desperdició la memoria también fue mi primer pensamiento, pero pensé que usar más de medio terabyte de memoria para calcular la salida 42(suponiendo un conjunto de bits) sería bastante irracional.
JohnE

@JohnE Problema resuelto. ;)
Martin Ender

:^me hace feliz. En otra nota, santa mierda, ese es un algoritmo genial.
Financia la demanda de Mónica el

@QPaysTaxes no :^}?
TheLethalCoder

1
@TheLethalCoder Eso también me hace feliz
Fund La Demanda de Mónica

8

Dyalog APL, 8 7 bytes

≠⌿⍴∘2⊤⍳

Este es un tren monádico que espera un origen de índice de 0 ( ⎕IO←0). La función no tren equivalente es {≠⌿(⍵⍴2)⊤⍳⍵}.

Explicación:

      ⍳      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

La salida es una lista separada por espacios de 0y 1. Probarlo aquí .


8

Mathematica, 35 21 bytes

¡Mathematica tiene incorporado una secuencia Thue-Morse!

Array[ThueMorse,#,0]&

Respuesta original:

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

7

LabVIEW, 15 primitivas de LabVIEW

ahora como gif súper elegante con una sonda

ingrese la descripción de la imagen aquí


3
¿Podría explicar cómo se probaría esto?
JohnE

opción 1: obtener la versión de prueba de labview y reconstruirla, Opción: sugiera una forma en que puedo enviarle esto como .exe o .vi (para este último también debe obtener labview)
Eumel

1
Realmente me gustaría ver cómo se comporta esto cuando se ejecuta. ¿Grabar un GIF sería ilustrativo?
JohnE

que gran idea acabo de hacer eso y lo
subiré

6

J, 12 11 bytes

@ MartinBüttner guardó un byte.

~:/@#:"0@i.

Esta es una función monádica (que significa unario), que se utiliza de la siguiente manera:

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

Explicación

Estoy usando la definición alternativa de que T n es la paridad del número de 1 bits en la representación binaria de 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.

{.(,-)^:]funciona para 9 bytes con cierta extensión de la regla ( que se ha permitido ). Por ejemplo, para 5que salga 5 _5 _5 5 _5. (Agregado solo como un comentario debido al estiramiento de la regla.)
randomra

4

Pyth, 11 10 bytes

m%ssM.Bd2Q

Salidas como una lista de estilo Python.


Intenté usar XOR sobre la cadena binaria, pero no sé lo suficiente sobre Pyth para hacerlo. Esto es mucho más corto de todos modos. +1
ETHproductions

@FryAmTheEggman Ah, no lo sabía Fporque busqué 'reducir'. Podrías publicar como CW ...
lirtosiast

4

Japt , 29 11 bytes

Uo ®¤¬r@X^Y

Pruébalo en línea!

Salidas directamente como una matriz, que ahorra unos 4 bytes.

Sin golfos y explicación

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

Editar: ahora puede usar el siguiente código de 8 bytes (no válido; característica publicada después de este desafío):

Uo ®¤¬r^

es posible que desee actualizar su explicación
Eumel

@Eumel ya lo hice ...?
ETHproductions

el código que explica y el código anterior se ven diferentes
Eumel

@Eumel Ahí, ¿eso es mejor?
ETHproductions

eso es perfecto :)
Eumel

4

Haskell, 39 36 35 bytes

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

Pruébalo en línea!

Cómo funciona: comenzar con [0]y aplicar los x ++ invert x-Función nveces. Tome los primeros nelementos de la lista resultante. Gracias a la pereza de Haskell, solo nse calculan los primeros elementos. Nota: el primero <*>está en contexto de función, el segundo en contexto de lista.

Con GHC v8.4 (que no estaba disponible en el momento del desafío) hay una solución de 34 bytes:

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

Editar: -3 resp. -4 bytes gracias a @Laikoni. -1 byte gracias a @ Ørjan Johansen.


(\x->x++map(1-)x)puede ser acortado a ([id,(1-)]<*>)o (id<>map(1-))con GHC 8.4.
Laikoni

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

3

Haskell, 54 bytes

Menos compacto que la solución de nimi, pero no quería negarle esta ofuscación de código funcional. Funciona para cualquier par de objetos; Por ejemplo, puede reemplazar (f 0.f 1)por (f 'A'.f 'B').

Según la definición de que los primeros 2 n dígitos van seguidos de la misma secuencia de dígitos invertidos. Lo que hacemos es construir dos listas una al lado de la otra; uno para la secuencia, uno para el inverso. Continuamente agregamos partes cada vez más largas de una lista a la otra.

La implementación consta de tres definiciones:

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

La función tacepta cualquier número y devuelve la secuencia Thue-Morse de esa longitud. Las otras dos funciones son ayudantes.

  • La función frepresenta cualquier lista; f 0es para la secuencia, f 1para el inverso.
  • La función gse encarga de agregar repeticiones cada vez más largas de una lista a la otra.

Violín: http://goo.gl/wjk9S0



2

Burlesque, 21 bytes

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

Ejemplos:

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}

Explicación:

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

Sin la jri.+parte, se quedará sin memoria (porque calculará la secuencia Morse de longitud increíblemente enorme ). Pero como Burlesque es perezoso, solo pedir el primer elemento n funcionará de todos modos.


Agradable. Similar a mi solución Haskell. Sin embargo, repito solo 99 veces para guardar un byte.
nimi

2

K5, 27 13 bytes

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

Calcular la secuencia es bastante fácil, el problema es evitar calcular demasiado. Podemos reconocer que la fácil expansión de la secuencia nos da una secuencia de cadenas que son potencias sucesivas de dos de longitud. Tomar la base de registro 2 de la entrada y redondear nos dará suficiente para trabajar y luego podemos reducirlo al tamaño apropiado:

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

Editar:

Una solución basada en la paridad:

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

En acción:

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

Tenga en cuenta que, dado que K5 no tiene una primitiva arbitraria de conversión a binaria, debo especificar, por ejemplo, una decodificación de 64 bits. K5 no utiliza matemática de precisión arbitraria, por lo que habrá un límite para el tamaño de las entradas que podemos tratar en cualquier caso.


2

Octava, 33 31 bytes

Guardado 2 bytes gracias a Thomas Kwa.

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

2

Perl 5, 62 49 bytes

Sí, no es el mejor idioma para este, pero todavía me gusta cómo salió. Requiere 5.14+ para /rysay .

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

Usando la definición de paridad, requiere 5.12+ para say:

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

2

Prólogo (SWI), 115 bytes

Código:

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

Explicado:

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

Ejemplo:

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

Pruébalo en línea aquí


2

Retina , 70 69 bytes

Usando la definición como un sistema L con palabras iniciales 0y producciones 0 --> 01y 1 --> 10.

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

La entrada se toma en unario .

Puede ejecutar el código desde un solo archivo con la -sbandera. O simplemente pruébelo en línea.

Explicación

^
0;

Precede 0;a la entrada, donde 0está la palabra inicial y ;es solo un separador.

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

El (indica que este es el comienzo de un ciclo (que se repite hasta que el ciclo deja de cambiar la cadena). Esta etapa en sí se convierte en 0y 1en ay brespectivamente (porque dse expande a 0-9). Lo hace siempre que la palabra actual (cuya longitud se mide (.)+sea ​​más corta que la entrada (es decir, siempre que no podamos leer el final de la cadena haciendo coincidir tantos 1s como tenemos en la palabra).

a
01

Reemplace a(suplente 0) con 01.

)`b
10

Reemplace b(suplente 1) con 10. Este es también el final del ciclo. El ciclo termina una vez que la condición en la etapa de transliteración falla, porque entonces todos 0los 1sys permanecerán sin cambios y las otras dos etapas no encontrarán nada que coincida.

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

El último paso es truncar la palabra a la longitud de la entrada. Esta vez medimos la longitud de la entrada con (.)+anticipación. Luego emparejamos esa cantidad de caracteres desde el comienzo de la cadena.


2

Rubí, 33

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

Llame así:

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

Utiliza el hecho de que la paridad de los números binarios forma la secuencia thue-morse.

El carácter separador es nueva línea. Convierte el número ien una cadena binaria, luego calcula la suma de todos los códigos ASCII, módulo 2.

Si la nueva línea no es un separador aceptable, lo siguiente no tiene separador para 2 bytes adicionales:

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

2

MATL , 9 bytes

Este lenguaje fue diseñado después del desafío .

Enfoque 1: 13 bytes

Esto construye la secuencia concatenando copias negadas de bloques de tamaño creciente.

itBFw"t~h]w:)

Ejemplo

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

Explicación

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

Enfoque 2: 9 bytes

Utiliza el mismo enfoque que la respuesta de Alephalpha .

i:1-B!s2\

Ejemplo

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

Explicación

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


2

Jalea , 4 bytes

ḶB§Ḃ

Tenga en cuenta que este desafío es más antiguo que Jelly.

Pruébalo en línea!

Cómo funciona

Ḷ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

Estoy usando el hecho de que es lo mismo que comenzar 0y luego repetir el paso de agregar el complemento de la serie actual, nveces.

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

Puede reemplazar el disp (t) por t, creo ...
AlexR


1

Bash, 71 66 bytes

Según la definición de que los primeros 2 n dígitos van seguidos de la misma secuencia de dígitos invertidos.

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

$1 como parámetro es el número deseado de dígitos.

Violín: http://goo.gl/RkDZIC


1

Lote, 115 + 2 = 117 bytes

Basado en la respuesta 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!

Necesita un extra /Ven la invocación para permitir el uso de !s.


1

ES6, 53 bytes

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

La recursión parecía más simple que un bucle.


1

Par , 8 bytes

✶u[Σ_✶¨^

Explicación:

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

Produce algo como:

(0 1 1 0 1 0 0 1)


1

Arcyóu , 50 55 bytes

Tuve que agregar 5 bytes para que funcione correctamente :(

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

Explicación (con pseudocódigo Pythonesque a lo largo del lado:

(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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.