DevAdvent 2022

Как найти максимально возможное число в JavaScript

Или о массивах, строках и функциях сортировки

Сегодняшняя задача DevAdvent — это упражнение в упорядочении чисел. Но с интересным вариантом: вам нужно разбить число и использовать его цифры, чтобы получить максимально возможное число. В некотором смысле это связано с двумя предыдущими задачами (Как получить минимум или максимум массива в JavaScript и TypeScript и 5 способов преобразовать число в строку в JavaScript)

Проблема

ссылка на Кату

Ваша задача состоит в том, чтобы создать функцию, которая может принимать любое неотрицательное целое число в качестве аргумента и возвращать его с цифрами в порядке убывания. По сути, переставьте цифры, чтобы получить максимально возможное число.

Примеры: Вход: 42145 Выход: 54421

Вход: 145263 Выход: 654321

Вход: 123456789 Выход: 987654321

Мое решение

Решение, которое я предлагаю, разбито на 5 шагов.

1. Преобразовать число в строку (это необходимо, потому что число не повторяется)

const str: string = "" + n;

2. Преобразовать строку в массив символов

const strArray: string[] = [...str];

3. Отсортируйте массив символов

const sortedArray: string[] = strArray.sort((a, b) => +b - +a);

4. Присоединяйтесь к массиву символов

const arrayJoined: string = sortedArray.join("");

5. Преобразуйте строку в число

const result = +arrayJoined;

Соединяя различные части вместе, я получаю эту функцию

export function descendingOrder(n: number): number {
  const str: string = "" + n;
  const strArray: string[] = [...str];
  const sortedArray: string[] = strArray.sort((a, b) => +b - +a);
  const arrayJoined: string = sortedArray.join("");
  return +arrayJoined;
}

Я могу написать более сжатую версию, объединив различные шаги в один.

export const descendingOrder = (x: number): number =>
  +[...("" + x)].sort((a, b) => +b - +a).join("");

Начиная с этой версии я могу получить эквивалент в JavaScript.

export const descendingOrder = (x) =>
  +[...("" + x)].sort((a, b) => +b - +a).join("");

Я остановлюсь здесь на сегодня. Сегодня девятая годовщина моего первого свидания с женой. На сегодня хватит кода. Время провести день с моей невестой.

Спасибо за прочтение! Оставайтесь с нами, чтобы узнать больше.

Не пропустите мою следующую статью — подпишитесь на мой средний список адресов электронной почты



Больше контента на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Заинтересованы в масштабировании запуска вашего программного обеспечения? Посмотрите Цирк.

Мы предлагаем бесплатные консультации экспертов и индивидуальные решения, которые помогут вам повысить осведомленность о вашем технологическом продукте или услуге и принять их.