DEV Community

dev.to staff
dev.to staff

Posted on

3

Daily Challenge #166 - Cat and Mouse

You will be given a string (x) featuring a cat 'C', a dog 'D' and a mouse 'm'. The rest of the string will be made up of '.'.

You need to find out if the cat can catch the mouse from its current position. The cat can jump (j) characters.

Also, the cat cannot jump over the dog.

So:

if j = 5:

..C.....m. returns 'Caught!' <-- not more than j characters between

.....C............m...... returns 'Escaped!' <-- as there are more than j characters between the two, the cat can't jump far enough

if j = 10:

...m.........C...D returns 'Caught!' <--Cat can jump far enough and jump is not over dog

...m....D....C....... returns 'Protected!' <-- Cat can jump far enough, but dog is in the way, protecting the mouse

Finally, if all three animals are not present, return 'boring without all three'


This challenge comes from A.Partridge on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (2)

Collapse
 
amcmillan01 profile image
Andrei McMillan • Edited

javascript

function cat_mouse(str, max_jump) {
  var has_animals = /(c|m|d)/i.test(str);
  if (!has_animals) {
    console.log('boring without all three');
  } else {
    var str_lower = str.toLowerCase();
    var cat_position = str_lower.indexOf('c');
    var dog_position = str_lower.indexOf('d');
    var mouse_position = str_lower.indexOf('m');
    var min = Math.min(cat_position, mouse_position);
    var max = Math.max(cat_position, mouse_position);

    // is the dog between the cat and mouse
    if (min < dog_position && dog_position < max) {
      console.log('Protected!');
    } else {
      var distance = Math.abs(cat_position - mouse_position);
      if (distance > max_jump) {
        console.log('Escaped!');
      } else {
        console.log('Caught!');
      }
    }

  }
}


// ----- test 

cat_mouse('..j.....h.', 5);
cat_mouse('..c.....m.', 5);
cat_mouse('..c....m.', 5);
cat_mouse('d..m.......c.', 10);
cat_mouse('d..m.......c.', 5);
cat_mouse('..m....d...c.', 5);
cat_mouse('...m.........C...D', 10);

python

import re
import math


def cat_mouse(str_input, max_jump):
    str_lower = str_input.lower()
    has_animal = re.search("c|m|d", str_lower)

    if has_animal is None:
        print('boring without all three')
    else:
        cat_position = str_lower.find("c")
        dog_position = str_lower.find("d")
        mouse_position = str_lower.find("m")
        min_pos = min(cat_position, mouse_position)
        max_pos = max(cat_position, mouse_position)

        # is the dog between the cat and mouse
        if min_pos < dog_position < max_pos:
            print('Protected!')
        else:
            distance = math.fabs(cat_position - mouse_position)
            if distance > max_jump:
                print('Escaped!')
            else:
                print('Caught!')


# // -- test
cat_mouse('..j.....h.', 5)
cat_mouse('..c.....m.', 5)
cat_mouse('..c....m.', 5)
cat_mouse('d..m.......c.', 10)
cat_mouse('d..m.......c.', 5)
cat_mouse('..m....d...c.', 5)
cat_mouse('...m.........C...D', 10)

Collapse
 
mathanagopal97 profile image
Mathanagopal Sankarasubramanian • Edited

JAVA

import java.util.Scanner;

public class CatAndMouse
{
   public static void main (String[]args)
   {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the string x");
      String x = sc.nextLine();
      System.out.println("Enter the jump");
      int j = sc.nextInt();
      x = x.toLowerCase();
      int posofc = x.indexOf('c') + 1, posofm = x.indexOf('m') + 1, posofdog = x.indexOf('d');
      if(posofdog>0){//Check if dog is in between
         int start = posofc > posofm ? posofm : posofc;
         int end = posofc > posofm ? posofc : posofm;   
         if(start<posofdog && end>posofdog){
            System.out.println("Protected");
            System.exit(0);
         }
      }
      int compare = posofc < posofm ? (posofm - posofc - 1) : (posofc - posofm - 1);
      if (compare > j){
         System.out.println ("Escape");
      }
      else{
         System.out.println ("Caught");
      }

   }
}

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay