rules <- list(
white = '^(?!white)(?!black)',
red = 'green',
black = '^(?!white)(?!green)(?!orange)',
orange = 'red|black',
green = 'orange|white',
purple = '^(?!purple)(?!green)(?!orange)(?!white)'
)
parse_wires <- function(input) {
return(strsplit(input, '\n')[[1]])
}
disarm <- function(input, rules) {
wires <- parse_wires(input)
for(i in 1:(length(wires)-1)) {
if(length(grep(rules[wires[i]], wires[i+1], perl=T)) == 0) return('detonated!')
}
return('disarmed!')
}
input1 <- "white
red
green
white"
input2 <- "white
orange
green
white"
cat(paste('First bomb was', disarm(input1, rules)))
cat(paste('Second bomb was', disarm(input2, rules)))
cnVsZXMgPC0gbGlzdCgKICAgIHdoaXRlID0gJ14oPyF3aGl0ZSkoPyFibGFjayknLAogICAgcmVkID0gJ2dyZWVuJywKICAgIGJsYWNrID0gJ14oPyF3aGl0ZSkoPyFncmVlbikoPyFvcmFuZ2UpJywKICAgIG9yYW5nZSA9ICdyZWR8YmxhY2snLAogICAgZ3JlZW4gPSAnb3JhbmdlfHdoaXRlJywKICAgIHB1cnBsZSA9ICdeKD8hcHVycGxlKSg/IWdyZWVuKSg/IW9yYW5nZSkoPyF3aGl0ZSknCikKCnBhcnNlX3dpcmVzIDwtIGZ1bmN0aW9uKGlucHV0KSB7CiAgcmV0dXJuKHN0cnNwbGl0KGlucHV0LCAnXG4nKVtbMV1dKQp9CgpkaXNhcm0gPC0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVzKSB7CiAgd2lyZXMgPC0gcGFyc2Vfd2lyZXMoaW5wdXQpCiAgZm9yKGkgaW4gMToobGVuZ3RoKHdpcmVzKS0xKSkgewogICAgaWYobGVuZ3RoKGdyZXAocnVsZXNbd2lyZXNbaV1dLCB3aXJlc1tpKzFdLCBwZXJsPVQpKSA9PSAwKSByZXR1cm4oJ2RldG9uYXRlZCEnKQogIH0KICByZXR1cm4oJ2Rpc2FybWVkIScpCn0KCmlucHV0MSA8LSAid2hpdGUKcmVkCmdyZWVuCndoaXRlIgoKaW5wdXQyIDwtICJ3aGl0ZQpvcmFuZ2UKZ3JlZW4Kd2hpdGUiCgoKY2F0KHBhc3RlKCdGaXJzdCBib21iIHdhcycsIGRpc2FybShpbnB1dDEsIHJ1bGVzKSkpCmNhdChwYXN0ZSgnU2Vjb25kIGJvbWIgd2FzJywgZGlzYXJtKGlucHV0MiwgcnVsZXMpKSkK