На этот раз ваша цель - найти максимум 3 целых числа (от - (2 ^ 31) до 2 ^ 31 - 1 в двоичном дополнении 2) без использования ветвления или циклов.
Вы только разрешено использовать
Неравенство / Равенство (
==
,>
,>=
,<
,<=
,!=
) Эти количества , как 2 - маркеров.Арифметика (
+
,-
,*
,/
)Логические операторы (
!
нет,&&
и,||
или)Побитовые операторы (
~
не,&
и,|
или,^
исключающий,<<
,>>
,>>>
арифметические и логические левые и правые сдвиги)Константы. 0 жетонов
Переменная присваивания. 0 жетонов
Введите 3 переменные как a
, b
и c
. Выведите максимальное количество.
Применяются стандартные атомные правила игры в гольф. Если у вас есть какие-либо вопросы, пожалуйста, оставьте их в комментариях. Один токен - любой из вышеперечисленных со специальными правилами.
Ответы:
Javascript 10 токенов
редактировать используя <и * вместо перестановки битов - как указано в комментариях, операции с битами могут быть неудачными для ввода вблизи предела диапазона (более 30 бит)
C 8 токенов
Фактически, независимость от языка подойдет для любого языка, подобного C. Чтобы быть разборчивым, в стандарте C это не переносимо, потому что смещение вправо может не расширять знак (но в обычных реализациях это делает).
В C (и C ++, C # и Java, я думаю) мы можем легко справиться с проблемами переполнения, используя большие временные значения:
источник
int
s ваш код не работает для x = 2147483647, y = -2, z = 0. Ваш выбор, если вы хотите изменить егоJavascript
6 жетонов
источник
&&
и,||
вероятно, было упущением, на которое следует указать, а не эксплуатировать.&&
,<
и>
.=
Используется как задание и рассчитывает как 0C: 10 жетонов
Вдохновлен ответом @ openorclose, но преобразован в C и сделан без ветвлений с использованием умножения, а не логических операторов короткого замыкания.
источник
Javascript
14 жетонов
источник
Многие языки (Python) (10 токенов)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
О, кто-то уже опубликовал это :)
источник
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
это именно то, что есть этот ответ. 2 отпечатка - просто контрольные примерыmax2(max2(x,y),z)
изначально :)C ++ 11: 15 токенов
Использование только арифметических и побитовых операторов (поскольку операторы равенства и логической логики делают это слишком простым) ...
источник
J (не конкурирует)
Мне было просто интересно, как будет выглядеть решение в J. Это использует
,
и#
хотя, поэтому он не будет конкурировать.Это будет конкурировать, но это слишком долго, с 9 токенами:
источник
у нас есть следующие предположения:
max (a; b) = (a + b + | ab |) / 2
макс (а, б, в) = тах (макс (а, б), в)
abs (a) = (a + (a >> 31)) ^ (a >> 31)
мы можем использовать псевдокод:
источник
C # (вторая попытка)
Я понял ... Нет встроенных функций ...
Но разрешено ли использовать другие интегрированные типы данных или просто обычный int? Если позволено, я бы предложил:
источник
JavaScript 8 токенов
хотя и похож на ответ @ openorclose, я фактически использую логические операторы для самого назначения.
играть на скрипке
источник
R (10 жетонов)
источник
Brainfuck (не конкурирует)
источник
ТИС-100, 8 операций
Поставщик (UP) выполняет только MOV, поэтому он не показан в коде. Может быть, не работает, когда слишком близко к краю 999
источник
VBA (6 токенов)
не уверен, что это не ветвление.
источник
IIf
, Inline-If. В большинстве языков это, напримерa>=b ? a : b
,. Это действительно ветвление.JavaScript: 4 токена (** на основе широкого толкования «назначения»!)
Очевидно, мой счет 4 чрезвычайно щедрый / снисходительный!
Для достижения этого результата я предположил, что «назначение» (в вопросе стоит 0 токенов) включает в себя такие вещи, как аддитивное назначение, вычитающее назначение, мультипликативное назначение и назначение XOR-ing (
^=
).Если эти назначения на самом деле рассчитывают счет 14 :)
источник
d -= b
что на самом деле это то же самоеd = d - b
, что я бы сказал, что вы используете арифметику и вам следует считать это токеном.