Создавая приложение для одного из моих клиентов, мы с коллегой наткнулись на интересную проблему программирования. Мне редко нравились виджеты «указатель времени» для рабочего стола, поэтому мы остановились на простом текстовом вводе. Введите «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», соответствующие количеству минут.
  • Двоеточие может быть опущено, но все предыдущие правила должны применяться.
  • Ведущие или конечные пробелы игнорируются.
  • Другие символы считаются недопустимыми, и вся строка считается недействительной.