タイムラインを作るぞ

更級日記方丈記を読んで、タイムライン(年表?)を作ってみたくなった。

イベント(人も出来事もイベントとして扱う)のリストを作る

$ more events 
紫式部,973?,1014?
菅原孝標女,1008,1059
平清盛,1118,1181
源頼朝,1147,1199
鴨長明,1155?,1216
藤原定家,1162,1241
明月記,1180,1235
養和の飢饉,1181,1181
吉田兼好,1283,1350

紫式部
https://kotobank.jp/word/%E7%B4%AB%E5%BC%8F%E9%83%A8-140850

ブリタニカ国際大百科事典 小項目事典「紫式部」の解説
紫式部
むらさきしきぶ
[生]天延1(973)頃
[没]長和3(1014)頃

菅原孝標女
https://ja.wikipedia.org/wiki/%E8%8F%85%E5%8E%9F%E5%AD%9D%E6%A8%99%E5%A5%B3

菅原孝標女(すがわら の たかすえ の むすめ、寛弘5年(1008年) - 康平2年(1059年)以降?)は、平安時代の貴族の女性。本名は伝わっていない。
10歳頃から50歳頃までの人生を回想した『更級日記』の作者。

更級日記
https://ja.wikipedia.org/wiki/%E6%9B%B4%E7%B4%9A%E6%97%A5%E8%A8%98

東山御文庫に伝えられてきた 藤原定家による写本、通称「御物本」が現存する。

藤原定家の書写、80丁
https://ja.wikipedia.org/wiki/%E6%9B%B4%E7%B4%9A%E6%97%A5%E8%A8%98#/media/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Teika-sarashina-nikki-calligraphy.png

タイムラインを描くプログラムを作る

(my_timeline.pl)

#!/usr/bin/env perl

$min = undef;
$max = undef;

$i = 0;
while(<>){

  chomp();
  ($name,$start,$end) = split(/,/);

  $event[$i][0] = $name;
  if( $start =~ /(\d+)(\?*)/ ){
    $start = $1;
    $event[$i][1] = $1;
    $event[$i][3] = $2;
  }
  if( $end =~ /(\d+)(\?*)/ ){
    $end = $1;
    $event[$i][2] = $1;
    $event[$i][4] = $2;
  }

  if( $min eq undef || $start < $min ){ $min = $start; }
  if( $max eq undef || $max < $end ){ $max = $end; }

  $i++;

}
$n = $i;

print "min:$min\n";
print "max:$max\n";
$min_dig = int(log($min)/log(10));
$max_dig = int(log($max)/log(10));
$min = int( $min / 100 ) * 100;
$max = int( $max / 100 + 1 ) * 100;
print "range:$min-$max\n";

$split = 5;
#$inc = ( $max - $min ) / $split;

#年を描く
for($i=$min;$i<$max;$i+=$split){
  if( $i % 50 == 0 ){
    print $i;
    $len = length($i) - 1;
  }elsif( $len > 0 ){
    $len--;
  }else{
    print " ";
  }
}
print "\n";

for($i=$min;$i<$max;$i+=$split){
  if( $i % 50 == 0 ){
    print "+";
  }else{
    print "-";
  }
}
print "\n";

#個々のイベントを描く
for($i=0;$i<$n;$i++){
  for($j=$min; $j<$max; $j += $split){
    if( $j <= $event[$i][1] && $event[$i][1] < $j + $split ){
      if( $event[$i][3] ){
        print "?";
      }else{
        print "I";
      }
    }elsif( $j <= $event[$i][2] && $event[$i][2] < $j + $split ){
      if( $event[$i][4] ){
        print "?";
      }else{
        print "I";
      }
    }elsif( $event[$i][1] < $j && $j + $split <= $event[$i][2] ){
      print "-";
    }else{
      print " ";
    }
  }
  print "$event[$i][0],$event[$i][1]$event[$i][3],$event[$i][2]$event[$i][4]\n";
}

実行してみる

$ ./my_timeline.pl events 
min:973
max:1350
range:900-1400
900       950       1000      1050      1100      1150      1200      1250      1300      1350      
+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------
              ?-------?                                                                             紫式部,973?,1014?
                     I---------I                                                                    菅原孝標女,1008,1059
                                           I------------I                                           平清盛,1118,1181
                                                 I---------I                                        源頼朝,1147,1199
                                                   ?-----------I                                    鴨長明,1155?,1216
                                                    I---------------I                               藤原定家,1162,1241
                                                        I----------I                                明月記,1180,1235
                                                        I                                           養和の飢饉,1181,1181
                                                                            I-------------I         吉田兼好,1283,1350


菅原孝標女が幼少の頃、まだ紫式部は生きていた?
菅原孝標女が亡くなってから、藤原定家が生まれるまで100年以上の開きがある。
養和の飢饉が藤原定家鴨長明に与えたインパクトは大きいのか?