Back to warming exercises on Day 4. Our input contains passwords and we need to tell how many valid passwords there are. Password is valid if it does not contain duplicated words.
data = File.readlines("4.txt", chomp: true)
def valid?(password)
  words = password.split(" ")
  counts = {}
  words.each do |word|
    if counts[word]
      return false
    end
    counts[word] = true
  end
  true
end
puts data.select { |password| valid?(password) }.size
In the second part password is valid if it does not contain two words that are anagrams. To check if words are anagrams we can sort their characters and see if they are equal.
data = File.readlines("4.txt", chomp: true)
def valid?(password)
  words = password.split(" ")
  counts = {}
  words.each do |word|
    base = word.split("").sort.join
    if counts[base]
      return false
    end
    counts[base] = true
  end
  true
end
puts data.select { |password| valid?(password) }.size