В карточной игре Magic: The Gathering есть пять разных цветов, которые обозначают рыхлую принадлежность карт: White ( W
), Blue ( U
), Black ( B
), Red ( R
) и Green ( G
). Они часто расположены в пятиугольнике следующим образом:
W
G U
R B
Как в знаниях MtG, так и во многих карточных механиках смежные цвета в этом пятиугольнике обычно считаются союзниками, а несмежные (своего рода противоположные) цвета считаются врагами.
В этом задании вы получите два цвета и должны определить их отношения.
Соревнование
Вам даны любые два разных персонажа из набора BGRUW
. Вы можете принять их как двухсимвольную строку, строку с разделителем между символами, два отдельных символьных значения, две одиночные строки, два целых числа, представляющих их кодовые точки, или тип списка или набора, содержащий два символа / строки / целые числа.
Ваш вывод должен быть одним из двух различных и последовательных значений по вашему выбору, один, который указывает, что два цвета являются союзниками, и один, который указывает, что они являются врагами. Одно из этих двух значений может вообще не выводиться.
Вы можете написать программу или функцию и использовать любой из наших стандартных методов получения ввода и предоставления вывода.
Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
Тестовые случаи
Есть только 20 возможных входных данных, поэтому я перечислю их все.
Друзья:
WU UB BR RG GW UW BU RB GR WG
недруги:
WB UR BG RW GU BW RU GB WR UG
источник
Ответы:
JavaScript (ES6),
26 23 17 1514 байтПринимает ввод как два кода ASCII в синтаксисе каррирования
(a)(b)
. Возвращается4
для друзей или0
для врагов.Попробуйте онлайн!
Как?
Примечание: только целое отношение деления на 0,6 показано ниже.
Предыдущий подход, 15 байтов
Принимает ввод как два кода ASCII в синтаксисе каррирования
(a)(b)
. Возвращается0
для друзей или1
для врагов.Попробуйте онлайн!
Как?
Начальный подход, 23 байта
Принимает ввод в виде 2-символьной строки. Возвращается
true
для друзей илиfalse
для врагов.Попробуйте онлайн!
источник
a*b%290&8
будет работать так же хорошо (продюсирование0
для друзей или8
для врагов).Желе , 6 байт
Принимает две точки кода в качестве аргумента. Выходит 1 для друзей, 0 для противников.
Попробуйте онлайн!
Фон
Пусть n и m будут кодами двух входных символов. Взяв | n - m | Нам нужно заниматься только всеми 2-мя комбинациями символов. В следующей таблице показаны все 2 комбинации символов и соответствующие абсолютные различия.
Все FOE комбинация делится на 3 , 5 или 7 , но ни один из друга комбинаций этого, поэтому друзья именно те, которые совместно с премьер 3 × 5 × 7 = 105 .
Как это устроено
источник
_
это желе. Вы использовали что-то еще?ạ
как абсолютную величину, а не абсолютную разницу.Python 2 , 19 байт
Попробуйте онлайн!
Анонимная функция: возвращается
1
для друзей и0
врагов.источник
Befunge-98,
1312 байтПопробуйте онлайн!
Принты
0
для друзей и1
враговЭто использует разницу между значениями ASCII букв.
Если мы возьмем
(((ASCII difference % 9) % 5) % 3)
, значения для врагов будут равны 0. Тогда мы не значение и напечатаем его.Спасибо @Martin за гольф
источник
IA%9%5%3¬
Edit Try It Online!Желе ,
87 байтОтыграйте сказочный ответ Befunge от Mistah Figgins !
Попробуйте онлайн!
Как?
Как заметила Миста Фиггинс, решение можно принять, взяв абсолютную разницу между значениями ASCII: мод 9, мод 5, мод 3 - 0 - это друзья, а 1 и 2 - враги.
Если вместо этого мы возьмем (простой) мод разницы 9, мы обнаружим, что друзья 1с, 2с, 7с и 8с, а враги 3с, 4с, 5с и 6с.
Код берет разницу с
I
и затем индексирует в список длины 9[1,1,0,0,0,0,1,1,0]
, который составляет 390 в двоичном виде390B
. Индексирование является как модульным (так эффективно индексирование выполняет мод 9 бесплатно), так и на основе 1 (отсюда и 1 слева).источник
Метапрограммирование шаблона C ++, 85 байт
меньше гольфа:
Поскольку это язык метапрограммирования, конструкция, компилируемая или нет, является одним из возможных выходных данных.
Экземпляр
f<'W','B'>
компилируется тогда и только тогда, когда'W'
и'B'
являются врагами.Математика основана на ответе Befunge .
Живой пример .
Поскольку метапрограммирование шаблонов C ++ является одним из худших языков игры в гольф, любой, кто хуже этого, должен чувствовать стыд. ;)
источник
template
s есть всего два лишних пробела .Рубин,
2219 байтВвод: ASCII-код из 2 символов. Выход: 1 для союзников, 0 для врагов.
Как это устроено:
Получите разницу между двумя числами по модулю 9, используйте битовую маску (390 - двоичная 110000110) и получите один бит, используя
[]
оператор.источник
->x,y{x*y%103%2}
обратите внимание, что0
и1
обратные.x*y%51>9
как и все остальные. Я думаю, что было бы несправедливо, чтобы противники так радикально изменили его сейчас.CJam , 8 байт
Безымянный блок, который ожидает двухсимвольные коды на вершине стека и заменяет их на
0
(друзья) или1
(враги).Попробуйте онлайн!
объяснение
Ну, теперь мы увидели много забавных арифметических решений, поэтому я думаю, что будет хорошо, если я представлю свое собственное. Самым близким к этому, что я видел до сих пор, является решение С Steadybox . Этот был найден с помощью брутфорсера GolfScript, который я написал некоторое время назад для анархического гольфа.
Вот что это делает с различными входами (игнорируя порядок, потому что начальное умножение коммутативно):
Мы можем видеть, как взятие произведения входных данных по модулю 51 хорошо разделяет входные данные на большие и маленькие результаты, и мы можем использовать любое из значений между ними, чтобы различать эти два случая.
источник
Рёда ,
302221 байтБайты сохранены благодаря @fergusq с помощью
_
получения значений потока в качестве входных данныхПопробуйте онлайн!
Функция запускается как
push "WU" | f
после присвоения имени функцииобъяснение
источник
{[(_.._)in"WUBRGWGRBUW"]}
но тогда функция должна быть вызвана как[a, b] | f
.05AB1E , 10 байтов
Возвращает 0 для друга и 1 для врага.
Попробуйте онлайн! или как тестовый набор
объяснение
источник
C,
3332292422 байтаВозвращает 1, если друзья, 0, если враги.
источник
Vim,
2221 байтВвод: одна строка, содержащая два символа.
Вывод: пустой буфер, если друзья, буфер, содержащий
WUBRGWGRBUW
врагов.объяснение
источник
C
вместоcw
Japt , 6 байт
Вдохновленный @Martin Эндера раствором .
Принимает массив из двух кодов символов в качестве входных данных.
Попробуйте онлайн! | Тестирование
Возвращается
true
для друзей,false
для врагов.14-байтовое решение:
Принимает два кодовых символа в качестве входных данных
Попробуйте онлайн! | Тестирование
Объяснение:
12-байтовое решение:
Попробуйте онлайн! | Тестирование
Объяснение:
Возвращается
1
для друзей и0
для врагов.9-байтовое решение :
Вдохновленный @ Arnauld в растворе .
Тестирование
Возвращается
1
для друзей,0
для врагов.11-байтовое решение:
вдохновленный @Mistah Figgins в растворе .
Тестирование
источник
Brain-Flak ,
155, 147, 135 байтовПопробуйте онлайн!
Это 134 байта кода плюс один байтовый штраф за
-a
флаг, который разрешает ввод ASCII.Это работает путем нахождения абсолютной разницы между входами и проверки, равны ли они 2, 11, 16 или 19. Если это так, входной сигнал является другом, и он печатает 1. Если это не так, он ничего не печатает. Так как ничто в мозге не соответствует пустому стеку, что ложно, никакой вывод не является ложным значением. ( мета )
Что мне особенно нравится в этом ответе, так это то, что фрагмент «абсолютной разницы» (то есть
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) не является чистым стеком, но его все же можно использовать в этом ответе, так как нам все равно, какой стек мы получим перед кодированием возможные различия.В более позднем редактировании я использовал это еще больше, злоупотребляя остатками в стеке, которые не заканчиваются абсолютной разницей в нем. На первой ревизии я вытащил их обоих, чтобы они были немного более вменяемыми. Не делать это дает два основных гольф:
Очевидно, что он удаляет код, чтобы вытолкнуть их:,
{}{}
но что более важно:Это позволяет нам сжимать
2, 11, 16, 19
последовательность изв
К счастью, нет никакого дополнительного кода, необходимого для обработки этих остатков позже, поэтому они просто остаются в альтернативном стеке.
Поскольку общеизвестно, что трудно понять мозг, вот читаемая / прокомментированная версия:
источник
Желе , 14 байт
Возвращается
1
за врагов и0
за друзей.Набор тестов на Попробуй онлайн!
Как?
источник
05AB1E , 7 байтов
Это порт моего желе ответа . Принимает список кодовых точек в качестве входных данных. Принты 1 для друзей, 0 для врагов.
Попробуйте онлайн!
Как это устроено
источник
CJam ,
16121110 байтГольф 4 байта с использованием алгоритма Mistah Figgins
Сохранено 1 байт благодаря Линн
Выходы
1
для цветов противника,0
для цветов союзников.Попробуйте онлайн! (Или проверьте все тестовые случаи )
объяснение
источник
l:m9%5%3%!
на байт короче.Сетчатка , 18 байт
Попробуйте онлайн!
Довольно просто: сортирует входные данные и пытается сопоставить любую из отсортированных союзных пар с ним. К сожалению, я не думаю, что струнный характер Retina позволяет любому из более интересных подходов быть конкурентоспособным.
В качестве краткого обзора следующей версии Retina я планирую добавить опцию, которая заменяет регулярное выражение и целевую строку (поэтому текущая строка будет использоваться в качестве регулярного выражения, а вы дадите ей строку для проверки), и в этом случае это короче Решение будет работать (или что-то в этом роде):
источник
Java (OpenJDK 8) ,
2823 байта-5 байт благодаря fergusq
Попробуйте онлайн!
источник
"WUBRGWGRBUW"::contains
?Брахилог , 10 байт
Простое решение, без хитростей.
Попробуйте онлайн!
объяснение
источник
Желе , 6 байт
Ради полноты. Принимает две точки кода в качестве аргумента. Выходит 0 для друзей, 1 для противников.
Попробуйте онлайн!
Фон
Пусть n и m будут кодами двух входных символов. Взяв | n - m | Нам нужно заниматься только всеми 2-мя комбинациями символов. В следующей таблице показаны все 2 комбинации символов и соответствующие абсолютные различия.
Если мы разделим эти целые числа на 3 , мы получим следующие коэффициенты.
1 , 4 и 7 можно сопоставить с 1 , взяв результаты по модулю 3 .
Теперь нам осталось взглянуть на паритет.
Как это устроено
источник
Cubix, 11 байт
Cubix-реализация решения Арно.
использование
Введите два символа, и он выводит
0
для друзей и1
для врагов. Попробуй это здесь.объяснение
Код может быть расширен следующим образом.
Символы выполняются в следующем порядке (исключая поток управления):
источник
Python 2 , 26 байт
Попробуйте онлайн!
источник
AWK, 23 байта
Пример использования: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Это печатает,
1
если пара - друг,0
иначе. Я хотел сделать что-то умное, но все, о чем я думал, будет дольше.источник
Желе , 12 байт
Выходы
1
для союзников,0
для врагов.Попробуйте онлайн!
объяснение
источник
Рубин, 28 байт
Выводы true для друга, false для врага:
Безголовая версия не сильно отличается:
источник
05AB1E , 7 байтов
Адаптация мод-трюка от Jonathan's Jelly answer
Попробуйте онлайн! или как тестовый набор
объяснение
источник
GolfScript , 7 байт
Принимает две кодовые точки в качестве ввода.
Попробуйте онлайн! (Набор тестов, который для удобства преобразует формат ввода.)
Порт GolfScript моего ответа CJam (который технически является портом CJam результата моего грубого форсинга GolfScript ... э-э-э ...).
Тем не менее, поскольку GolfScript работает по модулю с отрицательными входными данными правильно, есть забавное альтернативное решение с тем же количеством байтов, которое использует
4
для противников вместо1
:Попробуйте онлайн!
источник
Java 7, 38 байт
Порт от ответа @Mistah Figgins Befunge-98 является самым коротким в Java 7 из ответов, опубликованных до сих пор.
Что касается остальных:
39 байт: порт из ответа @Arnauld 's JavaScript (ES6) .
39 байт: порт из ответа CJam @MartinEnder
47 байт: порт от @Steadybox 'C ответа
52 байта: порт из ответа @Lynn 's Python 2
ПРИМЕЧАНИЕ. Пропущенные ответы, в которых используются простые числа / палиндромы и т. Д., Поскольку в Java их далеко нет. ;)
ТОДО: Придумываю свой ответ .. Хотя я сомневаюсь, что он короче, чем большинство из них.Попробуйте все здесь.
РЕДАКТИРОВАТЬ: Хорошо, я придумал что-то, что не так уж плохо:
50 байтов:
Объяснение:
Все враги находятся в диапазоне 4-6 (включительно) или 0.
EDIT2: Хмм .. Я только что заметил, что это очень похоже на ответ @Steadybox '.. :(
источник
PHP, 31 байт
Беги
echo AB | php -nR '<code>
, гдеA
иB
два цвета.strtr
возвращает строку из позиции, где найден ввод;с помощью
WBGURWRUGBW
haystack это возвращает правдивую строку, если цвета - враги; пустая строка, если нет.!
превращает правдивую строку вfalse
, что приводит к пустому выводу,а пустую строку к
true
, что приводит к выводу1
.источник