Maison > développement back-end > Tutoriel Python > Avènement du marché des singes du Code Day

Avènement du marché des singes du Code Day

Linda Hamilton
Libérer: 2024-12-31 21:08:09
original
423 Les gens l'ont consulté

Advent of Code  Day  Monkey Market

Jour 22 : Marché aux singes

Dépôt GitHub

Le puzzle d'aujourd'hui était assez agréable car il était assez simple. Une grande partie de ce qu'il fallait faire se trouvait dans les instructions, c'est-à-dire une manipulation d'entiers puis une simple somme (au moins pour la partie 1).

Partie 1

Le code est assez simple, on effectue une boucle 2 000 fois, en stockant à chaque fois le nouveau numéro secret, pour pouvoir les résumer à la fin.

Partie 2

Ok, celui-ci a demandé un peu plus de puissance cérébrale, mais encore une fois, une grande partie de la logique était dans les instructions.

L'une des plus grandes différences est la fonction calc_price_changes(). Cette fonction traite une séquence de nombres et calcule simplement les « changements de prix » pour identifier les modèles.

Plongeons de plus près :

La fonction calc_price_changes :

  1. Traite une liste de « secrets générés ».

  2. Calcule les changements de « prix » (le dernier chiffre de chaque secret).

  3. Identifie des modèles uniques de 4 changements consécutifs.

4.Agrège un score basé sur ces modèles.

Il faut deux arguments :
Une liste de nombres (représentant les secrets générés) ainsi qu'un objet de type dictionnaire (defaultdictcr) pour stocker et regrouper les scores pour des modèles uniques.

Un defaultdict est un outil très utile. Cela fonctionne comme un dictionnaire normal mais avec un avantage clé. S'il ne trouve pas la clé dans le dictionnaire, il se chargera de créer la clé et de lui attribuer la valeur par défaut du type transmis.

trouver des changements de séquence de 4

for p in range(len(price_change_sequence) - 4 + 1):
    changes = price_change_sequence[p: p + 4]
    key = tuple((changes[0][0], changes[1][0], changes[2][0], changes[3][0]))
    if key not in sequences:
        sequence_sum[key] += changes[3][1]
        sequences.add(key)
Copier après la connexion

Le code ci-dessus utilise une fenêtre glissante 4 pour extraire des groupes de 4 tuples consécutifs (changement, prix).

Exemple : Si price_change_sequence est [(1, 5), (2, 7), (-1, 6), (3, 9)], un « morceau » est [(1, 5), (2, 7), (-1, 6), (3, 9)].

Nous extrayons ensuite uniquement les valeurs de changement du 4-tuple, par exemple -2,-1,1 etc. Si le modèle n'est pas déjà dans les séquences, c'est un nouveau modèle, nous pouvons donc ajouter le dernier prix (changements[ 3][1]) à séquence_sum[motif]. Marquez la clé comme traitée en l'ajoutant à l'ensemble des séquences.

À la fin de la fonction :

sequence_sum contient un mappage de modèles uniques (comme nous avons utilisé l'ensemble) à 4 changements avec leurs scores agrégés (basés sur le prix final dans chaque séquence).

Exemple : {(1, 2, -1, 3) : 9, (-2, 0, 1, -1) : 6}.

Procédure pas à pas

Disons que nous avons une entrée de

generated_secrets = [45, 46, 50, 53, 58, 61]
sequence_sum = defaultdict(int)
calc_price_changes(generated_secrets, sequence_sum)
Copier après la connexion

Étapes :
1.Calculer les modifications de prix :
Prix : [5, 6, 0, 3, 8, 1] (derniers chiffres).
Modifications : [(1, 6), (-6, 0), (3, 3), (5, 8), (-7, 1)]

  1. Extraire les modèles à 4 changements : (1, -6, 3, 5) → Ajoutez 8 (dernier prix du modèle) à séquence_sum. (-6, 3, 5, -7) → Ajoutez 1 à séquence_sum.

Sortie :
{(1, -6, 3, 5) : 8, (-6, 3, 5, -7) : 1}

Conclusion

Voici comment tout s’est déroulé :

Traitement des entrées : nous avons lu et converti l'entrée en une liste de numéros secrets.

Génération de séquence : pour chaque secret, nous l'avons fait évoluer de manière itérative sur 2 000 générations pour produire une séquence de valeurs dérivées.

Analyse des changements de prix : nous avons calculé les différences entre les prix successifs (derniers chiffres) dans les séquences, identifié des modèles uniques à 4 changements et des scores agrégés pour ces modèles.

Extraction des résultats : Enfin, nous avons déterminé le modèle le plus percutant en trouvant celui avec le score agrégé le plus élevé.

En divisant le problème en étapes claires et modulaires, nous avons traité efficacement les données, suivi les modèles et résolu le puzzle.

Comme toujours, j'espère que cela vous a aidé et que vous avez appris quelque chose de ma solution. N'hésitez pas à nous suivre ou à nous contacter sur Twitter

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