Sturmian word: Difference between revisions
Content added Content deleted
(→{{header|Phix}}: added cfck()) |
(→{{header|Wren}}: Modified to deal with Sturmian words derived from quadratric as well as rational numbers.) |
||
Line 133:
=={{header|Wren}}==
{{libheader|Wren-assert}}
The 'rational number' function is a translation of the Python entry.
The 'quadratic number' function is a modified version of the one used in the [[Continued fraction convergents]] task.
<syntaxhighlight lang="wren">import "./assert" for Assert
var
if (m > n) return
return acc + (c == "0" ? "1" : "0")
}
Line 151 ⟶ 152:
}
return sturmian
}
var SturmianWordQuad = Fn.new { |a, b, m, n, k|
var p = [0, 1]
var q = [1, 0]
var rem = (a.sqrt * b + m) / n
for (i in 1..k) {
var whole = rem.truncate
var frac = rem.fraction
var pn = whole * p[-1] + p[-2]
var qn = whole * q[-1] + q[-2]
p.add(pn)
q.add(qn)
rem = 1 / frac
}
return SturmianWordRat.call(p[-1], q[-1])
}
Line 165 ⟶ 182:
var fib = fibWord.call(10)
var sturmian =
Assert.equal(fib[0...sturmian.count], sturmian)
System.print("%(sturmian)
var sturmian2 = SturmianWordQuad.call(5, 1, -1, 2, 8)
Assert.equal(sturmian, sturmian2)
System.print("%(sturmian2) from quadratic number (√5 - 1)/2 (k = 8)")</syntaxhighlight>
{{out}}
<pre>
01001010010010100101001001010010 from rational number 13/21
01001010010010100101001001010010 from quadratic number (√5 - 1)/2 (k = 8)
</pre>
|