Кожен, хто помірно оптимізує код низького рівня, знає про небезпеку розгалуження, будь то реалізована як оператори if, циклі або select-заяви, можливість помилкового прогнозування гілки - жахлива річ, що витрачає годинник.
Прості задачі можна вирішити набагато краще за допомогою простої арифметики, тому давайте це зробимо.
Для наведених нижче проблем усі змінні - це 32-бітні непідписані цілі числа, і єдиний дозволений код - це просто встановлені оператори, що включають лише наступні оператори:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
Кожен рядок повинен складатися з ідентифікатора змінної, за яким слідує оператор набору, а потім - вираз.
Вираз може не містити додаткових операторів набору, але може містити ідентифікатори змінних, буквальні числа та круглі дужки.
Оцінка гольфу повинна враховувати лише кількість операторів.
Приклад:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Має оцінку 5 операторів.
Рішення може включати стільки змінних, скільки автор вважає за потрібне.
Змінні, які не були встановлені, мають значення 0.
Дозволено переповнення та переповнення, усі негативні числа підпадають, так 3 - 5само 4294967294, навіть як частина більшого твердження.
Завдання 1: Макс
Два значення, Aі Bіснують у області, змушують RESULTзмінну містити найбільше з цих значень, коли програма припиняється.
Завдання 2: Медіана
Три значення, A, Bі C, існує в обсязі, зробити RESULTзмінний містять медіану тих значень , коли програма завершує свою роботу .
Завдання 3: квадратний корінь
Одне значення, яке Aіснує в області, змушує RESULTзмінну містити квадратний корінь A, округлений вниз, коли програма закінчується.
Неправильно розмістити відповідь лише на одне-два питання, для когось із вас просто пошук правильних рішень стане проблемою.
0xFFFF_FFFF_FFFF_FFFF ^ xі 0 - x. Як я міг забути?
!є також досить тривіально: x == 0.
Boole[a-b]?
-але~може бути приємно (навіть якщо я не знаю, для чого).