派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

エンジニアへの挑戦状 #02 Pythonでお宝探し

f:id:itstaffing:20220301154845j:plain

あなたのPythonスキルを測る問題です。
学んでいないとわからない。
詳しければ、1分以内にわかるはず。
さて、あなたは解けますか?

所要時間:3~5分
Pythonの基礎力が問われる問題です。

【問題】

ある海賊団が冒険中に謎のメッセージを遺跡で見つけました。そのメッセージには「られしふ おけぬう みすも れぎみら」と書かれていました。

考古学に詳しい人が文字を1文字ずつ置き換える換字式暗号だと気づきました。

この暗号形式では、例えば「あ」を「か」に置き換えて、「い」を「め」に置き換えるように、1文字ごとに変換対象の文字が決まっています。地道に組み合わせを変えていくことで先頭の「られしふ」は「たからは」(宝は)になると予想しました。お宝のありかを示すことに気づいた彼らは舞い上がって宴会を始めてしまって、肝心の場所については未解読です。

プログラムを書けるあなたは、以下のプログラムを完成させてお宝を彼らより先に見つけましょう。`transform_text` メソッドに書くべきコードを選択肢から選んでください。

```
class SubstitutionCipher:
    def __init__(self, plain_chars: str, encrypted_chars: str):
        self.plain2encrypted_key = self.map_chars(plain_chars, encrypted_chars)
        self.encrypted2plain_key = self.map_chars(encrypted_chars, plain_chars)

    def map_chars(self, chars1, chars2):
        return {char1: char2 for char1, char2 in zip(chars1, chars2)}

    def encrypt(self, plain_text: str):
        return self.transform_text(plain_text, self.plain2encrypted_key)

    def decrypt(self, encrypted_text: str):
        return self.transform_text(encrypted_text, self.encrypted2plain_key)

    def transform_text(self, text: str, key: dict):
        // プログラムが正しく動くように以下から選択してください。

if __name__ == "__main__":
    plain_chars = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげご "
    encrypted_chars = "くけこそるれのぎぐよおみせかはらいえまねちもがをうふへほたろすあむげりめひさしんきやゆごわつてとなにぬ "
    encrypted_text = "られしふ おけぬう みすも れぎみら"
    cipher = SubstitutionCipher(plain_chars, encrypted_chars)
    print(cipher.decrypt(encrypted_text))
```

【選択肢1】

```
for value in key.values():
    replaced_char = key.get(value, "")
    text = text.replace(value, replaced_char)
return text
```

【選択肢2】

```
output = ""
for char in text:
    output += key.get(char, "")
return output
```

【選択肢3】

```
output = ""
for char in text:
    output += key.pop(char, "")
return output
```

 

お宝がどこにあるか分かりましたか?自信のない人は、実際にプログラムを実行してみましょう。正解とその解説はこちらから。

 

ここまでご覧いただきありがとうございます。実はこの問題、出題者がとある人気海賊マンガを読み直ししていたときに思いつかれた設定なのだとか。問題と一緒に、出題者が読んだ作品も考えてみてくださいね。

本問題以外にも、リクルートスタッフィングでは、エンジニアのスキルアップを応援するため、登録者限定の記事やイベントなどを配信しています。 リクルートスタッフィングでの就業に関わらず使えるものですので、これを機にお役立てください。

リクルートスタッフィング

【出題者】
早川 敦士さん
株式会社DATAFLUCTで事業責任者(プロダクトマネージャー)として従事。データと機械学習をビジネスに活かすプロダクトを開発している。また、株式会社ホクソエムで執行役員を務めたり、プログラミング教育に携わる。新卒でリクルートコミュニケーションズに入社しWeb広告やマーケティングオートメーションなどのB2Cマーケティングを経験し、その後ユーザベースにてB2BマーケティングプラットフォームであるFORCASのクローラーやデータ分析基盤を開発するチームリーダーをする。大学在学中に『データサイエンティスト養成読本』(技術評論社刊)を共著にて執筆。その後も『機械学習のための特徴量エンジニアリング』(オライリー・ジャパン刊)や『Pythonによるはじめての機械学習プログラミング』(技術評論社刊)などで執筆活動を続けている。Youtubeチャンネル『データサイエンティストgepuro』で動画を投稿。
・Twitterアカウント