Как проверить наличие панграмм в строке в ruby?

Некоторые из вас могут заметить, что я уже вернулся с тем же болезненным кодом. Я не уверен, что другой вопрос все еще открыт или нет, как только я приму ответ.

Теперь проблема немного проще. Я нашел код, который проверил на панграммы. Раньше было def pangram?('Предложение'), но мне нужно было ввести строку, поэтому я попытался изменить ее на def pangram (строка). Кажется, он плохо сочетается с моим стилем кодирования и не работает. Я попытался использовать.contain('a' . '' Z '), чтобы проверить панграмму, но кто-то из моих знакомых попробовал это, и это не сработало. Кроме того, Google не очень помогает.

Любые идеи о том, как я могу проверить панграммы в случае если stmt?

# To change this template, choose Tools | Templates
# and open the template in the editor
# This program reads a file line by line,
#separating lines by writing into certain text files.
#PPQ - Pangrams, Palindromes, and Quotes
class PPQ
  def pangram?(line)
    unused_letters = ('a'..'z').to_a - line.downcase.chars.to_a
    unused_letters.empty?
  end
  def categorize
    file_pangram = File.new('pangram.txt', 'w')
    file_palindrome = File.new('palindrome.txt', 'w')
    file_quotes = File.new('quotes.txt','w')
    File.open('ruby1.txt','r') do |file|
      while line = file.gets
        if(line.reverse == line)
          file_palindrome.write line
        elsif(pangram?(line)== true)
          file_pangram.write line
        else
          file_quotes.write line
        end
      end
    end
    file.close
    file_pangram.close
    file_palindrome.close
    file_quotes.close
   end
end
my_ruby_assignment = PPQ.new
my_ruby_assignment.categorize

2 ответа

Я неравнодушен к более простому синтаксису, что-то вроде

def pangram?(line)
  ('a'..'z').all? { |word| line.downcase.include? (word) }
end

if pangram?(line) then file_pangram.write line end
      def pangram?(string)
  str = string.chars.map(&:downcase)
  letters =('a'..'z').to_a
  result = true
  letters.each do |l|
    if !(str.include? l.downcase)
      result = false
      break
    end
  end

  result
end
Другие вопросы по тегам