0
0

More than 3 years have passed since last update.

新人君向けの課題(ROT13)

Last updated at Posted at 2020-05-14

フレッシャーズの皆さん、教育担当の皆さんジャンボ!!!!

最近、全然ブログ書けてなかった。。。

今回は、連想配列を使ってほしくてROT13という単換字式暗号(シーザー暗号)を課題として出してみました。

課題

    /**************************************************
     * 課題2: ROT13関数を作成
     *
     * ・起動引数で入力した文字列をROT13の仕様で暗号化する
     *   https://ja.wikipedia.org/wiki/ROT13
     * ・str_rot13は、使ってはなりませぬ
     * ・try-catch、throw Exceptionを使用する
    **************************************************/

私が書いた模範?解答です

<?php
    try {
        // エラーチェック
        if (!isset($argv[1])) {
            throw new Exception('引数が不正です');
        }

        echo "IN : \n";
        echo "OUT: ".new_rot13($argv[1])."\n";
    } catch (Exception $e) {
        // 異常終了
        echo "*** Error: ".$e->getMessage()."\n";
        exit(1);
    }

    // 正常終了
    exit(0);


    // ROT13
    function new_rot13($in) {
        // 変換テーブル
        $_convert_table = [
                            'a' => 'n', 'b' => 'o', 'c' => 'p', 'd' => 'q', 'e' => 'r',
                            'f' => 's', 'g' => 't', 'h' => 'u', 'i' => 'v', 'j' => 'w',
                            'k' => 'x', 'l' => 'y', 'm' => 'z', 'n' => 'a', 'o' => 'b',
                            'p' => 'c', 'q' => 'd', 'r' => 'e', 's' => 'f', 't' => 'g',
                            'u' => 'h', 'v' => 'i', 'w' => 'j', 'x' => 'k', 'y' => 'l',
                            'z' => 'm',
                            'A' => 'N', 'B' => 'O', 'C' => 'P', 'D' => 'Q', 'E' => 'R',
                            'F' => 'S', 'G' => 'T', 'H' => 'U', 'I' => 'V', 'J' => 'W',
                            'K' => 'X', 'L' => 'Y', 'M' => 'Z', 'N' => 'A', 'O' => 'B',
                            'P' => 'C', 'Q' => 'D', 'R' => 'E', 'S' => 'F', 'T' => 'G',
                            'U' => 'H', 'V' => 'I', 'W' => 'J', 'X' => 'K', 'Y' => 'L',
                            'Z' => 'M',
        ];

        try {
            $ary = str_split($in);

            $out = "";
            foreach ($ary as $chr) {
                if (preg_match('/[a-zA-Z]/', $chr)) {
                    $out .= $_convert_table[$chr];
                } else {
                    $out .= $chr;
                }
            }

            return $out;
        } catch(Exception $e) {
            throw $e;
        }
    }
?>

動作検証

$ php ./rot13.php asdhfakj34829sakjfkdjah
asdhfakj34829sakjfkdjah
nfqusnxw34829fnxwsxqwnu
$ php ./rot13.php AAAAAAA111111KJAFDHJKjsahfkjsahsf1892341579
AAAAAAA111111KJAFDHJKjsahfkjsahsf1892341579
NNNNNNN111111XWNSQUWXwfnusxwfnufs1892341579
$ php ./rot13.php あいうえお
あいうえお
あいうえお
$ php ./rot13.php あいうえおsaldkjfalsdkjfJKFDLKJ47588738
あいうえおsaldkjfalsdkjfJKFDLKJ47588738
あいうえおfnyqxwsnyfqxwsWXSQYXW47588738





現場からは以上です。

0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0