[#оффтоп](?q=%23%D0%BE%D1%84%D1%84%D1%82%D0%BE%D0%BF)**_ 1 billion row challenge_**

Недавно зіткнувся на просторах інтернету [на челендж](https://github.com/gunnarmorling/1brc) по програмуванню. Ідея дуже проста. Прочитати файл на 1 млрд рядків якнайшвидше, але при тому не втрачати цілісність даних. Спочатку цей челендж був створений для Java, але з часом почали з'являтися write-up-и й від людей на інших мовах програмування. 

Файл складається з рядків у форматі `;`. Так як це 1 млрд рядків, то кінцевий обсяг файлу становить біля 12 ГБ. Виглядає воно десь так: 

Hamburg;12.0
Bulawayo;8.9
Palembang;38.8
St. John's;15.2
Cracow;12.6

Є додаткові нюанси, які потрібно враховувати, а саме:
- значення температури може бути в діапазоні [-99.9, 99.9].
- значення температури може мати лише одну дробову цифру.
- байтова довжина назви станції в діапазоні [1,100].
- максимум 10к унікальних назв станцій
- заокруглення повинно відбуватися відносно стандарту ІЕЕЕ 754, де воно відбувається в плюс

Вот це прям ідеальне академічне завдання, бо воно заставляє розширити мислення. Банальне рішення тут дуже просте, а вот коли вже пробуєш ввести оптимізацію, то починаєш розбиратися і в паралельному програмуванні і переходити на якісь low-level API, щоб максимально швидко все зчитати. Серйозно, це прикольне завдання. І да, звичайно, що малоймовірно, що хтось з вас зіткнеться з такою самою проблемою, але тут справа не в кінцевому результаті, а в тому, як ти думаєш про проблему і потенційні підходи до вирішення.

На Java прямолінійний підхід, де читається кожна строка без ніяких додаткових фіч становить ~6 хв, а найкращий результат, де все максимально оптимізовано - 1.5 сек. Якщо ти студент і вчиш програмування, то справді рекомендую попробувати цей челендж. 

[Вот один гарний write-up на цю тему.](https://www.bytesizego.com/blog/one-billion-row-challenge-go)