[2016][ruby][14.0]
change oqsuqqlqvpyvxrmuuxwrutryxnmstvqm
commit 15fdf0f359ed67d714962e6afe652191c6f43104
author Alpha Chen <alpha.chen@gmail.com>
date
parent vvrkrzrs
diff --git a/2016/ruby/day_14.rb b/2016/ruby/day_14.rb
new file mode 100644
index 0000000..ed28ea7
--- /dev/null
+++ b/2016/ruby/day_14.rb
@@ -0,0 +1,27 @@
+require 'digest/md5'
+
+class Keys
+  attr_reader :seed, :hash
+
+  def initialize(seed)
+    @seed = seed
+    @hash = Hash.new {|h,k| Digest::MD5.hexdigest("#{seed}#{k}") }
+  end
+
+  def each
+    return enum_for(__method__) unless block_given?
+
+    (0..Float::INFINITY).each do |index|
+      next unless /(.)\1\1/ =~ hash[index]
+
+      needle = $1 * 5
+      stream = (1..1000).map {|i| hash[index + i] }
+      next unless stream.any? {|h| h.include?(needle) }
+
+      yield [index, hash[index]]
+    end
+  end
+end
+
+keys = Keys.new('qzyelonm')
+p keys.each.take(64)