Sturmian word: Difference between revisions
Content added Content deleted
(Added Phix) |
(Added Wren) |
||
Line 112: | Line 112: | ||
# 01001010010010100101001001010010 |
# 01001010010010100101001001010010 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|Wren}}== |
|||
{{trans|Python}} |
|||
{{libheader|Wren-assert}} |
|||
For rational numbers m / n: |
|||
<syntaxhighlight lang="wren">import "./assert" for Assert |
|||
var SturmianWord = Fn.new { |m, n| |
|||
if (m > n) return SturmianWord.call(n, m).reduce("") { |acc, c| |
|||
return acc + (c == "0" ? "1" : "0") |
|||
} |
|||
var sturmian = "" |
|||
var k = 1 |
|||
while (k * m % n != 0) { |
|||
var currFloor = (k * m / n).floor |
|||
var prevFloor = ((k - 1) * m / n).floor |
|||
sturmian = sturmian + (prevFloor == currFloor ? "0" : "10") |
|||
k = k + 1 |
|||
} |
|||
return sturmian |
|||
} |
|||
var fibWord = Fn.new { |n| |
|||
var sn1 = "0" |
|||
var sn = "01" |
|||
for (i in 2..n) { |
|||
var tmp = sn |
|||
sn = sn + sn1 |
|||
sn1 = tmp |
|||
} |
|||
return sn |
|||
} |
|||
var fib = fibWord.call(10) |
|||
var sturmian = SturmianWord.call(13, 21) |
|||
Assert.equal(fib[0...sturmian.count], sturmian) |
|||
System.print(sturmian)</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
01001010010010100101001001010010 |
|||
</pre> |