<<前のページ/戻る

プログラム・ハードボイルド(No002)

注意事項出題の傾向はできるだけ数学や専門知識を必要とせず、フレキシビリティをようするものとします。回答では行数の指定がある問題もあります。行数の指定はCを前提にし、マルチセンテンスは認めず、#includeは含めます。(そのままコンパイル実行できる必要があります。)回答にあたってはPerl、Rubyなどの言語よりCやBasic(VBを含む)、Javaなどの本格言語の方を優先する。特殊な言語での記述の方は事前に連絡をください。アセンブラは対象外とします。(当方のコンパイラなどの言語手配に限界がありますのと、あまりにマイナーだと独善的になりますので)


今回の問題(私が部下の能力チェックに必ず出題する定番問題、誰でも解けるかも知れない


今回は万年カレンダーを作成する問題です。Y2Kでおなじみとなったグレゴリオ暦の原則を述べます。Date等の関数はないものとする。(あっても、万年までには対応していないので、万年カレンダー作成は不可能であるが)

【グレゴリオ暦】 一五八二年、ローマ教皇グレゴリウス十三世が制定した太陽暦。
@西暦年数が四の倍数のときは閏年とし、他は平年とするもの。
Aただし100で割り切れるときは平年とする。
Bただし400で割り切れるときは閏年とする。
平年は2月は28日で一年は365日
閏年は2月は29日で一年は366日

【スカポロチンキ暦】 九九九九年地球連邦大統領が決定した暦
物語人類は幾多の同属の戦いで、壊滅的に人口が減少をした不幸な時期もあったが、一部のモンゴリアンは運良く50世紀まで生き残ることが可能だった。さらにときは経って、地球は「サルの惑星」にはならず、戦争の愚かさをさとり、99世紀の末、新たな歴史を作るためその比合理的なカレンダーの仕組みを変えることとなった。恐るべき事にグレゴリオ暦が在ったことすら奇跡ではあるが。すでに、地上は荒廃し、四季もなく、人類は巨大ドームのなかで、コントロールされた気候の中で生活していた。そこで、グレゴリオ暦は9999年十二月31日で終焉を迎え、翌日(グレゴリオ暦10000年1月1日)からスカポロチンキ暦がスタートされることとなった。スカポロチンキ暦は1000日を一年とした。7つの曜日は3つとなった。遊勉勤である。遊は遊ぶ日であり。勉は学ぶ曜日であり、勤は仕事をする日となった。スカポロチンキ暦0年の1日(西暦10000年1月1日)は遊曜日ときめられた。

問題3

グレゴリオ暦最後の月すなわち、9999年12月のカレンダーを表示せよ。ついでに、スカポロチンキ暦0年1日はグレゴリオ暦の何曜日か?

問題4

古代天文学によれば紀元248年9月5日北九州いったいは昼なのに真っ暗になった。皆既日食が起ったのである。よく天照大神の天の岩戸か卑弥呼の死亡に比定される。古代において、太陽神の信仰は比較的めづらしい。はたしてこの日は何曜日だったのか。また、この年の9月のカレンダーを表示せよ。

問題5

聖徳太子は推古女帝のもと593年05月15日国政に参加。621年3月3日に死亡するまで国政にたずさわっていた。その国政に携わっていた期間は何日か?

問題6

問題1を踏まえ、聖徳太子死亡はスカポロチンキ暦前何年何日か?