15 lines
452 B
Tcl
15 lines
452 B
Tcl
proc josephus {number step {survivors 1}} {
|
|
for {set i 0} {$i<$number} {incr i} {lappend l $i}
|
|
for {set i 1} {[llength $l]} {incr i} {
|
|
# If the element is to be killed, append to the kill sequence
|
|
if {$i%$step == 0} {
|
|
lappend killseq [lindex $l 0]
|
|
set l [lrange $l 1 end]
|
|
} else {
|
|
# Roll the list
|
|
set l [concat [lrange $l 1 end] [list [lindex $l 0]]]
|
|
}
|
|
}
|
|
return [lrange $killseq end-[expr {$survivors-1}] end]
|
|
}
|