Дан простой текстовый файл с IPv4 адресами. Одна строка – один адрес, примерно так:

145.67.23.4
8.34.5.23
89.54.3.124
89.54.3.124
3.45.71.5
...

Файл в размере не ограничен и может занимать десятки и сотни гигабайт.

Необходимо посчитать количество уникальных адресов в этом файле, затратив как можно меньше памяти и времени. Существует "наивный" алгоритм решения данной задачи (читаем строка за строкой, кладем строки в HashSet), желательно чтобы ваша реализация была лучше этого простого, наивного алгоритма.

Немного деталей:

  • По всем вопросам смело писать на join@ecwid.com
  • Использовать можно только возможности стандартной библиотеки Java/Kotlin
  • Писать нужно на Java (версия 11 и выше) или Kotlin.
  • В задании должен быть рабочий метод main(), это должно быть готовое приложение, а не просто библиотека
  • Сделанное задание необходимо разместить на GitHub

Прежде чем отправить задание, имеет смысл проверить его вот на этом файле. Внимание – файл весит около 20Gb, а распаковывается приблизительно в 120Gb.

java -jar ecwid-1.0-SNAPSHOT.jar /Users/pavel/Downloads/ip_addresses
Started at: Tue Oct 04 21:19:53 AMT 2022
file size: 109139 MB
Ended at:   Tue Oct 04 21:38:02 AMT 2022
Consumed time: PT18M8.588S
Unique ips: 499974173
Used Memory: 2626 MB