Posted to tcl by kostix at Sun Aug 24 23:17:10 GMT 2008view raw
- proc foo text {
- set words [list]
- set pos 0
- while {[regexp -indices -start $pos {[^[:punct:]\s]+} $text match]} {
- lappend words $match
- lassign $match -> pos; incr pos
- }
- set nwords [llength $words]
- array set seen {}
- set out $text
- for {set i 0} {$i <= int(rand() * $nwords)} {incr i} {
- while 1 {
- set ix [expr {int(rand() * $nwords)}]
- if {![info exists seen($ix)]} break
- }
- set seen($ix) yo!
- lassign [lindex $words $ix] a b
- set out [string replace $out $a $b [string repeat * [expr {$b - $a + 1}]]]
- }
- set out
- }