
アニメ『91Days』(ナインティワンデイズ)
 マフィアの闘争で両親と弟を失ってしまった主人公の復讐がハードボイルドで描かれます。91daysというタイトルからして、復讐が91日間なんでしょうね。6話ぐらいまで見ましたが、復讐劇というよりも、策を使ったマフィアの闘争が面白いです。復讐するべき人物とは友情が芽生えるのでしょうけど、人生を復讐に捧げた主人公は友情より復讐を選ぶのでしょうか、気になります。暴力シーンが多いのですが、先が気になるので、最終回まで視聴確定です。
calコマンドでカレンダーが表示できますが、タイトル画像のような、復讐用の91日カレンダーを作ってみたいと思います。復讐最終日は12月31日に設定します。
まずは、calコマンドの使い方を確認します。
 calコマンドはオプションや引数なしで実行すると、今月のカレンダーを表示します。
~$ cal
~$ cal aug 2016
~$ cal 8 2016
今日が2016年8月なら、上3つのコマンドはすべて同じ結果が表示されます。
3ヶ月分表示するなら、-3オプション。
~$ cal -3

前後の月の表示数も指定することができます。
~$ cal -B1

 Bは、BeforeのB、AはAfterのAですね。
~$ cal -A3

一年間を表示するなら取得したいカレンダーの年をそのまま指定します。
~$ cal 2016

1月1日からの日数がほしい場合は、-jオプションを指定します。
~$ cal -j 2016

 (省略)
さて、91daysカレンダーです。
 復讐最終日を12月31日に設定しますので、その日を含め91日逆算して、復讐初日を算出します。
~$ date --date "20161231 90 days ago" 2016年 10月 2日 日曜日 00:00:00 JST ~$
算出した10月2日の、-j時の日付をさきほどのカレンダーから確認します。276でした。
cal -j 2016で表示される日付を置換するPerlスクリプトを作成しました。275としているのは、1から始めるためです。
~$ cat 91days.pl
open(FH,"cal -j 2016 |");
while(<FH>){
        unless(/月/){
                s/(\d+)/days($1)/ge;
        }
        print;
}
close(FH);
sub days{
        my($s) = @_;
        $ldays = $s - 275;
        if(($ldays < 1) or ($ldays > 91)){
                $s =~ s/./-/g;
        }else{
                $s = " " x ((length $s) - (length $ldays)). $ldays;
        }
        return $s;
}
結果は、タイトル画像のようになりますが、復讐用なので日常生活には役に立ちませんね。


コメント