We can use Zeller’s Congruence, a well-known formula to compute the day of the week for any given date. It works by transforming the date into a formula that outputs the weekday as an integer, which we can map to the required weekday names.
classSolution {
public: string dayOfTheWeek(int d, int m, int y) {
vector<string> wd = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
if (m <3) {
m +=12;
y--;
}
int k = y %100;
int j = y /100;
int h = (d +13* (m +1) /5+ k + k /4+ j /4+5* j) %7;
// Zeller's: 0=Saturday, 1=Sunday, ...
return wd[(h +6) %7];
}
};
classSolution {
public String dayOfTheWeek(int d, int m, int y) {
String[] wd = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
if (m < 3) {
m += 12;
y--;
}
int k = y % 100;
int j = y / 100;
int h = (d + 13 * (m + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7;
return wd[(h + 6) % 7];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
fundayOfTheWeek(d: Int, m: Int, y: Int): String {
val wd = listOf("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
var mm = m
var yy = y
if (mm < 3) {
mm +=12 yy-- }
val k = yy % 100val j = yy / 100val h = (d + 13 * (mm + 1) / 5 + k + k / 4 + j / 4 + 5 * j) % 7return wd[(h + 6) % 7]
}
}
1
2
3
4
5
6
7
8
9
10
classSolution:
defdayOfTheWeek(self, d: int, m: int, y: int) -> str:
wd = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
if m <3:
m +=12 y -=1 k = y %100 j = y //100 h = (d +13* (m +1) //5+ k + k //4+ j //4+5* j) %7return wd[(h +6) %7]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
impl Solution {
pubfnday_of_the_week(d: i32, m: i32, y: i32) -> String {
let wd = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
let (mut m, mut y) = (m, y);
if m <3 {
m +=12;
y -=1;
}
let k = y %100;
let j = y /100;
let h = (d + (13* (m +1)) /5+ k + k /4+ j /4+5* j) %7;
wd[((h +6) %7) asusize].to_string()
}
}