def bomb_check(input)
check=""
input.each { |wire|
check.insert(-1, wire[0])
}
pat = /(((wwr)*(rr)*)*(wwb|rb|wo)b*(og|go))/
unless pat.match(check).nil?
if pat.match(check)[0] == check
return "Bomb defused"
else
return "Explodes!"
end
else
return "Explodes!"
end
end
def defusable?(input)
c = Hash.new(0)
input.each { |wire|
x = wire.split(" ")
c[x[0][0]] = x[1].to_i
}
s1, s2, s3 = Hash.new(0), Hash.new(0), Hash.new(0)
s1["w"], s1["b"], s1["r"], s1["o"], s1["g"] = c["w"]-2, c["b"]-1, c["r"], c["o"]-1, c["g"]-1
s2["w"], s2["b"], s2["r"], s2["o"], s2["g"] = c["w"], c["b"]-1, c["r"]-1, c["o"]-1, c["g"]-1
s3["w"], s3["b"], s3["r"], s3["o"], s3["g"] = c["w"]-1, c["b"], c["r"], c["o"]-2, c["g"]-1
def zeroedHash?(hash)
zeroed = true
hash.each_value { |val|
unless val == 0
zeroed = false
end
}
return zeroed
end
def sn_check(sn)
checks = false
unless sn["b"] < 0
an = sn["w"] / 2
cn = sn["r"] / 2
sn["b"] = 0
test_a = []
(0..an).each { |i|
(0..cn).each { |j|
test_a.push([i,j])
}
}
test_a.each { |iteration|
temp = sn
temp["w"] -= iteration[0]*2
temp["r"] -= iteration[0] + iteration[1]*2
if zeroedHash?(temp)
checks = true
end
}
else
checks = false
end
return checks
end
sn_check(s1) || sn_check(s2) || sn_check(s3) ? (return "Defusable") : (return "Not defuseable")
end
#I'm using shorthand, but this will also work for white instead of w, red instead of r and e.t.c
puts "Challenge:"
print 'Example1: ', bomb_check(["w", "w", "r", "w", "o", "b", "b", "g", "o"]), "\n"
print 'Example2: ', bomb_check(["w", "w", "g", "o", "g"]), "\n"
print 'Challenge1: ', bomb_check(["w", "w", "r", "r", "r", "w", "w", "b", "g", "o"]), "\n"
print 'Challenge2: ', bomb_check(["w", "b", "b", "b", "b", "g", "o"]), "\n"
print 'Challenge3: ', bomb_check(["b", "g", "g"]), "\n"
print 'Challenge4: ', bomb_check(["r", "r", "w", "o", "b", "g"]), "\n"
puts ""
puts "Bonus:"
print 'Example1: ', defusable?(["white 4", "red 3", "black 4", "green 1", "orange 1"]), "\n"
print 'Example2: ', defusable?(["white 4", "red 3", "black 4", "green 0", "orange 1"]), "\n"
print 'Input1: ', defusable?(["white 3", "red 1", "black 48", "green 1", "orange 2"]), "\n"
print 'Input2: ', defusable?(["white 3", "red 1", "black 48", "green 1", "orange 1"]), "\n"
ZGVmIGJvbWJfY2hlY2soaW5wdXQpCgljaGVjaz0iIgoJaW5wdXQuZWFjaCB7IHx3aXJlfAoJCWNoZWNrLmluc2VydCgtMSwgd2lyZVswXSkKCX0KCXBhdCA9IC8oKCh3d3IpKihycikqKSood3difHJifHdvKWIqKG9nfGdvKSkvCgl1bmxlc3MgcGF0Lm1hdGNoKGNoZWNrKS5uaWw/CgkJaWYgcGF0Lm1hdGNoKGNoZWNrKVswXSA9PSBjaGVjawoJCQlyZXR1cm4gIkJvbWIgZGVmdXNlZCIKCQllbHNlCgkJCXJldHVybiAiRXhwbG9kZXMhIgoJCWVuZAoJZWxzZQoJCXJldHVybiAiRXhwbG9kZXMhIgoJZW5kCmVuZAoKZGVmIGRlZnVzYWJsZT8oaW5wdXQpCgljID0gSGFzaC5uZXcoMCkKCWlucHV0LmVhY2ggeyB8d2lyZXwKCQl4ID0gd2lyZS5zcGxpdCgiICIpCgkJY1t4WzBdWzBdXSA9IHhbMV0udG9faQoJfQoKCXMxLCBzMiwgczMgPSBIYXNoLm5ldygwKSwgSGFzaC5uZXcoMCksIEhhc2gubmV3KDApCglzMVsidyJdLCBzMVsiYiJdLCBzMVsiciJdLCBzMVsibyJdLCBzMVsiZyJdID0gY1sidyJdLTIsIGNbImIiXS0xLCBjWyJyIl0sIGNbIm8iXS0xLCBjWyJnIl0tMQoJczJbInciXSwgczJbImIiXSwgczJbInIiXSwgczJbIm8iXSwgczJbImciXSA9IGNbInciXSwgY1siYiJdLTEsIGNbInIiXS0xLCBjWyJvIl0tMSwgY1siZyJdLTEKCXMzWyJ3Il0sIHMzWyJiIl0sIHMzWyJyIl0sIHMzWyJvIl0sIHMzWyJnIl0gPSBjWyJ3Il0tMSwgY1siYiJdLCBjWyJyIl0sIGNbIm8iXS0yLCBjWyJnIl0tMQoKCWRlZiB6ZXJvZWRIYXNoPyhoYXNoKQoJCXplcm9lZCA9IHRydWUKCQloYXNoLmVhY2hfdmFsdWUgeyB8dmFsfAoJCQl1bmxlc3MgdmFsID09IDAKCQkJCXplcm9lZCA9IGZhbHNlCgkJCWVuZAoJCX0JCgkJcmV0dXJuIHplcm9lZAoJZW5kCQoJZGVmIHNuX2NoZWNrKHNuKQoJCWNoZWNrcyA9IGZhbHNlCgkJdW5sZXNzIHNuWyJiIl0gPCAwCgkJCWFuID0gc25bInciXSAvIDIgCgkJCWNuICA9IHNuWyJyIl0gLyAyIAoJCQlzblsiYiJdID0gMAoJCQl0ZXN0X2EgPSBbXQoJCQkoMC4uYW4pLmVhY2ggeyB8aXwKCQkJCSgwLi5jbikuZWFjaCB7IHxqfAoJCQkJCXRlc3RfYS5wdXNoKFtpLGpdKQoJCQkJfQoJCQl9CgkJCXRlc3RfYS5lYWNoIHsgfGl0ZXJhdGlvbnwKCQkJCQl0ZW1wID0gc24KCQkJCQl0ZW1wWyJ3Il0gLT0gaXRlcmF0aW9uWzBdKjIKCQkJCQl0ZW1wWyJyIl0gLT0gaXRlcmF0aW9uWzBdICsgaXRlcmF0aW9uWzFdKjIJCgkJCQkJaWYgemVyb2VkSGFzaD8odGVtcCkKCQkJCQkJY2hlY2tzID0gdHJ1ZQoJCQkJCWVuZAoJCQl9CgkJZWxzZQoJCQljaGVja3MgPSBmYWxzZQoJCWVuZAoJCXJldHVybiBjaGVja3MKCWVuZAoJc25fY2hlY2soczEpIHx8IHNuX2NoZWNrKHMyKSB8fCBzbl9jaGVjayhzMykgPyAocmV0dXJuICJEZWZ1c2FibGUiKSA6IChyZXR1cm4gIk5vdCBkZWZ1c2VhYmxlIikKCmVuZAoKI0knbSB1c2luZyBzaG9ydGhhbmQsIGJ1dCB0aGlzIHdpbGwgYWxzbyB3b3JrIGZvciB3aGl0ZSBpbnN0ZWFkIG9mIHcsIHJlZCBpbnN0ZWFkIG9mIHIgYW5kIGUudC5jCnB1dHMgIkNoYWxsZW5nZToiCnByaW50ICdFeGFtcGxlMTogJywgYm9tYl9jaGVjayhbInciLCAidyIsICJyIiwgInciLCAibyIsICJiIiwgImIiLCAiZyIsICJvIl0pLCAiXG4iCnByaW50ICdFeGFtcGxlMjogJywgYm9tYl9jaGVjayhbInciLCAidyIsICJnIiwgIm8iLCAiZyJdKSwgIlxuIgpwcmludCAnQ2hhbGxlbmdlMTogJywgYm9tYl9jaGVjayhbInciLCAidyIsICJyIiwgInIiLCAiciIsICJ3IiwgInciLCAiYiIsICJnIiwgIm8iXSksICJcbiIKcHJpbnQgJ0NoYWxsZW5nZTI6ICcsIGJvbWJfY2hlY2soWyJ3IiwgImIiLCAiYiIsICJiIiwgImIiLCAiZyIsICJvIl0pLCAiXG4iCnByaW50ICdDaGFsbGVuZ2UzOiAnLCBib21iX2NoZWNrKFsiYiIsICJnIiwgImciXSksICJcbiIKcHJpbnQgJ0NoYWxsZW5nZTQ6ICcsIGJvbWJfY2hlY2soWyJyIiwgInIiLCAidyIsICJvIiwgImIiLCAiZyJdKSwgIlxuIgpwdXRzICIiCnB1dHMgIkJvbnVzOiIKcHJpbnQgJ0V4YW1wbGUxOiAnLCBkZWZ1c2FibGU/KFsid2hpdGUgNCIsICJyZWQgMyIsICJibGFjayA0IiwgImdyZWVuIDEiLCAib3JhbmdlIDEiXSksICJcbiIKcHJpbnQgJ0V4YW1wbGUyOiAnLCBkZWZ1c2FibGU/KFsid2hpdGUgNCIsICJyZWQgMyIsICJibGFjayA0IiwgImdyZWVuIDAiLCAib3JhbmdlIDEiXSksICJcbiIKcHJpbnQgJ0lucHV0MTogJywgZGVmdXNhYmxlPyhbIndoaXRlIDMiLCAicmVkIDEiLCAiYmxhY2sgNDgiLCAiZ3JlZW4gMSIsICJvcmFuZ2UgMiJdKSwgIlxuIgpwcmludCAnSW5wdXQyOiAnLCBkZWZ1c2FibGU/KFsid2hpdGUgMyIsICJyZWQgMSIsICJibGFjayA0OCIsICJncmVlbiAxIiwgIm9yYW5nZSAxIl0pLCAiXG4i