У першій моїй спробі кодового гольфу для завдання "Відняти наступні числа" я почав з функції (58 байт)
int f(int N, int P){int F;for(F=N;P;F-=++N,P--);return F;}
тоді безпечні 5 байтів зі зміщенням на лямбда та переміщенням ініціалізації з for
(53)
[](int N,int P){int F=N;for(;P;F-=++N,P--);return F;}
і, нарешті, після переходу for
на « while
я» я отримав 51 байт:
[](int N,int P){int F=N;while(P--)F-=++N;return F;}
Код тестування, який не має волі, має щось на зразок:
#include <iostream>
int main(void)
{
int N, P;
std::cin >> N >> P;
auto f = [](int N,int P)
{
int F = N;
while (P--)
F -= ++N;
return F;
};
std::cout << f(N, P) << std::endl;
return 0;
}
ОНОВЛЕННЯ:
Насправді for
може досягати такої ж довжини, як while
:
[](int N,int P){int F=N;for(;P--;F-=++N);return F;}