How does this code look in terms of readability. Had some problems with naming here

Purpose of the code at the 1st comment.

I am aware that
first two constants can be replaced by function
or
the second constant can be generated by mapping from the first one.
But I don’t see any issues with my implementation also.

Main question, however
did I manage to name variables properly?

/*
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
*/

//CONSTANTS

//serial numbers of starting days of months

//for usual(non-leap) years

const firstsUsual = [
1, //jan
32, //feb
60, //mar
91, //apr
121, //may
152, //jun
182, //jul
213, //aug
244, //sep
274, //oct
305, //nov
335 //dec
]

//for leap years

const firstsLeap = [
1, //jan
32, //feb
61, //mar
92, //apr
122, //may
153, //jun
183, //jul
214, //aug
245, //sep
275, //oct
306, //nov
336 //dec
]

//1st jan 1900 >>> Monday
//thus
const sunday1900 = 7;

//HELPER FUNCTIONS

//UNIT1
//to check year: leap or not

const isLeap = (year) => {
return (year % 4 === 0 && year !== 1900)
? true : false;
}

//UNIT2
//to get serial number of the first sunday
//of the given year

const getFirstSunday = (year) => {
if (year === 1900) {return sunday1900;}
let firstSunday = sunday1900;
for (let i = 1901; i <= year; i++) {
if (isLeap(i - 1)) {firstSunday -= 2;}
else {firstSunday --;}
if (firstSunday === 0) {firstSunday = 7;}
else if (firstSunday === -1){firstSunday = 6;}
}
return firstSunday;
}

//UNIT3
//to count sundays which also were
//1st days of month in the given year

/*
logic

if 1st sunday >>> 7
all sundays >>> 7, 14, 21, 28...
thus
sunday % 7 === 0

if 1st sunday >>> 3
all sundays >>> 3, 10, 17, 24...
thus
sunday % 7 === 1st sunday
*/

const countFirstsAndAlsoSundays = (year, firstSunday) => {
let counter = 0;
let listOfFirsts;
if (isLeap(year)) {
listOfFirsts = firstsLeap;
}
else {
listOfFirsts = firstsUsual;
}
for (let day of listOfFirsts) {
if (firstSunday === 7) {
if (day % 7 === 0) {counter++;}
}
else {
if (day % 7 === firstSunday) {counter++;}
}
}
return counter;
}

//MAIN UNIT
//sum results from UNIT3 for years in the give range

function countingSundays(firstYear, lastYear) {
let sundaysInRange = 0;
for (let year = firstYear; year <= lastYear; year++) {
sundaysInRange += countFirstsAndAlsoSundays(
year, getFirstSunday(year)
)
}
return sundaysInRange;
}

countingSundays(1943, 1946);

I think that the variable names overall make sense to me.

1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.