diff --git a/2017/ruby/day_04.rb b/2017/ruby/day_04.rb
new file mode 100644
index 0000000..e41ec5e
--- /dev/null
+++ b/2017/ruby/day_04.rb
@@ -0,0 +1,24 @@
+class Passphrase
+ def initialize(raw)
+ @raw = raw
+ end
+
+ def valid?
+ words = @raw.split(/\s+/)
+ words.uniq.size == words.size
+ end
+end
+
+# require "minitest/autorun"
+if $0 == __FILE__
+ p ARGF.read.split("\n").map {|line| Passphrase.new(line) }.select(&:valid?).size
+end
+
+require "minitest"
+class TestPassphrase < Minitest::Test
+ def test_valid
+ assert Passphrase.new("aa bb cc dd ee").valid?
+ refute Passphrase.new("aa bb cc dd aa").valid?
+ assert Passphrase.new("aa bb cc dd aaa").valid?
+ end
+end