Snippets

sironekotoro 元号->西暦変換クイズ

Created by sironekotoro

File era_quiz.pl Added

  • Ignore whitespace
  • Hide word diff
+use strict;
+use warnings;
+use feature qw/say/;
+
+my @JAPANESE_ERA = (
+    { name => '明治', start => 1867, end => 1912 },
+    { name => '大正', start => 1911, end => 1926 },
+    { name => '昭和', start => 1925, end => 1989 },
+    { name => '平成', start => 1988, end => 2019 },
+
+    # { name => '令和', start => 2018, end => '',},
+);
+
+my $keys      = scalar @JAPANESE_ERA;
+my $era_index = int( rand($keys) );
+
+my $hash_ref = $JAPANESE_ERA[$era_index];
+my $era_span = $hash_ref->{end} - $hash_ref->{start};
+my $num      = int( rand($era_span) );
+
+print $hash_ref->{name} . $num
+    . '年は西暦何年でしょう? (数字だけ入力)> ';
+
+my $input = <STDIN>;
+chomp $input;
+
+if ( $input == ( $hash_ref->{start} + $num ) ) {
+    print "正解!\n";
+}
+else {
+    print "不正解!\n";
+
+}

File era_quiz_use_module.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/use/bin/env perl
+use strict;
+use warnings;
+use utf8; # ソースコードでマルチバイト文字を使う際に利用
+
+binmode( STDIN, 'encoding(utf8)' ); # 標準入力をutf8として認識する
+binmode( STDOUT, 'encoding(utf8)' );   # 標準出力をutf8にする
+binmode( STDERR, 'encoding(utf8)' );   # 標準エラー出力をutf8にする
+
+# モジュールを使って楽をする
+# Date::Japanese::Era - 和暦と西暦の相互変換
+# http://perldoc.jp/docs/modules/Date-Japanese-Era-0.03/lib/Date/Japanese/Era.pod
+use Date::Japanese::Era;
+
+# 明治6年(1973)よりグレゴリオ暦を採用
+# https://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB5%E5%B9%B4
+# > この布告によって、明治5年12月2日・西暦1872年12月31日をもって太陰太陽暦(天保暦)を廃止し、その翌日からグレゴリオ暦に移行[1]、明治6年(1873年)1月1日となることとしたため、明治5年は12月3日から12月30日までの28日間が存在しない。
+
+my $START_MEIJI_GREGORIO = 1873;
+my $NOW                  = 2019;
+
+# グレゴリオ暦採用以後のランダムな年を出すために計算
+my $rand_year = int( rand( $NOW - $START_MEIJI_GREGORIO ) );
+
+# ランダムな年数をグレゴリオ暦採用年に加えて、西暦を求める
+my $answer_year = $rand_year + $START_MEIJI_GREGORIO;
+
+# Date::Japanese::Era モジュールで楽をする
+my $era = Date::Japanese::Era->new( $answer_year, 1, 1 );
+
+
+# 問題文を作る
+print $era->name . $era->year
+    . "年1月1日は西暦何年でしょう?\n4桁の数字で回答してください > ";
+
+my $input = <STDIN>;
+chomp $input;
+
+if ( $input == $answer_year ) {
+    print "正解!\n";
+}
+else {
+    print "不正解!\n";
+}
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.