裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

プレミアムデー問題

2017年04月06日 | ブログラミング

プレミアムデー問題

締め切りが 2017/04/06 10:00 AM なので,その 1 分後に投稿されるように予約

仕様

その月の任意の曜日の最後の日付をプレミアムデーとします。
年月と曜日を表す数値を入力としてうけとり、プレミアムデーをYYYYMMDD形式で出力するプログラムを作成してください。

標準入力

・年, 月, 曜日を表す数値がカンマ区切りで入力されます
・年は4桁の数値です。入力される範囲は 2000-2100 です。
・月は1-2桁の数値です。入力される範囲は 1-12 です。
 例えば1月は1として入力されます。01として入力されることはありません。
・曜日を表す数値は以下の対応関係になっています。

0: 日曜日
1: 月曜日
2: 火曜日
3: 水曜日
4: 木曜日
5: 金曜日
6: 土曜日


例: (2017年3月の金曜日)

2017,3,5

標準出力

・YYYYMMDD 形式で出力する
・MM 月は必ず2桁で0詰して表示する

例(入力の例に対する出力の例)

20170331

その他の仕様

・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・存在しない日付の入力はありません
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)

===============================

システムの cal コマンドの出力を利用する

$ cal 11 2017
     11月 2017
日 月 火 水 木 金 土
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

f = function(s) {
    op = options(warn=-1)
    s = as.integer(strsplit(s, ",")[[1]])
    a = system(sprintf("cal %s %s", s[2], s[1]), intern=TRUE)
    a = as.integer(sapply(a, substr, 3*s[3], 3*s[3]+2))
    cat(sprintf("%4d%02d%02d", s[1], s[2], tail(a[!is.na(a)], 1)))
    options(op)
}

f("2017,11,3") # 20171129
f("2017,9,6") # 20170930
f("2016,2,1") # 20160229


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 幹事が楽な歓送迎会 | トップ | 数字の各桁の和と積 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事