Дело было давно, в 2001 году, осенью.
Программист занимался поддержкой веб-сервиса,
на котором публиковалась хронологическая лента
твитов…
Ах нет, Твиттера тогда еще не было.
Публиковалась лента новостей
или чего-то подобного.
Важно то, что записи были отсортированы по времени.
И все было хорошо, пока однажды
записи не выстроились вот в таком странном порядке
(обратите внимание, что идет за отметкой 10:43):
Что происходит? В коде точно есть вызов sort,
сравнивающий таймстемпы записей!
9 сентября 2001 года случилась миллиардная секунда эпохи Unix,
и временные отметки в десятичном выражении стали на разряд длинее: 10 десятичных знаков вместо 9.
У сравнения чисел есть забавная особенность:
числа с одинаковым количеством разрядов (знаков) можно сравнивать и арифметически,
и лексикографически (как строки), результат будет одинаков.
Однако если числа разной разрядности сравнивать как строки, результат отличается от арифметического
сравнения.
Странный порядок записей в условии задачи –
результат лексикографического сравнения временных отметок.
Маленькая демонстрация, как такое могло получиться:
Соответственно, при сортировке новостей использовался вызов вида
, хотя следовало бы сделать
Лучшие решения прислали читатели Vladimir N. Indik и Кирилл. Здорово!
Написать эту задачу нас побудил рассказ одного нашего коллеги. Спасибо ему за историю ^_^