你在这个kata中的任务是实现一个函数,给定一个pepes列表(
pepes
),返回列表中最稀有的pepe。如果两个或多个pepe同样罕见,则返回这些pepe的列表,按字母顺序排序。此外,如果最稀有的pepe(或pepes)的频率为5或更高,那么它实际上并不是一种罕见的pepe,因此你的函数应该返回'No rare pepes!'
。
我有我的代码:
def find_rarest_pepe(pepes)
x = pepes.select {|x| pepes.count(x) == 1}.sort
if x.count == 1
return x.join
elsif
x.count >= 2
return x
else
return "No rare pepes!"
end
end
但是,我在这里做错了什么?
材料:https://www.codewars.com/kata/the-rarest-pepe/train/ruby
答案 0 :(得分:3)
你应该根据出现次数对独特的pepe进行排序,然后计算最稀有(第一)pepe的数量并选择所有具有此数量的pepe:
def find_rarest_pepe(pepes)
return 'No rare pepes!' if pepes.empty?
sorted_pepes = pepes.uniq.map { |pepe| [pepe, pepes.count(pepe)] }.sort_by(&:last)
rarest_pepe_count = sorted_pepes[0][1]
return 'No rare pepes!' if rarest_pepe_count >= 5
rarest_pepes = sorted_pepes.select { |_, pepe_count| pepe_count == rarest_pepe_count }
rarest_pepes = rarest_pepes.map(&:first).sort
rarest_pepes = rarest_pepes[0] if rarest_pepes.count == 1
rarest_pepes
end