この投稿にはパズルが含まれています!コードを分解して謎を解決しましょう。
著者のマットは、Pythonコードスニペットを提示します。 ステップバイステップで分析しましょう:
エンコードとデコード:コードは、base64の文字列のデコードによって開始されます。
<code class="language-python">encoded = 'SSBhbSBuZXcgaGVyZSwgYW5kIGxvb2tpbmcgZm9yd2FyZCB0byBwb3N0aW5n' decoded = base64.b64decode(encoded).decode('utf-8') </code>
「私はここに新しい、投稿を楽しみにしています」を含む。
decoded
複雑なインデックス生成プロセスは、および。itertools.chain
を使用して続きます
functools.reduce
<code class="language-python">indices = chain.from_iterable( [reduce(lambda x, y: x + y, [[i] for i in range(len(decoded))][::j]) for j in range(1, 2)] )</code>
は、各内側リストに単一のインデックスが含まれるリストのリストを作成します。 1から1の範囲のスライスreduce
(lambda x, y: x y
のため)は、すべてのインデックスを効果的に選択することを意味します。したがって、[[i] for i in range(len(decoded))]
は、すべてのインデックスを0から[::j]
。j
に生成するジェネレーターになります
range(1, 2)
indices
len(decoded) - 1
条件は不完全です。 :であることを意図していると仮定します
decoded
if i
この行は元の文字列を再構築するので、if i < len(decoded)
は「私はここで新しい、投稿を楽しみにしています」となります。
<code class="language-python">unscrambled = ''.join(decoded[i] for i in indices if i < len(decoded))</code>
unscrambled
変数割り当て:
これにより、「I Am」という名前の変数が動的に作成され、アンクランブルされていない文字列を割り当てます。
<code class="language-python">vars()[decoded[:3]] = unscrambled</code>
最後に、コードは
とこれは「私はここで新しい、投稿するのを楽しみにしている」と繰り返し印刷します(おそらく中断されるまで)。
cycle
reduce
解決策:
<code class="language-python">(lambda x: print(x))(reduce(lambda a, b: a + b, cycle([decoded])))</code>
パズルのソリューションは、単一の答えではなく、コードの仕組みを理解することです。コア「シークレットメッセージ」は、デコードされた文字列に既に存在しています。「私はここで新しく、投稿を楽しみにしています」。コードの複雑さは気を散らすもので、この単純なメッセージを難読化するように設計されています。 動的に作成された変数「I Am」は、陰謀の層を追加しますが、主要なメッセージを変更しません。
以上が最初の投稿 4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。