ホームページ > バックエンド開発 > Python チュートリアル > コードデー モンキー マーケットの到来

コードデー モンキー マーケットの到来

Linda Hamilton
リリース: 2024-12-31 21:08:09
オリジナル
423 人が閲覧しました

Advent of Code  Day  Monkey Market

22 日目: モンキー マーケット

GitHub リポジトリ

今日のパズルはかなり単純明快だったのでとても楽しかったです。実行する必要のあることの多くは、整数の操作と単純な合計 (少なくともパート 1 では) などの手順にありました。

パート 1

コードは非常に単純です。ループを 2,000 回実行し、そのたびに新しい秘密番号を保存するので、最後にそれらを合計できます。

パート 2

わかりました。これにはもう少し頭脳が必要ですが、やはり多くのロジックが説明書にありました。

最大の違いの 1 つは、calc_price_changes() 関数です。この関数は一連の数値を処理し、パターンを識別するために「価格の変化」を計算するだけです。

もっと詳しく見てみましょう:

calc_price_changes 関数:

  1. 「生成されたシークレット」のリストを処理します。

  2. 「価格」(各シークレットの最後の桁) の変化を計算します。

  3. 4 つの連続した変更の一意のパターンを識別します。

4.これらのパターンに基づいてスコアを集計します。

これには 2 つの引数が必要です:
数値のリスト (生成されたシークレットを表す) と、一意のパターンのスコアを保存および集計するための辞書のようなオブジェクト (defaultdictcr)。

defaultdict は非常に便利なツールです。通常の辞書と同じように機能しますが、重要な利点があります。辞書内でキーが見つからない場合は、キーの作成と、渡された型のデフォルト値の割り当てを処理します。

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)
ログイン後にコピー

上記のコードは、スライディング ウィンドウ 4 を使用して、4 つの連続する (変更、価格) タプルのグループを抽出します。

例:price_change_sequence が [(1, 5), (2, 7), (-1, 6), (3, 9)] の場合、1 つの「チャンク」は [(1, 5), (2, 7)、(-1、6)、(3、9)].

次に、4 タプルから変更値のみを抽出します (例: -2、-1、1 など)。パターンがまだシーケンス内にない場合、それは新しいパターンなので、最後の価格を追加できます (changes[ 3][1]) を sequence_sum[パターン] に変換します。キーをシーケンス セットに追加して、キーを処理済みとしてマークします。

関数の最後:

sequence_sum には、一意の (セットを使用したように) 4 つの変更パターンとその集計スコア (各シーケンスの最終価格に基づく) のマッピングが含まれています。

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

ウォークスルー


の入力があるとします。

generated_secrets = [45, 46, 50, 53, 58, 61]
sequence_sum = defaultdict(int)
calc_price_changes(generated_secrets, sequence_sum)
ログイン後にコピー

手順:
1.価格変動の計算:
価格: [5、6、0、3、8、1] (最後の数字)。
変更: [(1, 6), (-6, 0), (3, 3), (5, 8), (-7, 1)]

  1. 4 つの変更パターンを抽出: (1, -6, 3, 5) → sequence_sum に 8 (パターンの最後の価格) を追加します。 (-6, 3, 5, -7) → sequence_sum に 1 を加算します。

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

まとめ

すべてがどのようにまとめられたかは次のとおりです:

入力処理: 入力を読み取り、秘密番号のリストに変換しました。

シーケンスの生成: 各シークレットについて、2000 世代にわたって繰り返し進化させて、一連の派生値を生成しました。

価格変動分析: シーケンス内の連続する価格 (最後の桁) 間の差異を計算し、固有の 4 つの変動パターンを特定し、それらのパターンのスコアを集計しました。

結果の抽出: 最後に、最も高い集計スコアを持つパターンを見つけて、最も影響力のあるパターンを決定しました。

問題を明確なモジュール化されたステップに分割することで、データを効率的に処理し、パターンを追跡し、パズルを解決しました。

いつものように、これがお役に立てば幸いです。私の解決策から何かを学んでいただけたでしょうか。お気軽にフォローするか、Twitter にご連絡ください

以上がコードデー モンキー マーケットの到来の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート