Ruby Anagram使用String#sum

Cal*_*ods 2 ruby anagram

我已经解决了一个问题,要求你编写一个方法来确定所提供的数组中的字是字谜,并将字谜分组到输出中的子数组中.

我已经使用看似典型的方式来解决它,通过对单词进行排序并将它们分组为基于排序字符的哈希.

当我最初开始寻找一种方法时,我注意到String#sum存在将每个角色的序数加在一起.

我想尝试一些方法来确定一个基于使用的字谜sum.例如,"汽车"和"疤痕"是字谜,它们sum是425.

给定%w[cars scar for four creams scream racs]输出的预期输出(我已经使用哈希解决方案得到)是:[[cars, scar, racs],[for],[four],[creams,scream]].

看起来好像做了这样的事情:

input.each_with_object(Hash.new []) do |word, hash|
  hash[word.sum] += [word]
end
Run Code Online (Sandbox Code Playgroud)

是一种方法,它给你一个哈希,其中键"425"的值是['cars','racs','scar'].我认为我缺少的是将其转换为预期的输出格式.

And*_*man 17

不幸的是,我不认为这String#sum是解决这个问题的有力方法.

考虑:

"zaa".sum # => 316
"yab".sum # => 316
Run Code Online (Sandbox Code Playgroud)

相同的总和,但不是字谜.

相反,如何按字符的排序顺序对它们进行分组?

words = %w[cars scar for four creams scream racs]

anagrams = words.group_by { |word| word.chars.sort }.values
# => [["cars", "scar", "racs"], ["for"], ["four"], ["creams", "scream"]] 
Run Code Online (Sandbox Code Playgroud)