From e695938abf5040f89a4867b04a53e6d3e757146e Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Tue, 6 Dec 2016 22:27:39 -0800 Subject: [PATCH] [2016][ruby][7.1] --- 2016/ruby/day_07.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/2016/ruby/day_07.rb b/2016/ruby/day_07.rb index d712812..ce6c4c7 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'