Exercises

CodeWars - Catching Car Mileage Numbers

Problem

You need to identify “interesting” numbers.

When the number is interesting return 2, if it is “near” an interesting number return 1 and if it is not interesting return 0

Original Problem: //https://www.codewars.com/kata/52c4dd683bfd3b434c000292/train/typescript

Comments problem definition

When looking at the rules of the “interesting numbers” you will notice that there is a redundant rule:

  • Every digit is the same number: 1111
  • The digits are a palindrome: 1221 or 73837

When every digit is the same number, it is a palindrome. Thus a special check for it would be unneeded.

In a real life scenario you would have to clarify if both features need to be implemented or not.

Approaching the solution

Every rule can be written as a function const rule = (n:number) => boolean. This makes it ideal to experiment with Test Driven Development.

For the rule “Any digit followed by all zeros: 100, 90000”. We can write following code:

1. Step: Minimal Code

CatchingCarMileageNumbers.ts:

export const isNumberFollowedByZeros = (n: number) => {};

2. Step: Write Tests

CatchingCarMileageNumbers.test.ts:

it('tests for Numbers Followed by Zeros', () => {
  expect(isNumberFollowedByZeros(1000)).toBe(true);
  expect(isNumberFollowedByZeros(10020)).toBe(false);
  expect(isNumberFollowedByZeros(1336)).toBe(false);
});

3. Step: Implementation

Now we can implement the function to pass the test:

export const isNumberFollowedByZeros = (n: number) => {
  const match = `${n}`.match(/^\d0*$/);
  return match !== null;
};

Code Solution

Full Solution can be found here: https://github.com/CodeAndChaos/training-typescript/tree/main/src/CodeWars/4kyu