Posted to tcl by kbk at Sat Nov 28 17:58:15 GMT 2009view raw

  1. variable ascA ; scan A %c ascA
  2. proc spreadcol {n} {
  3. variable ascA
  4. set k [expr {int(log(25 * $n + 1)/log(26))}]
  5. set m [expr {$n - ((26 ** $k) - 1) / 25}]
  6. while {$k > 0} {
  7. append r [format %c [expr {$ascA + ($m % 26)}]]
  8. set m [expr {$m / 26}]
  9. incr k -1
  10. }
  11. return [string reverse $r]
  12. }
  13. foreach x [list 1 26 26+1 26*26+26 26*26+26+1 26*26*26+26*26+26 26*26*26+26*26+26+1] {
  14. puts [list $x [expr $x] [spreadcol [expr $x]]]
  15. }

Comments

Posted by kbk at Sat Nov 28 18:10:16 GMT 2009 [text] [code]

variable ascA ; scan A %c ascA proc spreadcol {n} { variable ascA set k [expr {int(log(25 * $n + 1)/log(26))}] set m [expr {$n - ((26 ** $k) - 1) / 25}] while {$k > 0} { append r [format %c [expr {$ascA + ($m % 26)}]] set m [expr {$m / 26}] incr k -1 } return [string reverse $r] } proc parsespreadcol {s} { variable ascA set r 0 foreach c [split $s {}] { scan $c %c d set r [expr {26 * $r + $d - $ascA}] } incr r [expr {(26 ** [string length $s] - 1) / 25}] return $r } foreach x [list 1 26 26+1 26*26+26 26*26+26+1 26*26*26+26*26+26 26*26*26+26*26+26+1] { puts [list $x [expr $x] [set s [spreadcol [expr $x]]] [parsespreadcol $s]] }