3 votes

Défi mathématique : imprimez le prochain plus grand nombre après le mélange en utilisant javascript

Avoir la fonction nextLargest(num) qui prend le paramètre num passé et renvoie le prochain nombre supérieur à num en utilisant les mêmes chiffres. Par exemple : si num est 123 renvoie 132, si c'est 12453 renvoie 12534. Si un nombre n'a pas de permutations plus grandes, renvoyer -1 (par exemple 999).

Exemples

Input: 11121
Output: 11211
Input: 41352
Output: 41523
var permute = (function () {
    return permute;

    function permute(list) {
        return list.length ?
            list.reduce(permutate, []) :
            [[]];
    }

    function permutate(permutations, item, index, list) {
        return permutations.concat(permute(
            list.slice(0, index).concat(
            list.slice(index + 1)))
            .map(concat ,[item]));
    }

    function concat(list) {
        return this.concat(list);
    }

}());

console.log(JSON.stringify(permute([1,2,3,4])));

mon résultat : [[1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[1,4,3,2],[2,1,3,4],[2,1,4,3],[2,3,1,4],[2,3,4,1],[2,4,1,3],[2,4,3,1],[3,1,2,4],[3,1,4,2],[3,2,1,4],[3,2,4,1],[3,4,1,2],[3,4,2,1],[4,1,2,3],[4,1,3,2],[4,2,1,3],[4,2,3,1],[4,3,1,2],[4,3,2,1]]

résultat attendu :

Input: 11121
Output: 11211
Input: 41352
Output: 41523

0voto

rplantiko Points 444

En supposant que la fonction permute soit donnée comme celle que vous avez partagée dans votre question, l'approche directe suivante devrait résoudre la question.

Cependant, ce n'est pas très efficace. Probablement, une meilleure stratégie pourrait être trouvée en travaillant avec une séquence de transpositions judicieusement choisie uniquement.

function nextLargest(input) {
  let x = input.toString();
  let p = permute([...x]);
  let result = Infinity;
  for (let n of p) {
    let y = n.join('')*1;
    if (y > input && y < result) result = y; 
  }
  return result < Infinity ? result : -1;
}

console.log(nextLargest(1234));  // <<< donne 1243

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X