Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
32
Task/Josephus-problem/Wren/josephus-problem.wren
Normal file
32
Task/Josephus-problem/Wren/josephus-problem.wren
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
var josephus = Fn.new { |n, k, m|
|
||||
if (k <= 0 || m <= 0 || n <= k || n <= m) Fiber.abort("One or more parameters are invalid.")
|
||||
var killed = []
|
||||
var survived = List.filled(n, 0)
|
||||
for (i in 0...n) survived[i] = i
|
||||
var start = k - 1
|
||||
while (true) {
|
||||
var end = survived.count - 1
|
||||
var i = start
|
||||
var deleted = 0
|
||||
while (i <= end) {
|
||||
killed.add(survived.removeAt(i-deleted))
|
||||
if (survived.count == m) return [survived, killed]
|
||||
deleted = deleted + 1
|
||||
i = i + k
|
||||
}
|
||||
start = i - end - 1
|
||||
}
|
||||
return [survived, killed]
|
||||
}
|
||||
|
||||
var triples = [ [5, 2, 1], [41, 3, 1], [41, 3, 3] ]
|
||||
for (triple in triples) {
|
||||
var n = triple[0]
|
||||
var k = triple[1]
|
||||
var m = triple[2]
|
||||
System.print("Prisoners = %(n), Step = %(m), Survivors = %(m)")
|
||||
var sk = josephus.call(n, k, m)
|
||||
System.print("Survived : %(sk[0])")
|
||||
System.print("Kill order : %(sk[1])")
|
||||
System.print()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue