DEV Community

Cover image for Codewars - Counting Duplicates
Nicolás Bost
Nicolás Bost

Posted on

Codewars - Counting Duplicates

Salutations.

Fluffball says hi

I'm posting Codewars challenges and my thought process in this series. I'm using JS and Node 18 whenever possible. Just for the sake of clarity, I'm making fair use of them.

For the "Counting duplicates" challenge, I'll start with this:

function duplicateCount(text){
  text = text.toString();
  let countTotal = {"max":0};
  let letter = '';
  for (let i=0 ; i < text.length ; i++){
    letter = text.at(i).toLowerCase();
    if (letter){
      countTotal[letter] = countTotal[letter] ? countTotal[letter]++ : 1;
      if (countTotal[letter] > countTotal["max"]){
        countTotal["max"] = countTotal[letter];
      }
    }
  }
  return countTotal["max"];
}
Enter fullscreen mode Exit fullscreen mode

Seems... wordy. Wonder if this many words are actually aiming in the right direction. I'll give you a bit of time if you'd like to think for yourself.

3...

2...

1...

1/2...

1/4...

Ok, I think that's enough. No. Slang from the Bay Area made its way onto the web, so if I may: It's hella wrong.

The thing is, I was trying to find how many duplicates of the most duplicated letter are there. Turns out we need to answer how many duplicate types are there. Case insensitive.

AbC -> 0 -> no letter repeats
AbCC -> 1 -> "C" repeats, we don't care how many times
AbBCC -> 2 -> "b" and "c" repeat, we don't care how many times or the casing

We can take advantage of object literals in JS to create a counter for each letter. Then, one property could be "repetitions", which would be a counter that goes up ONLY whenever a letter shows up two times.

if (countTotal[letter]==2){
        countTotal.repetitions++;
      }
Enter fullscreen mode Exit fullscreen mode

Full solution:

function duplicateCount(text){
  text = text.toString();
  let countTotal = {"repetitions": 0};
  let letter = '';
  for (let i=0 ; i < text.length ; i++){
    letter = text.at(i).toLowerCase();
    if (letter){
      (countTotal[letter] === undefined) ? countTotal[letter] = 0 : null;
      countTotal[letter]++;
      if (countTotal[letter]==2){
        countTotal.repetitions++;
      }
    }
  }
  return countTotal["repetitions"];
}
Enter fullscreen mode Exit fullscreen mode

Took a while, it can be improved.

Take care. Drink water 💧💧💧.

Previous

Top comments (0)