Our calendar is a table with numbers from `1`

to the last day of the month. The problem is that
the numbers in the table in the first row don't
have to come from the first cell.

This is generally obvious. It's not obvious which cell to start with. Let's think.

Let the week start on Monday, and it is day zero.
In this case, the number of the day of the week
on the month first day corresponds to the number
of empty cells before it. For example, Thursday
will have the number `3`

and preceded by
`3`

empty cells.

A similar problem will await us at the end of the table. There, too, you need to leave empty cells after the last day of the month. In this case, the number of empty cells will be equal to six, from which you need to subtract the day number of the week of the month last day.

Now let's think about how we will form our table.
Obviously, it is most convenient to have a
two-dimensional array, each sub-array of which
will have `7`

elements (= the number of days
in a week). In this case, in the first and last
subarrays, some of the elements must be empty.

## Algorithm of actions

Let's make a function that will make an array of
numbers from `1`

to the last day of the month.
Then we will make a function that will prepend the
required number of empty elements to the beginning
of the array. A similar function should append
empty elements to the end of the array.

After that, we get a one-dimensional array with the
number of elements that is a multiple of `7`

.
Let's transform this array into two-dimensional with
`7`

elements in the subarray.

Then we take this two-dimensional array, loop through it and form our table.

We will perform this algorithm of actions step by step in the following lessons.