Создавая приложение для одного из моих клиентов, мы с коллегой наткнулись на интересную проблему программирования. Мне редко нравились виджеты «указатель времени» для рабочего стола, поэтому мы остановились на простом текстовом вводе. Введите «11:30», и он интерпретирует это как 11:30. Введите 1130, и он будет интерпретировать его точно так же. Введите «картофель», и, конечно же, он посчитает этот ввод недействительным. Итак, представляю вам:
Разбор Ката во времени
Ваша задача — написать и протестировать функцию, которая принимает строку и возвращает либо объект, содержащий hours
и minutes
, либо какое-то значение null
. Часы будут от 0 до 23, минуты от 0 до 59. Технические характеристики внизу этой статьи.
Что интересно в этой конкретной задаче, так это то, что вы можете использовать ее как отличный инструмент для изучения и закрепления основ использования регулярных выражений. Без них это болезненное упражнение. По мере того, как вы постепенно усложняете код, сила регулярных выражений становится все более и более очевидной. Вы можете, конечно, проявить фантазию и использовать какую-нибудь библиотеку синтаксического анализатора, но регулярное выражение, безусловно, сделает эту работу.
Этот ката также позволяет вам учиться и экспериментировать с проектированием отказоустойчивых алгоритмов. Когда что-то может или не может быть успешным, вы должны разработать свои алгоритмы по-другому.
Я нашел это ката чрезвычайно полезным в качестве инструмента, помогающего моему коллеге немного узнать о синтаксическом анализе, выявлении и отклонении неверных входных данных и написании чистого кода. Надеюсь, это будет полезно и вам!
Характеристики:
- Однозначные числа анализируются как час, соответствующий числу. Например, «8» интерпретируется как 8:00 утра.
- «10» и «11» анализируются как 10:00 и 11:00 соответственно.
- «12» анализируется как 12:00 (полдень).
- Суффиксы «a» или «am» (с пробелом или без него) гарантируют, что время указано в пределах первых двенадцати часов дня; то есть «12a» будет интерпретироваться как 00:00 (полночь).
- Суффикс «p» или «pm» (с начальным пробелом или без него) гарантирует, что время находится в пределах вторых двенадцати часов дня; то есть после полудня
- Предполагается, что двузначные числа больше 12 представлены в 24-часовом формате; например «13» интерпретируется как 13:00.
- Часы, превышающие 23, считаются недействительными.
- Часы, превышающие 12, за которыми следует либо «am», либо «pm» (или их варианты), считаются недействительными.
- За часами может следовать двоеточие и ровно две цифры в диапазоне от «00» до «59», соответствующие количеству минут.
- Двоеточие может быть опущено, но все предыдущие правила должны применяться.
- Ведущие или конечные пробелы игнорируются.
- Другие символы считаются недопустимыми, и вся строка считается недействительной.