В том же духе, что и здесь, вот реальная загадка, которая может послужить хорошим (или раздражающим) вопросом для собеседования — связана с тем, с чем мне приходилось сталкиваться сегодня на работе.
Существует несколько типов авиационных метеорологических бюллетеней, которые используются во всем мире и часто имеют решающее значение для деятельности авиакомпаний и т. Д. Многие из них были разработаны до появления XML и, как правило, имеют «интересные» форматы — интересно понимать, еще интереснее разбирать , Я предполагаю, что дизайн был обусловлен системными ограничениями — днями, когда несколько байтов здесь или там действительно имели значение — а также уникальным взглядом авиационной отрасли на мир — что-то вроде RFC 3339 было бы чистой расточительной роскошью.
Например, отчеты METAR описывают текущие погодные условия в аэропорту, а TAF — прогноз погоды для аэропорта.
Теперь данный прогноз TAF будет действителен в течение максимум 24 часов и минимум минимум одного часа (на практике, как правило, не менее шести часов, я считаю). Под «действительным» в этом контексте я подразумеваю период времени, за который информация, содержащаяся в прогнозе, может рассматриваться как точная.
Вы можете посмотреть TAF онлайн здесь — например, попробуйте ввести код EDDF (аэропорт Франкфурта в Германии) — это более длинные прогнозы TAF — действительные до 24 часов. Здесь также есть прогнозы TAF для более коротких периодов времени (например, 9 или 12 часов).
Глядя на короткий прогноз по Франкфурту (EDDF), выпущенный сегодня в 18:00 UTC , мы имеем;
TAF EDDF 061800Z 061904 19012KT 9999 SCT015 BKN030 TEMPO 2204 RA BKN012
Число, которое я выделил — 061904 — описывает достоверность прогноза (я думаю, что первые две цифры иногда опускаются, но для этого обсуждения мы проигнорируем это и скажем, что это всегда шесть цифр).
Представьте, что вы создаете веб-приложение для получения прогнозов. Пилоты вводят код аэропорта, например «EDDF», и этот шестизначный код в форме.
Получив запрос, сначала необходимо проверить шестизначный код, который вводит пилот, а затем извлечь из него две даты для выполнения SELECT.
Вот некоторые «модульные тесты» для функции проверки;
- input: 150024 — функция возвращает ‘valid’
- input: 340312 — функция возвращает ‘invalid’
- input: 070315 — функция возвращает ‘valid’
- вход: 081221 — функция возвращает ‘valid’
- input: 000305 — функция возвращает ‘invalid’
- input: 070606 — функция возвращает ‘valid’
Напишите функцию для проверки шестизначного кода.
Напишите другую функцию (в этот раз тесты недоступны), которая возвращает начальную дату / время и конечную дату / время для периода действия.
Кстати, просто для интереса: есть TAF-декодеры с открытым исходным кодом — PHP Weather поддерживает это, я полагаю, как и Geo :: TAF . А Geo :: METAR — это работа Джереми Заводного — наверное, вот почему . В любом случае — не позволяйте этому отвлекать вас;)