Волна анекдотов, и я вставлю свои 2к рублей
Решили как-то физик, математик и программист написать код для электронных часов на Arduino.
**Физик** (практик, привыкший к измерениям):
— "Берем общее время в секундах, преобразуем в строку и вытаскиваем каждую цифру отдельно!"
```cpp
String timeStr = String(time);
digit1 = timeStr.substring(0,1).toInt(); // десятки минут
digit2 = timeStr.substring(1,2).toInt(); // единицы минут
digit3 = timeStr.substring(2,3).toInt(); // десятки секунд
digit4 = timeStr.substring(3,4).toInt(); // единицы секунд
```
Логично же — мы видим цифры на дисплее, вот и работаем с ними как с цифрами!
**Математик** (любитель элегантности):
— "Какие строки? Используем красоту арифметики!"
```cpp
digit1 = time / 600 % 10; // десятки минут
digit2 = time / 60 % 10; // единицы минут
digit3 = time / 10 % 6; // десятки секунд
digit4 = time % 10; // единицы секунд
```
Математически строго и эффективно!
**Программист** (помолчав, пишет):
```cpp
struct Time {
uint8_t min_10, min_1, sec_10, sec_1; // каждая цифра сразу
};
void increment(Time &t) {
if (++t.sec_1 > 9) {
t.sec_1 = 0;
if (++t.sec_10 > 5) {
t.sec_10 = 0;
if (++t.min_1 > 9) {
t.min_1 = 0;
t.min_10++;
}
}
}
}
```
Физик и математик хором:
— Да это читерство! Ты вообще избежал всех преобразований!
Программист:
— Я не избежал, я выбрал правильное представление данных. Ваши методы — это как вычислять координаты в чужой системе, а мой — работать в своей.
А в чем бы вы оказались правы? 👇