1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Passphrase
def initialize(raw)
@raw = raw
end
def valid?
words = @raw.split(/\s+/).map {|word| word.split(//).sort.join }
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?
assert Passphrase.new("abcde fghij").valid?
refute Passphrase.new("abcde xyz ecdab").valid?
assert Passphrase.new("a ab abc abd abf abj").valid?
assert Passphrase.new("iiii oiii ooii oooi oooo").valid?
refute Passphrase.new("oiii ioii iioi iiio").valid?
end
end