From 0a29864ab926eb34816a1c4aab1428529799ae9d Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 14 Dec 2016 08:20:58 -0800 Subject: [PATCH] [2016][ruby][14.0] --- 2016/ruby/day_14.rb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 2016/ruby/day_14.rb 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)