このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の日付セットから「曜日(large2) (paizaランク A 相当)」を取り上げます。
現時点でまだ挑戦中です。手強い…
以下は、問題公開 Web ページからの引用です。
問題
paiza暦y年m月d日が何曜日か表示してください。
ただし、paiza暦は現実世界で用いられているグレゴリオ暦とは異なる以下のルールで運用されることに注意してください。
- 1年は12ヶ月からなる
- 1ヶ月は30日からなる
- paiza暦年が閏年の場合は、12月が31日からなる
ただし、閏年は次のような年のことをいいます。
- paiza暦が4で割り切れる年は閏年
- ただし、100で割り切れる年は平年
- ただし、400で割り切れる年は閏年
また、曜日には次のルールがあります。
- 1週間は7日からなり、西暦のカレンダーと同様に”月”, “火”, “水”, “木”, “金”, “土”, “日”の各曜日が順に繰り返される
- paiza暦0年1月1日は、”木”曜日である
入力される値
整数yとmとdが次のように、スペース区切りで1行で入力されます。
1 |
y m d |
期待する出力
以下のような形式で、答えを出力してください。
1 |
a曜日 |
aは”月”, “火”, “水”, “木”, “金”, “土”, “日”のいずれかの文字です。
考え方
現在調整中。
解答例
まだバグが取れていません。
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 |
let ia = readLine()!.split(separator: " ").map { Int($0)! } var y = ia[0] var m = ia[1] var d = ia[2] // 土 y = 2019 m = 4 d = 19 // y = 0 // m = 1 // d = 1 // 水 // y = 9999999992 // m = 12 // d = 31 // 日 // y = 100000000000 // m = 1 // d = 1 let date = ["月", "火", "水", "木", "金", "土", "日"] var passDays = 0 passDays = 360 * y + (y / 4) - (y / 100) + (y / 400) + 30 * (m - 1) + d - 1 //print(passDays) print(date[(passDays + 3 ) % 7] + "曜日") |