RosettaCodeData/Task/Josephus-problem/Tcl/josephus-problem-1.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]
}