プレミアムデー問題
締め切りが 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
最新の画像[もっと見る]
-
算額(その2059) 1時間前
-
算額(その2057) 5時間前
-
算額(その2056) 20時間前
-
算額(その2055) 20時間前
-
算額(その2054) 1日前
-
算額(その2053) 1日前
-
算額(その2052) 1日前
-
算額(その2051) 1日前
-
算額(その2051) 1日前
-
算額(その2050) 2日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます