Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
73
Task/Stern-Brocot-sequence/Wren/stern-brocot-sequence.wren
Normal file
73
Task/Stern-Brocot-sequence/Wren/stern-brocot-sequence.wren
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
import "/math" for Int
|
||||
import "/fmt" for Fmt
|
||||
|
||||
var sbs = [1, 1]
|
||||
|
||||
var sternBrocot = Fn.new { |n, fromStart|
|
||||
if (n < 4 || (n % 2 != 0)) Fiber.abort("n must be >= 4 and even.")
|
||||
var consider = fromStart ? 1 : (n/2).floor - 1
|
||||
while (true) {
|
||||
var sum = sbs[consider] + sbs[consider - 1]
|
||||
sbs.add(sum)
|
||||
sbs.add(sbs[consider])
|
||||
if (sbs.count == n) return
|
||||
consider = consider + 1
|
||||
}
|
||||
}
|
||||
|
||||
var n = 16 // needs to be even to ensure 'considered' number is added
|
||||
System.print("First 15 members of the Stern-Brocot sequence:")
|
||||
sternBrocot.call(n, true)
|
||||
System.print(sbs.take(15).toList)
|
||||
|
||||
var firstFind = List.filled(11, 0)
|
||||
firstFind[0] = -1 // needs to be non-zero for subsequent test
|
||||
var i = 0
|
||||
for (v in sbs) {
|
||||
if (v <= 10 && firstFind[v] == 0) firstFind[v] = i + 1
|
||||
i = i + 1
|
||||
}
|
||||
while (true) {
|
||||
n = n + 2
|
||||
sternBrocot.call(n, false)
|
||||
var vv = sbs[-2..-1]
|
||||
var m = n - 1
|
||||
var outer = false
|
||||
for (v in vv) {
|
||||
if (v <= 10 && firstFind[v] == 0) firstFind[v] = m
|
||||
if (firstFind.all { |e| e != 0 }) {
|
||||
outer = true
|
||||
break
|
||||
}
|
||||
m = m + 1
|
||||
}
|
||||
if (outer) break
|
||||
}
|
||||
System.print("\nThe numbers 1 to 10 first appear at the following indices:")
|
||||
for (i in 1..10) Fmt.print("$2d -> $d", i, firstFind[i])
|
||||
|
||||
System.write("\n100 first appears at index ")
|
||||
while (true) {
|
||||
n = n + 2
|
||||
sternBrocot.call(n, false)
|
||||
var vv = sbs[-2..-1]
|
||||
if (vv[0] == 100) {
|
||||
System.print("%(n - 1).")
|
||||
break
|
||||
}
|
||||
if (vv[1] == 100) {
|
||||
System.print("%(n).")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
System.write("\nThe GCDs of each pair of the series up to the 1,000th member are ")
|
||||
var p = 0
|
||||
while (p < 1000) {
|
||||
if (Int.gcd(sbs[p], sbs[p + 1]) != 1) {
|
||||
System.print("not all one.")
|
||||
return
|
||||
}
|
||||
p = p + 2
|
||||
}
|
||||
System.print("all one.")
|
||||
Loading…
Add table
Add a link
Reference in a new issue