Код работает, но я уверен, что можно было это сделать умнее. Без дополнительных переменных f и d. Что скажите? Просто интересно, не слишком ли огород нагородил?