(JS)Programmers:2016年


問題の説明


2016年1月1日は金曜日です.2016年a月b日は何曜日ですか?2つの数a,bを入力し,2016年a月b日が曜日である関数を返し,解を完成する.日曜日の名称は日曜日から土曜日までSUN、MON、TUE、WED、THU、FRI、SAT
.たとえば、a=5、b=24の場合は、5月24日が火曜日であるため、文字列TUEを返します.

せいげんじょうけん


2016年は閏年です.
2016年a月b日は実在の日です
(13月26日または2月45日などの日付は提供されません)

I/O例



問題を解く


今週のJavaScript DOM課題はカレンダー作成なので、コンセプトを学びながら選択する問題です.問題自体は簡単で、難しくない.
参照用に毎週1つの配列に配置します.
基準点となる2016年をnewdateのパラメータとして
問題は月と日付を解関数のパラメータとして使用しているからです.
new Dateに入るパラメータの変数として使用します.
function solution(a, b) {
    const week = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
    const currentTime = new Date(`2016-${a}-${b}`).getDay();
    return week[currentTime];
}

他人を解く

function solution(a, b) {
    const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
    const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]

    let days = b
    for(let i=0 ; i<a-1 ; i++)
        days += monthDay[i];

    return weekDay[days%7];
}
データ・オブジェクトを使用せず、アルゴリズムのみを使用して解決する問題.
2016年各月の日数を並べ、基準となる参考値を用意しています.
毎月の日数を参照するためにfor繰返し文ではa-1を用いた.
アルゴリズムだけで問題を解くと,この解決法はより正解に近い.