New day, new exercise for my DevAdvent 2022. Over the weekend I discovered a few other devAdvents but still decided not to follow any of them. Instead, I will continue to pick a random problem from CodeWars. Today’s one is about how to find the minimum and maximum of a series of numbers.

The problem

In this little assignment you are given a string of space separated numbers, and have to return the highest and lowest number.

Examples

highAndLow("1 2 3 4 5"); // return "5 1"
highAndLow("1 2 -3 4 5"); // return "5 -3"
highAndLow("1 9 3 4 -5"); // return "9 -5"

The solution

page of mysterious mathematical equations

This is my solution for TypeScript:

export class Kata {
  static highAndLow(numbers: string): string {
    const arr: number[] = numbers.split(" ").map((c) => parseInt(c));
    const max: number = Math.max(...arr);
    const min: number = Math.min(...arr);
    return `${max} ${min}`;
  }
}

This is my solution for JavaScript:

function highAndLow(numbers) {
  const arr = numbers.split(" ").map((c) => parseInt(c));
  const max = Math.max(...arr);
  const min = Math.min(...arr);
  return `${max} ${min}`;
}

Also in this case I preferred to divide the problem into several steps.

First of all, I split the string into an array of numbers. Then I used the Math.max and Math.min functions to find the maximum and minimum values. Finally, I returned the result as a string.

To split the string I use the String.split() method. This way I get an array of strings.

// ts
const arrString: string[] = numbers.split(" ");

//js
const arrString = numbers.split(" ");

Then I use the Array.map() method to modify each element of the array. This way I can convert each element to a number.

// ts
const arrNumber: number[] = arrString.map((c) => parseInt(c));

//js
const arrNumber = arrString.map((c) => +c);

Finally, I use the Math.max() and Math.min() functions to find the maximum and minimum values.

// ts
const max: number = Math.max(...arr);
const min: number = Math.min(...arr);

// js
const max = Math.max(...arr);
const min = Math.min(...arr);

I can also approach the problem in a slightly different way. After converting the string to an array of numbers, I sort the array. Then I return the first and last item.

export class Kata {
  static highAndLow(numbers: string) {
    let arr = numbers
      .split(" ")
      .map((x) => parseInt(x))
      .sort((a, b) => a - b);

    return `${arr[arr.length - 1]} ${arr[0]}`;
  }
}
function highAndLow(numbers) {
  const arr = numbers
    .split(" ")
    .map((c) => parseInt(c))
    .sort((a, b) => a - b);

  return `${arr[arr.length - 1]} ${arr[0]}`;
}