#!/usr/local/bin/tclsh8.6 proc GetNext {in} { set m [lindex $in 0] set n 0 set L [llength $in] for {set i 1} {$i < $L} {incr i} { if {[lindex $in $i] <= $m} {continue} set m [lindex $in $i] set n $i } set d [expr {$m / $L}] set r [expr {$m % $L}] set out $in lset out $n 0 for {set i 0} {$i < $L} {incr i} {lset out $i [expr {[lindex $out $i] + $d}]} for {set i $n} {$r > 0} {incr r -1} { set i [expr {($i + 1) % $L}] lset out $i [expr {[lindex $out $i] + 1}] } return $out } proc Solve {in} { set i 0 set a($in) 1 while {1} { incr i 1 set in [GetNext $in] if {[info exists a($in)]} { return $i } set a($in) 1 } } set in {0 2 7 0} puts [Solve $in]