46 lines
1.4 KiB
Swift
46 lines
1.4 KiB
Swift
class Josephus {
|
|
|
|
class func lineUp(#numberOfPeople:Int) -> [Int] {
|
|
var people = [Int]()
|
|
for (var i = 0; i < numberOfPeople; i++) {
|
|
people.append(i)
|
|
}
|
|
return people
|
|
}
|
|
|
|
class func execute(#numberOfPeople:Int, spacing:Int) -> Int {
|
|
var killIndex = 0
|
|
var people = self.lineUp(numberOfPeople: numberOfPeople)
|
|
|
|
println("Prisoners executed in order:")
|
|
while (people.count > 1) {
|
|
killIndex = (killIndex + spacing - 1) % people.count
|
|
executeAndRemove(&people, killIndex: killIndex)
|
|
}
|
|
println()
|
|
return people[0]
|
|
}
|
|
|
|
class func executeAndRemove(inout people:[Int], killIndex:Int) {
|
|
print("\(people[killIndex]) ")
|
|
people.removeAtIndex(killIndex)
|
|
}
|
|
|
|
class func execucteAllButM(#numberOfPeople:Int, spacing:Int, save:Int) -> [Int] {
|
|
var killIndex = 0
|
|
var people = self.lineUp(numberOfPeople: numberOfPeople)
|
|
|
|
println("Prisoners executed in order:")
|
|
while (people.count > save) {
|
|
killIndex = (killIndex + spacing - 1) % people.count
|
|
executeAndRemove(&people, killIndex: killIndex)
|
|
}
|
|
println()
|
|
return people
|
|
}
|
|
}
|
|
|
|
println("Josephus is number: \(Josephus.execute(numberOfPeople: 41, spacing: 3))")
|
|
println()
|
|
println("Survivors: \(Josephus.execucteAllButM(numberOfPeople: 41, spacing: 3, save: 3))")
|