Учитывая список действий и их время начала / дату, выведите календарь ASCII-искусства, показывающий действия в соответствующие дни. Все действия гарантированно будут выполняться в одном месяце, никакие два действия не будут выполняться в один и тот же день, и все действия гарантированно помещаются в поле календаря.
Календарь имеет дату в верхнем левом углу каждого блока, прямоугольники имеют ширину 9 и 5 пробелов в окружении -
и |
. Двухбуквенное сокращение дня недели расположено по центру над первым рядом, а недели начинаются с воскресенья.
Например, с учетом следующих действий:
10/5/2018 - 9:00am - Sandbox calendar challenge
10/9/2018 - 9:00am - Post challenge to main
10/10/2018 - 10:00am - Profit
10/31/2018 - 7:30pm - Halloween party
Выведите этот соответствующий календарь:
Su Mo Tu We Th Fr Sa
-----------------------------------------------------------------------
| |1 |2 |3 |4 |5 |6 |
| | | | | |9:00am | |
| | | | | |Sandbox | |
| | | | | |calendar | |
| | | | | |challenge| |
-----------------------------------------------------------------------
|7 |8 |9 |10 |11 |12 |13 |
| | |9:00am |10:00am | | | |
| | |Post |Profit | | | |
| | |challenge| | | | |
| | |to main | | | | |
-----------------------------------------------------------------------
|14 |15 |16 |17 |18 |19 |20 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|21 |22 |23 |24 |25 |26 |27 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|28 |29 |30 |31 | | | |
| | | |7:30pm | | | |
| | | |Halloween| | | |
| | | |party | | | |
| | | | | | | |
-----------------------------------------------------------------------
Разъяснения
- Слова расписания (соответствующие [A-Za-z] +) будут разделены одним пробелом между ними (как в примере).
- Разделение текста по границам слова достаточно. Нет необходимости в переносе слов.
- Если февраль начинается в воскресенье не в високосный год, у вас будет только четыре календарных строки.
- Если 31-дневный месяц (например, август) начинается в конце недели, вам может потребоваться вывести шесть календарных строк.
I / O и правила
- Ваш код должен обрабатывать даты, по крайней мере, между
0001-01-01
и9999-12-31
в григорианском календаре, включая високосные годы в зависимости от ситуации. Например, если заданы входные данные2016-02-13 9:00am Test
, выходной календарь должен иметь 29 февраля. - Формат ввода даты может быть в любом желаемом формате. ISO 8601,
datetime
объект, строка специального формата и т. Д. Разбор входных данных не является интересной частью этой задачи. - Ввод и вывод может быть любым удобным способом .
- Лидирующие / завершающие символы новой строки или другие пробелы являются необязательными, при условии, что символы располагаются соответствующим образом.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Вывод может быть на консоль, возвращен в виде списка строк, возвращен в виде одной строки и т. Д.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
1752-09-02 - 09:00am - Wife's Birthday Tomorrow (14th!)