测试未在CodeWars中传递Rspec

时间:2017-08-22 14:03:48

标签: ruby

  

你在这个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

1 个答案:

答案 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