Как проверить наличие панграмм в строке в 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