0

I'm currently learning PHP (beginner to programming) and am stuck trying to find a solution for the following basic problem...

It's a "bomb defuse" game with the following rules applying to only the next wire cut:

If you cut a white cable you can't cut white or black cable. If you cut a red cable you have to cut a green one If you cut a black cable it is not allowed to cut a white, green or orange one If you cut a orange cable you should cut a red or black one If you cut a green one you have to cut a orange or white one If you cut a purple cable you can't cut a purple, green, orange or white cable

An input would be as follows...

white, red, green, white

So I arranged this data into an associative array with valid next cuts. I turned the input string into an array. How can I use this associative array to check if the next wire cut in the input array is a valid cut?

function bombDefuseValidation($inputString) { $input = $inputString; $inputExplodedArray = explode(", ", $input); //$inputExplodedArray = array('white', 'red', 'green', 'white'); $inputExplodedArrayLength = count($inputExplodedArray); //Valid next cuts $rules = array( "white" => "red, green, orange, purple", "red" => "green", "black" => "red, purple, black", "orange" => "red, black", "green" => "orange, white", "purple" => "red, black" ); } bombDefuseValidation('white, red, green, white'); 

I need a way to take the inputs, such as 'white', check if the following input ('red') exists as a value in the 'white' key of the associative array, if it does, move on to the next input and keep checking. If they all match up to a value in the corresponding key, the bomb is defused. If one doesnt, "BOOM".

Thanks for any help!

3
  • 6
    Why use those comma-delimited lists when you can use arrays instead? Commented Jan 9, 2017 at 18:38
  • Obviously, you need to loop through $inputString to check them in sequence. I might define a function checkCut($lastCut, $thisCut) which returns TRUE or FALSE based on whether the cut is allowed by your $rules array. Commented Jan 9, 2017 at 18:43
  • Thanks for the help guys. Sammitch... Yes, that makes more sense now that I thought about it. Just me being new to programming and being silly, I guess. Commented Jan 9, 2017 at 18:54

1 Answer 1

1

If you use Array(), it would be much easier!

function bombDefuseValidation($inputArray) { $inputExplodedArrayLength = count($inputArray); //Valid next cuts $rules = array( "white" => array("red", "green", "orange", "purple"), "red" => array("green"), "black" => array("red", "purple", "black"), "orange" => array("red", "black"), "green" => array("orange", "white"), "purple" => array("red", "black") ); for ($i = 0; $i < $inputExplodedArrayLength-1 ; $i++) { $temp = $rules[$inputArray[$i]]; if(!in_array($inputArray[$i+1], $temp)) { $num = $i + 2; print("Invalid Input no. {$num}"); return -1; } } print("Valid Input"); return 0; } bombDefuseValidation(Array('white', 'red', 'green', 'white')); 
Sign up to request clarification or add additional context in comments.

1 Comment

This solution worked great after changing the for loop to: for ($i = 0; $i < ($inputExplodedArrayLength-1); $i++) { } Thank you so much!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.