package require Tcl 8.6 proc abc {word {blocks {BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM}}} { set abc {{letters blocks abc} { set rest [lassign $letters ch] set i 0 foreach blk $blocks { if {$ch in $blk && (![llength $rest] || [apply $abc $rest [lreplace $blocks $i $i] $abc])} { return true } incr i } return false }} return [apply $abc [split $word ""] [lmap b $blocks {split $b ""}] $abc] } foreach word {"" A BARK BOOK TREAT COMMON SQUAD CONFUSE} { puts [format "Can we spell %9s? %s" '$word' [abc $word]] }