34 lines
645 B
Tcl
34 lines
645 B
Tcl
package require struct::list
|
|
|
|
proc swap {listVar} {
|
|
upvar 1 $listVar list
|
|
set n [lindex $list 0]
|
|
for {set i 0; set j [expr {$n-1}]} {$i<$j} {incr i;incr j -1} {
|
|
set tmp [lindex $list $i]
|
|
lset list $i [lindex $list $j]
|
|
lset list $j $tmp
|
|
}
|
|
}
|
|
|
|
proc swaps {list} {
|
|
for {set i 0} {[lindex $list 0] > 1} {incr i} {
|
|
swap list
|
|
}
|
|
return $i
|
|
}
|
|
|
|
proc topswops list {
|
|
set n 0
|
|
::struct::list foreachperm p $list {
|
|
set n [expr {max($n,[swaps $p])}]
|
|
}
|
|
return $n
|
|
}
|
|
|
|
proc topswopsTo n {
|
|
puts "n\ttopswops(n)"
|
|
for {set i 1} {$i <= $n} {incr i} {
|
|
puts $i\t[topswops [lappend list $i]]
|
|
}
|
|
}
|
|
topswopsTo 10
|