[2016][ruby][7.1]
change stxrlplsnotsnpuxzmltyxuqykzxzpkm
commit a3646ac8f361f8e9be932f652a2e1d9615a96b79
author Alpha Chen <alpha.chen@gmail.com>
date
parent uqsrluvv
diff --git a/2016/ruby/day_07.rb b/2016/ruby/day_07.rb
index 50b5f09..bd1d62f 100644
--- a/2016/ruby/day_07.rb
+++ b/2016/ruby/day_07.rb
@@ -3,12 +3,22 @@ def abba?(s)
 end
 
 def tls?(s)
-  hypernets, s = s.split(/\[|\]/).inject([[],[]]) {|n,x| n[0] << x; [n[1], n[0]]}
-  s.any? {|x| abba?(x) } && hypernets.none? {|x| abba?(x) }
+  hypernets, supernets = s.split(/\[|\]/).inject([[],[]]) {|n,x| n[0] << x; [n[1], n[0]]}
+  supernets.any? {|x| abba?(x) } && hypernets.none? {|x| abba?(x) }
+end
+
+def abas(s)
+  s.chars.each_cons(3).select {|a,b,c| (a != b) && (a == c) }
+end
+
+def ssl?(s)
+  hypernets, supernets = s.split(/\[|\]/).inject([[],[]]) {|n,x| n[0] << x; [n[1], n[0]]}
+  abas = supernets.flat_map {|supernet| abas(supernet)}
+  hypernets.any? {|hypernet| abas.any? {|a,b,_| hypernet.include?("#{b}#{a}#{b}") }}
 end
 
 if __FILE__ == $0
-  p DATA.each_line.count {|line| tls?(line) }
+  p DATA.each_line.count {|line| ssl?(line) }
 end
 
 require 'minitest'