Тестирование на панграмму - PullRequest
0 голосов
/ 10 октября 2018

Я видел способ проверить, является ли строка панграммой - предложением, содержащим каждую букву алфавита - но я не совсем понял это.Я хочу знать, почему мой путь не работает.

def is_pangram(string)

  alpha = ("a".."z").to_a
  i = 0
  while i < string.length
    if string.downcase[i] == alpha.any? 
        alpha.delete(string.downcase[i])
    end
    i += 1
  end

  if alpha.length > 0
    puts "This string is not a pangram"
  else
    puts "This string is a pangram"
  end

  puts alpha.length
  puts alpha
end

is_pangram("The quick brown fox jumps over the lazy dog")

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

но я не совсем понял

(Предполагаемый) алгоритм строит массив, содержащий все (26) букв алфавита.Затем он обрабатывает строку, символ за символом, удаляя этот символ из первого массива (если он все еще там).После этого он просто проверяет, является ли первый массив пустым.Если это так, символы в строке привели к удалению всех символов в массиве, и строка, таким образом, является панграммой.Если нет, какой-то символ «пропал» в строке, и этот символ все еще находится в массиве.

0 голосов
/ 10 октября 2018

Как насчет следующего?

def is_pangram?(str)
  str.downcase.scan(/[a-z]/).uniq.size == 26
end

is_pangram? "The quick brown dog jumps over the lazy fox."
  #=> true
is_pangram? "The quick brown dog jumps over the wary fox."
  #=> false
0 голосов
/ 10 октября 2018

Алексей уже ответил на вопрос ... вот немного более чистый способ сделать это.

def is_pangram(string)

  alpha = ("a".."z").to_a
  string.downcase.split("").each do |i|
    alpha.delete(i) if alpha.include?(i)
  end

  if alpha.empty?
    puts "This string is a pangram"
  else
    puts "This string is not a pangram"
  end

  puts alpha.length
  puts alpha
end

is_pangram("The quick brown fox jumps over the lazy dog")
...