#37

パケットの再構成:番号で並べ直す

バラバラに届いたパケットを通し番号で並べ直し、元のメッセージを復元します。

解説

送ったパケットは、それぞれ違う経路を通ることがあるため、受け取る順番が送った順番と一致するとは限りません。だからこそ各パケットには通し番号が付いています。 受信側は、届いたパケットを番号順に並べ直す(ソートする)ことで、元のメッセージを正しく復元できます。ここでは random でわざと順番を入れ替え、その後 sorted で番号順に戻します。 番号が「再構成のカギ」であることが分かります。

書き方

・import random / random.seed(7): 乱数を初期化し再現性を確保。random.shuffle(リスト): 要素をその場でシャッフル。
・[{...} for i, d in enumerate(リスト)]: enumerate で添字 i と値 d を同時に取り、辞書のリストを内包表記で作る。
・リスト[:]: リストの浅いコピーを作る。
・sorted(リスト, key=lambda p: p["no"]): no をキーに番号順へ並べ替える。
・"".join(...): 文字列を連結して結合する。

書いて動かす

この回の課題

わざと順番を入れ替えたパケットを通し番号で並べ直し、元のメッセージを復元してみよう。

コードはあなたの端末の中だけで動きます(サーバーには送られません)。進み具合もこのブラウザに保存されます。

もっと本格的に使うなら

Windows版 InsightPy なら、書いたコードを保存して業務の自動化まで進められます。学習センターはずっと無料です。