Ruby Count Smiley Face - Код выхода = 1 - PullRequest
0 голосов
/ 19 сентября 2018

Вопрос о смайлике на Codewars, мои коды прошли все тесты, но появляется сообщение об ошибке «Exit Code = 1», что это значит?Что пошло не так?

countSmileys([':)', ';(', ';}', ':-D']);       // should return 2;
countSmileys([';D', ':-(', ':-)', ';~)']);     // should return 3;
countSmileys([';]', ':[', ';*', ':$', ';-D']); // should return 1;

    def count_smileys(arr)
      first = ";:"
      second = "-~"
      third = ")D"
      arr.select{|x|
        third.include?(x[1]) or (second.include?(x[1]) && third.include?(x[2].to_s)) 
      }.count
    end

РЕДАКТИРОВАТЬ: Сообщение об ошибке, как показано ниже:

main.rb:8:in `include?': no implicit conversion of nil into String (TypeError)
    from main.rb:8:in `block in count_smileys'
    from main.rb:7:in `select'
    from main.rb:7:in `count_smileys'
    from main.rb:16:in `block in <main>'
    from /runner/frameworks/ruby/cw-2.rb:55:in `block in describe'
    from /runner/frameworks/ruby/cw-2.rb:46:in `measure'
    from /runner/frameworks/ruby/cw-2.rb:51:in `describe'
    from main.rb:11:in `<main>'

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я понял, в чем проблема - есть тест count_smileys([";", ")", ";*", ":$", "8-D"]), где x [1] и x [2] не будут действительными для первых 2 элементов в массиве, поэтому мне нужно исправить массив внутри selectМетод:

def count_smileys(arr)
  first = ";:"
  second = "-~"
  third = ")D"
  arr.select{|x|
    x[1] = " " if x[1] == nil
    x[2] = "" if x[2] == nil
    (first.include?(x[0]) && third.include?(x[1])) || (first.include?(x[0]) && second.include?(x[1]) && third.include?(x[2])) 
  }.count
end

Джозеф Чо был прав в том смысле, что нужно преобразовать nils, но мы должны сделать это в итерации, и обычные элементы x [1] должны быть установлены в пустую строку спробел, чтобы избежать подсчета, в то время как x [2] достаточно редко, чтобы работала пустая строка.

0 голосов
/ 20 сентября 2018

Как описано в сообщении, не существует неявного преобразования nil в строку.Явное существует, однако:

2.3.1 :001 > nil.to_s
=> "" 

Вы можете сначала проанализировать ваш массив для nil, а затем поместить его с помощью метода select.

def count_smileys(arr)
  first = ";:"
  second = "-~"
  third = ")D"

  # parse your array for nil values here
  arr.map {|x| x.nil? ? "" : x }

  arr.select{|x|
    third.include?(x[1]) or (second.include?(x[1]) && third.include?(x[2].to_s)) 
  }.count
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...