#!/usr/local/bin/tclsh8.6 set in "pbga (66) xhth (57) ebii (61) havc (66) ktlj (57) fwft (72) -> ktlj, cntj, xhth qoyq (66) padx (45) -> pbga, havc, qoyq tknk (41) -> ugml, padx, fwft jptl (61) ugml (68) -> gyxo, ebii, jptl gyxo (61) cntj (57)" proc Solve {in} { set all {} set dropped {} foreach line [split $in \n] { set words [split $line] lappend all [lindex $words 0] foreach word [lrange $words 3 end] { lappend dropped [string trimright $word ,] } } set all [lsort -unique -dictionary $all] set dropped [lsort -unique -dictionary $dropped] foreach a $all d $dropped { if {$a ne $d} { return $a } } } puts "solution is [Solve $in]"