Pour simplement résoudre :
En termes de performances, cela signifie :
Pour le critère 1 :
Pour résoudre de manière optimale :
Je pense que cela fonctionnera. Une seule façon de le savoir.
Voici mon code d'identification du critère 2 (différence de 1, 2 ou 3) :
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
Voici mon code d'identification du critère 1 (toutes les différences augmentent ou diminuent) :
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
Voici la condition finale qui capture un rapport sûr :
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
Au total, mon algorithme génère la bonne réponse pour l'exemple d'entrée.
Est-ce que cela fera la même chose pour ma saisie de puzzle ??
Ouisssirrrreee !!
Doux !
Cela complique certainement un peu les choses.
J'aimerais éviter un algorithme qui vérifie toutes les permutations possibles d'un rapport. Cela nécessiterait de générer des millions de rapports.
La première bonne nouvelle est :
Pour ma saisie de puzzle, cela fait environ 200 qui ne m'obligent pas à vérifier les permutations.
Néanmoins, 800/1000, c'est encore beaucoup de listes pour explorer pleinement les permutations.
Honnêtement, je ne vois pas de moyen d'éviter d'exécuter mon algorithme à chaque permutation de rapports dangereux.
Déception.
Il est temps d'ajouter une boucle pour parcourir chaque numéro dans les rapports dangereux - le numéro à supprimer, puis de vérifier la liste des mutations pour une note de passage.
J'ai fini par dupliquer ma boucle while avec les lignes ajoutées pour dupliquer et supprimer un numéro de chaque rapport de test ultérieur.
C'est beaucoup plus de code.
Mais ça marche ! Je génère la bonne réponse pour la saisie du puzzle !
La question est :
Exécutons-le et voyons...
Hmmm, ça marche, mais j'obtiens une réponse qui n'est que légèrement supérieure à ma réponse de la partie 1. Cela semble faux.
Ça ne fait pas de mal de le soumettre, n'est-ce pas ????
C'est est exact !
Putain de fumée !
C'est incroyable !
Et vraiment amusant à résoudre !
Quatre étoiles d'or avant le Jour 3.
Apportez d'autres puzzles merveilleux !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!