Thue-Morse: Difference between revisions

Content added Content deleted
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 8: Line 8:
*   YouTube entry: [https://www.youtube.com/watch?v=prh72BLNjIk The Fairest Sharing Sequence Ever]
*   YouTube entry: [https://www.youtube.com/watch?v=prh72BLNjIk The Fairest Sharing Sequence Ever]
*   YouTube entry: [https://www.youtube.com/watch?v=Tt5TTid6YXk Math and OCD - My story with the Thue-Morse sequence]
*   YouTube entry: [https://www.youtube.com/watch?v=Tt5TTid6YXk Math and OCD - My story with the Thue-Morse sequence]
<br><br>
<br><br>


=={{header|Ada}}==
=={{header|Ada}}==
Line 378: Line 378:
0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110
0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>

=={{header|C sharp|C#}}==
{{trans|Java}}
<lang csharp>using System;
using System.Text;

namespace ThueMorse
{
class Program
{
static void Main(string[] args)
{
Sequence(6);
}

public static void Sequence(int steps)
{
var sb1 = new StringBuilder("0");
var sb2 = new StringBuilder("1");
for (int i = 0; i < steps; i++)
{
var tmp = sb1.ToString();
sb1.Append(sb2);
sb2.Append(tmp);
}
Console.WriteLine(sb1);
Console.ReadLine();
}
}
}</lang>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>


=={{header|C++}}==
=={{header|C++}}==
Line 409: Line 440:
0110100110010110100101100110100110010110011010010110100110010110
0110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>

=={{header|C#}}==
{{trans|Java}}
<lang csharp>using System;
using System.Text;

namespace ThueMorse
{
class Program
{
static void Main(string[] args)
{
Sequence(6);
}

public static void Sequence(int steps)
{
var sb1 = new StringBuilder("0");
var sb2 = new StringBuilder("1");
for (int i = 0; i < steps; i++)
{
var tmp = sb1.ToString();
sb1.Append(sb2);
sb2.Append(tmp);
}
Console.WriteLine(sb1);
Console.ReadLine();
}
}
}</lang>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
Line 515: Line 515:
0110100110010110100101100110100110010110011010010110100110010110
0110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>

=={{header|Elena}}==
=={{header|Elena}}==
{{trans|C#}}
{{trans|C#}}
Line 747: Line 748:
}
}
}</lang>
}</lang>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>

=={{header|JavaScript}}==
===ES5===
{{trans|Java}}
<lang JavaScript>(function(steps) {
'use strict';
var i, tmp, s1 = '0', s2 = '1';
for (i = 0; i < steps; i++) {
tmp = s1;
s1 += s2;
s2 += tmp;
}
console.log(s1);
})(6);</lang>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>

===ES6===
<lang JavaScript>(() => {
'use strict';

// THUE MORSE

// thueMorse :: Int -> String
let thueMorse = nCycles => range(1, Math.abs(nCycles))
.reduce(a => a.concat(a.map(x => 1 - x)), [0])
.join('');


// GENERIC FUNCTION

// range :: Int -> Int -> [Int]
let range = (m, n) => Array.from({
length: Math.floor((n - m)) + 1
}, (_, i) => m + i);


// TEST

return thueMorse(6);

// 0110100110010110100101100110100110010110011010010110100110010110

})();
</lang>

{{Out}}
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>


Line 799: Line 847:
6 : 0110100110010110100101100110100110010110011010010110100110010110
6 : 0110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>

=={{header|JavaScript}}==
===ES5===
{{trans|Java}}
<lang JavaScript>(function(steps) {
'use strict';
var i, tmp, s1 = '0', s2 = '1';
for (i = 0; i < steps; i++) {
tmp = s1;
s1 += s2;
s2 += tmp;
}
console.log(s1);
})(6);</lang>
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>

===ES6===
<lang JavaScript>(() => {
'use strict';

// THUE MORSE

// thueMorse :: Int -> String
let thueMorse = nCycles => range(1, Math.abs(nCycles))
.reduce(a => a.concat(a.map(x => 1 - x)), [0])
.join('');


// GENERIC FUNCTION

// range :: Int -> Int -> [Int]
let range = (m, n) => Array.from({
length: Math.floor((n - m)) + 1
}, (_, i) => m + i);


// TEST

return thueMorse(6);

// 0110100110010110100101100110100110010110011010010110100110010110

})();
</lang>

{{Out}}
<pre>0110100110010110100101100110100110010110011010010110100110010110</pre>


=={{header|Lua}}==
=={{header|Lua}}==
Line 979: Line 980:
0110100110010110100101100110100110010110011010010110100110010110
0110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>



=={{header|OCaml}}==
=={{header|OCaml}}==
Line 1,021: Line 1,021:
let () =
let () =
print_endline (sequence 6);</lang>
print_endline (sequence 6);</lang>



=={{header|Pascal}}==
=={{header|Pascal}}==
Line 1,126: Line 1,125:
0110100110010110100101100110100110010110011010010110100110010110
0110100110010110100101100110100110010110011010010110100110010110
</pre>
</pre>

=={{header|Perl 6}}==
{{Works with|rakudo|2018.03}}
First 8 of an infinite sequence
<lang perl6>.say for (0, { '0' ~ @_.join.trans( "01" => "10", :g) } ... *)[^8];</lang>

{{out}}
<pre>0
01
0110
01101001
0110100110010110
01101001100101101001011001101001
0110100110010110100101100110100110010110011010010110100110010110
01101001100101101001011001101001100101100110100101101001100101101001011001101001011010011001011001101001100101101001011001101001
^C</pre>


=={{header|Phix}}==
=={{header|Phix}}==
Line 1,332: Line 1,315:
>>>
>>>
</lang>
</lang>

=={{header|R}}==
=={{header|R}}==
<lang rsplus>
<lang rsplus>
Line 1,370: Line 1,354:
01101001100101101001011001101001
01101001100101101001011001101001
0110100110010110100101100110100110010110011010010110100110010110</pre>
0110100110010110100101100110100110010110011010010110100110010110</pre>

=={{header|Raku}}==
(formerly Perl 6)
{{Works with|rakudo|2018.03}}
First 8 of an infinite sequence
<lang perl6>.say for (0, { '0' ~ @_.join.trans( "01" => "10", :g) } ... *)[^8];</lang>

{{out}}
<pre>0
01
0110
01101001
0110100110010110
01101001100101101001011001101001
0110100110010110100101100110100110010110011010010110100110010110
01101001100101101001011001101001100101100110100101101001100101101001011001101001011010011001011001101001100101101001011001101001
^C</pre>


=={{header|REXX}}==
=={{header|REXX}}==
Line 1,506: Line 1,507:
(0 to 6).foreach(i => println(s"$i : ${thueMorse(i)}"))</lang>
(0 to 6).foreach(i => println(s"$i : ${thueMorse(i)}"))</lang>
{{Out}} See it running in your browser by [https://scastie.scala-lang.org/rsF3Y5ABQoK0zZMMA3m6Ow Scastie (JVM)].
{{Out}} See it running in your browser by [https://scastie.scala-lang.org/rsF3Y5ABQoK0zZMMA3m6Ow Scastie (JVM)].

=={{header|Sidef}}==
=={{header|Sidef}}==
<lang ruby>func recmap(repeat, seed, transform, callback) {
<lang ruby>func recmap(repeat, seed, transform, callback) {