Anagrams: Difference between revisions

Content added Content deleted
(added perl)
No edit summary
Line 275: Line 275:
>>> anagram = defaultdict(list) # map sorted chars to anagrams
>>> anagram = defaultdict(list) # map sorted chars to anagrams
>>> for word in words:
>>> for word in words:
anagram[str(sorted(word))].append( word )
anagram[tuple(sorted(word))].append( word )


Line 284: Line 284:


['caret', 'carte', 'cater', 'crate', 'trace']
['angel', 'angle', 'galen', 'glean', 'lange']
['alger', 'glare', 'lager', 'large', 'regal']
['alger', 'glare', 'lager', 'large', 'regal']
['caret', 'carte', 'cater', 'crate', 'trace']
['evil', 'levi', 'live', 'veil', 'vile']
['evil', 'levi', 'live', 'veil', 'vile']
['angel', 'angle', 'galen', 'glean', 'lange']
['elan', 'lane', 'lean', 'lena', 'neal']
['elan', 'lane', 'lean', 'lena', 'neal']
['abel', 'able', 'bale', 'bela', 'elba']
['abel', 'able', 'bale', 'bela', 'elba']
Line 300: Line 300:
anagram = Hash.new {|hash, key| hash[key] = []}
anagram = Hash.new {|hash, key| hash[key] = []}
for word in words
for word in words
anagram[word.split('').sort.to_s] << word
anagram[word.split('').sort] << word
end
end


Line 310: Line 310:
end</ruby>
end</ruby>
Output:
Output:
["caret", "carte", "cater", "crate", "trace"]
["evil", "levi", "live", "veil", "vile"]
["evil", "levi", "live", "veil", "vile"]
["elan", "lane", "lean", "lena", "neal"]
["abel", "able", "bale", "bela", "elba"]
["abel", "able", "bale", "bela", "elba"]
["angel", "angle", "galen", "glean", "lange"]
["elan", "lane", "lean", "lena", "neal"]
["alger", "glare", "lager", "large", "regal"]
["alger", "glare", "lager", "large", "regal"]
["angel", "angle", "galen", "glean", "lange"]
["caret", "carte", "cater", "crate", "trace"]