Maison > interface Web > js tutoriel > Réfléchissez-y

Réfléchissez-y

Patricia Arquette
Libérer: 2024-12-17 01:43:25
original
991 Les gens l'ont consulté

Mull It Over

Avènement du Code 2024 Jour 3

Partie 1

J'ai peur pour la partie 2

J'ai jeté un coup d'œil à l'entrée du puzzle et j'ai été très intimidé.

Ensuite, j'ai lu ce que je devais faire pour la première partie et j'ai été temporairement mis à l'aise :

  • Trouvez simplement toutes les instances de mul(N,N)

Je peux utiliser une simple expression régulière pour faire ça !

Utiliser regex pour trouver toutes les muls valides

J'ai dû me rappeler d'échapper aux parenthèses, puis j'ai obtenu cette regex fonctionnelle :

/mul\((\d*),(\d*)\)/g
Copier après la connexion
Copier après la connexion
  • Cela correspond à toutes les portions mul valides
  • Et crée des groupes de capture pour chacun des chiffres de chaque paire

Maintenant, je dois faire l'extraction et les calculs appropriés pour chaque match

Ecrire l'algorithme

Voici le code de travail complet :

let total = [...input.matchAll(/mul\((\d*),(\d*)\)/g)].reduce(
  (total, match) => {
    total += match
      .slice(1, 3)
      .map(Number)
      .reduce((a, b) => a * b);
    return total;
  },
  0
);
Copier après la connexion
  • Il trouve toutes les correspondances et les répartit dans un tableau
  • Puis parcourt chacun d'entre eux, accumulant une valeur à partir de 0
  • Pour chaque match, il saisit uniquement les deux groupes capturés, aux indices 1 et 2
  • Les convertit en nombres
  • Les réduit à leur produit
  • Et ajoute ce montant au total cumulé

Il génère la réponse correcte pour l'exemple d'entrée.

Essayer ma saisie de puzzle génère...

La bonne réponse !!!

Respiration profonde...........

............pour la partie 2

Partie 2

Oh, ce n'est pas si mal

Je pensais que puisque l'entrée est pleine de mots différents, cela allait ajouter toutes sortes de nouvelles règles à prendre en compte.

Heureusement, juste deux nouveaux mots qui font office de début et de fin pour les déclarations mul valides.

Cela ressemble maintenant à un exercice consistant à isoler chaque séquence d'instructions valides en indexant chaque do() et don't() et en recherchant les bonnes parties pour les instructions mul à analyser.

Indexation des indicateurs de condition

Je souhaite utiliser regex pour faire correspondre toutes les occurrences de do() et don't() :

/don't\(\)|do\(\)/g
Copier après la connexion

Avec cela, je devrais avoir des points de contrôle alternés le long du chemin de la chaîne d'entrée.

Si c'est le cas, je peux extraire des sous-chaînes entre un point de contrôle do() et don't(), et vérifier muls.

Permettez-moi de confirmer à la fois l'exemple et les entrées complètes.

Voici mon algorithme pour isoler le drapeau et son index :

let flags = [...input.matchAll(/don't\(\)|do\(\)/g)].map((el) => {
  return [el[0], el.index];
});
Copier après la connexion

Confirmé :

  • Conditions alternatives dans l'exemple
  • Aucun modèle de confiance dans mon entrée : plusieurs do() et don't() d'affilée

Cela est devenu un peu plus compliqué.

Nouvelle stratégie

Depuis que les choses sont activées, je dois récupérer de l'index 0 jusqu'au premier don't(). Donc, je dois trouver son index. Et vérifiez cette sous-chaîne.

À partir de là, je peux ignorer toutes les choses à ne pas faire () suivantes et rechercher la prochaine tâche à faire().

Avec cela comme nouvel index de départ, je dois trouver le prochain don't(). C'est mon nouveau point final. Vérifiez cette sous-chaîne.

Et répétez : recherchez le prochain do(), recherchez le suivant ne pas(), vérifiez la sous-chaîne.

Cela ressemble à une boucle while.

J'en saurai plus lorsque j'écrirai mon algorithme.

Nouvel algorithme plus long

Beaucoup de conditions pour gérer l'ordre d'occurrence à ne pas faire sans motif :

/mul\((\d*),(\d*)\)/g
Copier après la connexion
Copier après la connexion

À ma joyeuse surprise, il génère la bonne réponse pour l'exemple d'entrée.

Que va-t-il générer après avoir traité ma saisie de puzzle ?

...

La bonne réponse !!!

Avant de vérifier, cependant, j'ai ajouté une instruction de journalisation de la console pour confirmer chaque index de début et de fin pour la sous-chaîne à vérifier.

Je les ai comparés à l'ordre des drapeaux dans le tableau.

Tout semblait bien, alors j'ai soumis.

Et j'ai obtenu la bonne réponse !

Quelle sensation délicieuse et enrichissante !

Un autre premier jour. Encore deux étoiles d'or durement gagnées.

Au jour 4 !

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal