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)))
