Python チャレンジのクリア戦略とコード (レベル 0 ~ 5)

Python Challenge は楽しい Web サイトであり、初心者が練習するのに適した教材です。以前からこのサイトをブックマークしていましたが、一度もやったことがなかったので、最近気まぐれでレベル0~5までのクリア攻略法とコードを記録した記事です。

レベル 0: ウォーミングアップ

元の URL は次のとおりです: http://www.pythonchallenge.com/pc/def/0.html
レベル0インターフェース

0.1 レイダー

インターフェイスは 2 の 38 乗で、Python を使用して結果を計算し、URL 接尾辞を置き換えて、URL をhttp://www.pythonchallenge.com/pc/def/274877906944.htmlに変更します。

0.2コード

print(2 ** 38)

""" 
Output: 274877906944
"""

レベル 1: トランスを作るのはどうですか?

URL:http://www.pythonchallenge.com/pc/def/274877906944.html
レベル1インターフェース

1.1 レイダーズ

インターフェイスでは、文字 K は 2 桁後ろにシフトされて文字 M になり、文字 O は 2 桁後ろにシフトされて文字 Q になり、文字 E は 2 桁後ろにシフトされて文字 G になります。パスワードをシフトし、URL サフィックスを 2 桁後ろに移動して置換し、URL をhttp://www.pythonchallenge.com/pc/def/ocr.htmlに変更します。

1.2 コード

def decrypt(s):
    res = ""
    for c in s:
        if c not in [" ", ".", "(", ")", "'"]:
            res += chr(ord('a') + (ord(c) + 2 - ord('a')) % 26)
        else:
            res += c
    return res
# 解密提示
print(decrypt("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."))
# Output: 
# i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.

# 解密答案
print(decrypt("map"))

"""
Output: ocr
"""

レベル 2: ocr

URL:http://www.pythonchallenge.com/pc/def/ocr.html
レベル2インターフェース

2.1 襲撃者

インターフェイスのプロンプトに従ってソース コードを表示し、ソース コードのコメントでパズルを見つけ、出現回数が最も少ない文字 (a、l、q、i、y、u、t、e、および単語) を見つけます。 Forms は等しいため、URL をhttp://www.pythonchallenge.com/pc/def/equality.htmlに変更します。
レベル2のソースコードに隠されたパズル

2.2 コード

from collections import Counter

def getRareChar(s):
    cnt = Counter(s)
    sorted_cnt = sorted(cnt.items(), key=lambda x:x[1])
    return sorted_cnt
# 字符串过长,用文件存储
with open('2-input.txt') as f:
    s = f.read()
print(getRareChar(s))

"""
Output:
[('a', 1),
 ('l', 1),
 ('q', 1),
 ('i', 1),
 ('y', 1),
 ('u', 1),
 ('t', 1),
 ('e', 1),
 ('\n', 1219),
 ('^', 6030),
 ('*', 6034),
 ('&', 6043),
 ('$', 6046),
 ('{', 6046),
 ('+', 6066),
 ('!', 6079),
 ('%', 6104),
 ('}', 6105),
 ('[', 6108),
 ('_', 6112),
 ('#', 6115),
 (']', 6152),
 ('(', 6154),
 ('@', 6157),
 (')', 6186)]
"""

レベル3:再

URL:http://www.pythonchallenge.com/pc/def/equality.html
レベル3インターフェース

3.1 襲撃者

前のレベルと同様に、文字列データはソース コード内に隠されており、正規表現を使用して「小文字 1 文字、大文字の両側 3 文字」のパターンに一致し、最終的にリンクリストを取得するので、URL を http:/ に変更し
ます。 /www.pythonchallenge.com/pc/def/linkedlist.html、さらにhttp://www.pythonchallenge.com/pc/def/linkedlist.phpにジャンプするように求めるプロンプトが表示されます。
レベル 3 ソース コード内の隠し文字列

3.2 コード

import re

with open('3-input.txt') as f:
    s = f.read()

iteritems = re.finditer(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', s, re.M)

res = []
for m in iteritems:
    res.append(m.group(1))
print(''.join(res))

"""
Output: linkedlist
"""

レベル 4: チェーンをたどる

URL:http://www.pythonchallenge.com/pc/def/linkedlist.php
レベル4インターフェース

4.1 襲撃者

  1. インターフェイスには明確なプロンプトがないため、前の数レベルの思考を続けてソース コードを確認し、隠れたプロンプト「urllib が役立つかもしれません。決して終わらないので、何も試さないでください。400 回以上です」を見つけてください。十分すぎるよ。」
  2. 画像リンクのアドレスがhttp://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345であることがわかりました。
    レベル4のソースコードに隠されたヒント
  3. 画像をクリックしてhttp://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345にジャンプします。インターフェイスには「次の何もないのは 44827」と表示されるため、「何もない」を常に変更する必要があります= インターフェイスのコンテンツを介してサフィックスを追加し、urlib を使用して Web ページのリクエスト ループを 400 回シミュレートし(ループ、つまり、タイトルの意味がチェーンに従う)、ループ内で「peak.html」を取得します。最終的な答えは http です。 ://www.pythonchallenge.com/pc/def/peak .html

4.2 コード

from urllib.request import urlopen

response = urlopen("http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345")
for i in range(400):
    suffix = response.read().decode('utf-8').split()[-1]
    if suffix.find('.html') != -1:
        print(suffix)
        break
    url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=" + suffix
    response = urlopen(url)

"""
Output: peak.html
"""

レベル5: ピーク地獄

URL:http://www.pythonchallenge.com/pc/def/peak.html
レベル5インターフェース

5.1 戦略

  1. インターフェースは「発音してください」というプロンプトを表示し、ソースコードをチェックして「ピークヘルって聞き覚えがありますか?」というプロンプトを見つけます。
    レベル5のソースコードに隠されたヒント

  2. ソースコードを読み続けると、奇妙なソースファイル「banner.p」が見つかりました。クリックして新しいタブで開き、隠されたデータを見つけます
    奇妙なバナー.p
    Banner.p のデータ

  3. このとき、上記の結果と組み合わせると、「peak hell」の発音は「pickle」に似ているため、pickleを使ってbanner.pを逆シリアル化して「channel」を取得するため、最終的なURLはhttp://wwwに変更されます。pythonchallenge.com/pc/def/channel.htmlレベル 6 に入ります。

5.2 コード

import pickle

with open('banner.p', 'rb') as f:
    s = f.read()
    data = pickle.loads(s)
for item in data:
    for ch, cnt in item:
        print(cnt * ch, end="")
    print()

出力:
レベル5コード出力結果

おすすめ

転載: blog.csdn.net/baidu_40395808/article/details/130966859