1

Тема: Як переробити одне число в інше, де усі цифри йдуть по порядку

всім привіт!
вивчаючи js знайшов цікаву задачку, котру не виходить вирішити.
функція приймає якесь число та повинна повернути число, де усі цифри йдуть по порядку від найбільшого. наприклад вхідне 3726 на виході повинно бути 7632
наскільки я розумію, потрібно знайти найбільшу цифру, записати її кудись та виділити з массиву.
я "зламався" на виділенні

function descendingOrder(n){
  let numbers = Array.from(String(n), Number);
  let result = 0;
  let current = '';

  for (let i = 0; i < numbers.length; i++) {
    let currentNumbers = numbers;
    let max = Math.max.apply(null, currentNumbers);
    current += max;
    delete(Math.max.apply(null, currentNumbers));
    console.log('max - ' + max);
  }
  result = +current;
  console.log(result);
}

descendingOrder(134569872);

2

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

Перетворіть число на стрічку, стрічку на масив символів і відсортуйте, а потім так само назад.
Можете скористатися вбудованим методом sort.
Альтернативний шлях - сортування підрахунком.

Подякували: leofun011

3

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

Нічого цікавого. Елементарна задача на стрічки і масиви.

((v) => Number(v.toString().split('').sort().reverse().join('')))(12543);

Результат: 54321.

Подякували: koala, Betterthanyou2

4

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

koala написав:

Перетворіть число на стрічку, стрічку на масив символів і відсортуйте, а потім так само назад.
Можете скористатися вбудованим методом sort.
Альтернативний шлях - сортування підрахунком.

Привіт! Знайшов рішення через метод filter.
Перший тест пройшов, але якщо у вхідному числі хочаб одна цифра повторюється (воно ж може бути будь-яким, наприклад 33377). В такому випадку функція повертає NaN. Підкажи будь-ласка як зробити умову

function descendingOrder(n){
  let numbers = Array.from(String(n), Number);
  let result = 0;
  let current = '';
  let currentNumbers = numbers;


  for (let i = 0; i < numbers.length; i++) {
    current += Math.max.apply(null, currentNumbers);
    currentNumbers = currentNumbers.filter(el => el !== Math.max.apply(null, currentNumbers));
    result = +current;
  }
  console.log(result);
  return result;
}

descendingOrder(184722);

5

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

У реальному житті можна наводити число до типу string, але якщо це завдання для практики, то я б саме з числовими типами і працював.

let n = 11757511;
let arr = [];
while (n > 0) {
  arr.push(n % 10);
  n = ~~(n / 10);
}
arr.sort();
console.log(arr.reduce((acc, d, i) => acc + d * 10 ** i, 0));

6

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

leofun01 написав:

Нічого цікавого. Елементарна задача на стрічки і масиви.

((v) => Number(v.toString().split('').sort().reverse().join('')))(12543);

Результат: 54321.

Це працює тільки для додатніх чисел )

Подякували: leofun011

7

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

function reverseDigits(num) {
    return parseInt(num.toString().split('').sort().reverse().join('')) * Math.sign(num)
}

8

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

mikeos написав:
leofun01 написав:

Нічого цікавого. Елементарна задача на стрічки і масиви.

((v) => Number(v.toString().split('').sort().reverse().join('')))(12543);

Результат: 54321.

Це працює тільки для додатніх чисел )

((v) => Number(v.toString().split('').sort((a, b) => a - b).reverse().join('')))(-12543);

9

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

Хто знає який недолік цього методу?

10

Re: Як переробити одне число в інше, де усі цифри йдуть по порядку

ur_naz написав:

Хто знає який недолік цього методу?

Що ніц не пойнятно :)