Вернуть циклы for и распечатать текстовый файл

Я пробую код, который откроет файл, когда метод for - loop будет генерировать буквы, и когда эти буквы будут объединены вместе и сформировать "abcd", это вернет скрипт и напечатает текстовый файл. Я пробовал разные возможности, но на данный момент смог остановить сценарий и напечатать все время письма, а также распечатать файл. Но никогда не удавалось заставить все работать вместе.

def words(target)
  filename = ARGV.first

 txt = open(filename)

  ('a'..'z').each do |i|
    ('a'..'z').each do |j|
      ('a'..'z').each do |h|
        ('a'..'z').each do |g|

   together = i+j+h+g
   print together

case together
 when together == target
  return print txt.read

           end
         end
       end
     end
   end
 end

words("abcd")

Заранее спасибо.

2 ответа

Решение

Это не как case работает, вы должны использовать if вместо:

def words(target)
  filename = ARGV.first

 txt = open(filename)

  ('a'..'z').each do |i|
    ('a'..'z').each do |j|
      ('a'..'z').each do |h|
        ('a'..'z').each do |g|
          together = i+j+h+g
          print together

          if together == target
            return print txt.read
          end
        end
      end
    end
  end
end

words("abcd")

Или, если вы настаиваете на использовании case (по какой-то причине):

case together
  when target
    return print txt.read
end
('a'..'z').
  to_a.
  repeated_permutation(4).
  map(&:join).
  detect { |w| w == target }
Другие вопросы по тегам