Логика работы та же. Видоизменил код, добавил несколько других вариантов рассчета, которые оказались менее эффективными