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

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