はじめに
前回のエントリで 素数をワンライナーで求める というネタをやりました。
もともと、今日のエントリを解くための前置きだったのでした。 課題はこちらのサイトから拝借しました。
今日問いてみようと思っている内容は、タイトル通りなのですが、ちょっとわかりにくいので解説しておきます。
- 回文数 : 逆さに読んでも内容が変わらない数。( 例 1、 11、 121 )
- 回文素数 : 回文数であり、かつ素数。 ( 例 2、 11、 101 )
1000 以下 の 回文 素数 で最大のものを求めてみたいと思います。
検証環境
| |
前回のおさらい : 素数を求めるワンライナー
1 から 1000 までの素数をワンライナーで列挙してみます。
| |
解説は前回のエントリを参照ください。シェルなら簡単ですね。
素数の内、回文であるもののみを出力する
素数がわかったので、この内回文のみを抽出してみます。
ここからはいい方法が思い浮かばなかったので、地道にループ処理を記述してみます。
whileコマンドで読み込むREPLYという変数に格納されるため、読み込んだ文字列$REPLYと 順序をrevでじっくり返した値を比較- 等しかったら
echoで出力する
実行結果は以下のとおりです。
| |
最期の1行だけを出力
後は最期の1行だけが欲しいため、 tail -n 1 でフィルタします。
| |
ひとこと
昔はこれをGroovyという言語でときました。 いつの間にかシェルが指に馴染む人間になってしまった。