Магическое Собрание: Друзья или Враги?

67

В карточной игре 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
Мартин Эндер
источник
33
Далее: реализовать основные правила: P
Капитан Мэн
12
@CaptainMan, я буду поддерживать вас, если вы сможете разместить его в посте с 30-
тысячным
@ Walfrat 30k? Должно быть возможно
не то, что Чарльз
2
@IvanKolmychek из самых неожиданных союзов приходит самые неожиданные результаты.
aluriak
1
Интересный факт: магия: сбор завершен :)
Мэттью Ро

Ответы:

82

JavaScript (ES6),  26 23 17 15  14 байт

Принимает ввод как два кода ASCII в синтаксисе каррирования (a)(b). Возвращается 4для друзей или 0для врагов.

a=>b=>a*b/.6&4

Попробуйте онлайн!

Как?

Примечание: только целое отношение деления на 0,6 показано ниже.

Combo | a  | b  | a*b  | / 0.6 | AND 4
------+----+----+------+-------+------
  WU  | 87 | 85 | 7395 | 12325 |   4
  UB  | 85 | 66 | 5610 |  9350 |   4
  BR  | 66 | 82 | 5412 |  9020 |   4
  RG  | 82 | 71 | 5822 |  9703 |   4
  GW  | 71 | 87 | 6177 | 10295 |   4
  UW  | 85 | 87 | 7395 | 12325 |   4
  BU  | 66 | 85 | 5610 |  9350 |   4
  RB  | 82 | 66 | 5412 |  9020 |   4
  GR  | 71 | 82 | 5822 |  9703 |   4
  WG  | 87 | 71 | 6177 | 10295 |   4
------+----+----+------+-------+------
  WB  | 87 | 66 | 5742 |  9570 |   0
  UR  | 85 | 82 | 6970 | 11616 |   0
  BG  | 66 | 71 | 4686 |  7810 |   0
  RW  | 82 | 87 | 7134 | 11890 |   0
  GU  | 71 | 85 | 6035 | 10058 |   0
  BW  | 66 | 87 | 5742 |  9570 |   0
  RU  | 82 | 85 | 6970 | 11616 |   0
  GB  | 71 | 66 | 4686 |  7810 |   0
  WR  | 87 | 82 | 7134 | 11890 |   0
  UG  | 85 | 71 | 6035 | 10058 |   0

Предыдущий подход, 15 байтов

Принимает ввод как два кода ASCII в синтаксисе каррирования (a)(b). Возвращается 0для друзей или 1для врагов.

a=>b=>a*b%103%2

Попробуйте онлайн!

Как?

Combo | a  | b  | a*b  | MOD 103 | MOD 2
------+----+----+------+---------+------
  WU  | 87 | 85 | 7395 |    82   |   0
  UB  | 85 | 66 | 5610 |    48   |   0
  BR  | 66 | 82 | 5412 |    56   |   0
  RG  | 82 | 71 | 5822 |    54   |   0
  GW  | 71 | 87 | 6177 |   100   |   0
  UW  | 85 | 87 | 7395 |    82   |   0
  BU  | 66 | 85 | 5610 |    48   |   0
  RB  | 82 | 66 | 5412 |    56   |   0
  GR  | 71 | 82 | 5822 |    54   |   0
  WG  | 87 | 71 | 6177 |   100   |   0
------+----+----+------+---------+------
  WB  | 87 | 66 | 5742 |    77   |   1
  UR  | 85 | 82 | 6970 |    69   |   1
  BG  | 66 | 71 | 4686 |    51   |   1
  RW  | 82 | 87 | 7134 |    27   |   1
  GU  | 71 | 85 | 6035 |    61   |   1
  BW  | 66 | 87 | 5742 |    77   |   1
  RU  | 82 | 85 | 6970 |    69   |   1
  GB  | 71 | 66 | 4686 |    51   |   1
  WR  | 87 | 82 | 7134 |    27   |   1
  UG  | 85 | 71 | 6035 |    61   |   1

Начальный подход, 23 байта

Принимает ввод в виде 2-символьной строки. Возвращается trueдля друзей или falseдля врагов.

s=>parseInt(s,35)%9%7<3

Попробуйте онлайн!

Arnauld
источник
10
Ах, наконец, что-то веселое. :)
Мартин Эндер
4
Фантастическая находка!
Грег Мартин
Есть ли какие-нибудь умные математики, о которых я здесь не знаю, или вы просто перебирали разные модули, пока не получили тот, который сработал?
FourOhFour
@FourOhFour Это было грубое принуждение. Я думаю, что это самое маленькое двойное по модулю решение. Но порт этого ответа (который использует сравнение) будет на один байт короче.
Арно
1
@OddDev Я на самом деле проверил все биты, а не только наименее значимые. Например, a*b%290&8будет работать так же хорошо (продюсирование 0для друзей или 8для врагов).
Arnauld
37

Желе , 6 байт

ạg105Ị

Принимает две точки кода в качестве аргумента. Выходит 1 для друзей, 0 для противников.

Попробуйте онлайн!

Фон

Пусть n и m будут кодами двух входных символов. Взяв | n - m | Нам нужно заниматься только всеми 2-мя комбинациями символов. В следующей таблице показаны все 2 комбинации символов и соответствующие абсолютные различия.

WU  2
UB 19
BR 16
RG 11
GW 16

WB 21
UR  3
BG  5
RW  5
GU 14

Все FOE комбинация делится на 3 , 5 или 7 , но ни один из друга комбинаций этого, поэтому друзья именно те, которые совместно с премьер 3 × 5 × 7 = 105 .

Как это устроено

ạg105Ị  Main link. Left argument: n (code point). Right argument: m (code point)

ạ       Yield the absolute difference of n and m.
 g105   Compute the GCD of the result and 105.
     Ị  Insignificant; return 1 if the GCD is 1, 0 if not.
Деннис
источник
Красиво замечен! Зачем нужна абсолютная величина? (Я попробовал это онлайн, и он не дал правильного ответа; но математически это не должно иметь значения.)
Грег Мартин
@GregMartin Это не обязательно; Разница со знаком будет работать так же хорошо. Вычитание - _это желе. Вы использовали что-то еще?
Деннис
Ах, я вижу, я неправильно прочитал как абсолютную величину, а не абсолютную разницу.
Грег Мартин
21

Befunge-98, 13 12 байт

~~-9%5%3%!.@

Попробуйте онлайн!

Принты 0для друзей и 1врагов

Это использует разницу между значениями ASCII букв.

Если мы возьмем (((ASCII difference % 9) % 5) % 3), значения для врагов будут равны 0. Тогда мы не значение и напечатаем его.

Спасибо @Martin за гольф

MildlyMilquetoast
источник
Используйте Jelly для 9 байт: IA%9%5%3¬Edit Try It Online!
Джонатан Аллан
@JonathanAllan Я вижу, ты уже сделал! Приятно.
MildlyMilquetoast
Я фактически изменил ваш метод (используя фактическую, а не абсолютную разницу) мод 9 мод 6 и использовал тот факт, что Jelly индексирует в списки модульно, чтобы уменьшить его до 7 . Я аккредитовал вас и связался здесь.
Джонатан Аллан
@JonathanAllan Я тоже придумал метод mod 9 mod 6, но у Befunge нет фактической разницы или абсолютного значения, так что это было не так выполнимо
MildlyMilquetoast
18

Желе , 8 7 байт

Отыграйте сказочный ответ Befunge от Mistah Figgins !

Iị390B¤

Попробуйте онлайн!

Как?

Как заметила Миста Фиггинс, решение можно принять, взяв абсолютную разницу между значениями 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 слева).

Джонатан Аллан
источник
16

Метапрограммирование шаблона C ++, 85 байт

template<int A,int B,int=(A-B)%9%5%3>struct f;template<int A,int B>struct f<A,B,0>{};

меньше гольфа:

template<int A, int B,int Unused=(((A-B)%9)%5)%3>
struct foe;
template<int A, int B>
struct foe<A,B,0>{};

Поскольку это язык метапрограммирования, конструкция, компилируемая или нет, является одним из возможных выходных данных.

Экземпляр f<'W','B'>компилируется тогда и только тогда, когда 'W'и 'B'являются врагами.

Математика основана на ответе Befunge .

Живой пример .

Поскольку метапрограммирование шаблонов C ++ является одним из худших языков игры в гольф, любой, кто хуже этого, должен чувствовать стыд. ;)

Yakk
источник
Похоже, что внутри templates есть всего два лишних пробела .
Yytsi
@TuukkaX исправлено,
д'Ох
14

Рубин, 22 19 байт

->x,y{390[(x-y)%9]}

Ввод: ASCII-код из 2 символов. Выход: 1 для союзников, 0 для врагов.

Как это устроено:

Получите разницу между двумя числами по модулю 9, используйте битовую маску (390 - двоичная 110000110) и получите один бит, используя []оператор.

гигабайт
источник
2
Ах, хорошо, я постоянно забываю, что целые числа могут быть проиндексированы. +1
Мартин Эндер
16 байт: ->x,y{x*y%103%2}обратите внимание, что 0и 1обратные.
Эрик
1
И 15 байт, x*y%51>9как и все остальные. Я думаю, что было бы несправедливо, чтобы противники так радикально изменили его сейчас.
GB
10

CJam , 8 байт

{*51%9>}

Безымянный блок, который ожидает двухсимвольные коды на вершине стека и заменяет их на 0(друзья) или 1(враги).

Попробуйте онлайн!

объяснение

Ну, теперь мы увидели много забавных арифметических решений, поэтому я думаю, что будет хорошо, если я представлю свое собственное. Самым близким к этому, что я видел до сих пор, является решение С Steadybox . Этот был найден с помощью брутфорсера GolfScript, который я написал некоторое время назад для анархического гольфа.

Вот что это делает с различными входами (игнорируя порядок, потому что начальное умножение коммутативно):

xy   x    y    x*y   %51  >9

WU   87   85   7395    0   0
UB   85   66   5610    0   0
BR   66   82   5412    6   0
RG   82   71   5822    8   0
GW   71   87   6177    6   0
WB   87   66   5742   30   1
UR   85   82   6970   34   1
BG   66   71   4686   45   1
RW   82   87   7134   45   1
GU   71   85   6035   17   1

Мы можем видеть, как взятие произведения входных данных по модулю 51 хорошо разделяет входные данные на большие и маленькие результаты, и мы можем использовать любое из значений между ними, чтобы различать эти два случая.

Мартин Эндер
источник
9

Рёда , 30 22 21 байт

Байты сохранены благодаря @fergusq с помощью _получения значений потока в качестве входных данных

{[_ in"WUBRGWGRBUW"]}

Попробуйте онлайн!

Функция запускается как push "WU" | fпосле присвоения имени функции

объяснение

{                      /* Declares an anonymous function */
 [                 ]   /* Push */
  _ in                 /* the boolean value of the value on the stream is in */
      "WUBRGWGRBUW"    /* this string */
}
Kritixi Lithos
источник
о_О молниеносная скорость
Павел
Можно сохранить 5 байтов, читая входные значения из потока вместо того, чтобы принимать параметры:, {[(_.._)in"WUBRGWGRBUW"]}но тогда функция должна быть вызвана как [a, b] | f.
fergusq
9

C, 33 32 29 24 22 байта

#define f(k,l)k*l%51<9

Возвращает 1, если друзья, 0, если враги.

Steadybox
источник
8

Vim, 22 21 байт

CWUBRGWGRBUW<esc>:g/<c-r>"/d<cr>

Ввод: одна строка, содержащая два символа.

Вывод: пустой буфер, если друзья, буфер, содержащий WUBRGWGRBUWврагов.

объяснение

C                                 # [C]hange line (deletes line into " register and enters insert mode)
 WUBRGWGRBUW<esc>                 # insert this text and exit insert mode
                 :g/      /d<cr>  # delete all lines containing...
                    <c-r>"        # ... the previously deleted input
м-chrzan
источник
2
Вы можете сделать Cвместоcw
Kritixi Lithos
8

Japt , 6 байт

Вдохновленный @Martin Эндера раствором .

Принимает массив из двух кодов символов в качестве входных данных.

×%51<9

Попробуйте онлайн! | Тестирование

Возвращается trueдля друзей, falseдля врагов.

14-байтовое решение:

Принимает два кодовых символа в качестве входных данных

nV a /3%3 f ¦1

Попробуйте онлайн! | Тестирование

Объяснение:

nV a /3%3 f ¦1
nV a             // Absolute value of: First input (implicit) - Second input
      /3%3 f     // Divide by 3, mod 3, then floor the result
             ¦1  // Return true if the result does not equals 1, otherwise return false

12-байтовое решение:

"WUBRGW"ê èU

Попробуйте онлайн! | Тестирование

Объяснение:

"WUBRGW"ê èU
"WUBRGW"ê     // "WUBRGW" mirrored = "WUBRGWGRBUW"
          èU  // Returns the number of times U (input) is found

Возвращается 1для друзей и 0для врагов.

9-байтовое решение :

Вдохновленный @ Arnauld в растворе .

*V%24%B%2

Тестирование

Возвращается 1для друзей, 0для врагов.

11-байтовое решение:

вдохновленный @Mistah Figgins в растворе .

nV %9%5%3¦0

Тестирование

Оливер
источник
8

Brain-Flak , 155, 147 , 135 байтов

(([(({}[{}]))<>])){({}())<>}(((([])[][][])[]())()()())<>{}<>{({}<><(({}))>)({}[{}]<(())>){((<{}{}>))}{}{{}({}<({}())>)(<()>)}{}<>}<>{}

Попробуйте онлайн!

Это 134 байта кода плюс один байтовый штраф за -aфлаг, который разрешает ввод ASCII.

Это работает путем нахождения абсолютной разницы между входами и проверки, равны ли они 2, 11, 16 или 19. Если это так, входной сигнал является другом, и он печатает 1. Если это не так, он ничего не печатает. Так как ничто в мозге не соответствует пустому стеку, что ложно, никакой вывод не является ложным значением. ( мета )

Что мне особенно нравится в этом ответе, так это то, что фрагмент «абсолютной разницы» (то есть (([(({}[{}]))<>])){({}())<>}{}{}<>{}) не является чистым стеком, но его все же можно использовать в этом ответе, так как нам все равно, какой стек мы получим перед кодированием возможные различия.

В более позднем редактировании я использовал это еще больше, злоупотребляя остатками в стеке, которые не заканчиваются абсолютной разницей в нем. На первой ревизии я вытащил их обоих, чтобы они были немного более вменяемыми. Не делать это дает два основных гольф:

  1. Очевидно, что он удаляет код, чтобы вытолкнуть их:, {}{}но что более важно:

  2. Это позволяет нам сжимать 2, 11, 16, 19последовательность из

    (((((()()))[][][](){})[][]())[])
    

    в

    (((([])[][][])[]())()()())
    

    К счастью, нет никакого дополнительного кода, необходимого для обработки этих остатков позже, поэтому они просто остаются в альтернативном стеке.

Поскольку общеизвестно, что трудно понять мозг, вот читаемая / прокомментированная версия:

#Push the absolute difference of the two input characters. It is unknown which stack the result will end on
(([(({}[{}]))<>])){({}())<>}

#Push 2, 11, 16, 19, while abusing the values left on the stack from our "Absolute value" calculation
(((([])[][][])[]())()()())

#Pop a zero from the other stack and toggle back
<>{}<>

#While True
{

    #Move top over and duplicate the other top
    ({}<><(({}))>)

    #Equals?
    ({}[{}]<(())>){((<{}{}>))}{}

    #If so:
    {

        #Increment the number under the stack
        {}({}<({}())>)
        #Push a zero
        (<()>)

    }

    #Pop the zero
    {}

    #Go back to the other stack
    <>

#Endwhile
}

#Toggle back
<>

#Pop a zero
{}
DJMcMayhem
источник
Есть толчок, щелчок, который вы можете удалить, и вы можете нажать 0 в более эффективном режиме, чтобы опуститься до 129: TIO
Райли
@ Райли Круто, спасибо за совет! Мне нравится иметь закомментированную версию, поэтому я подожду, пока смогу понять эту версию, прежде чем обновлять.
DJMcMayhem
Было только два небольших изменения. Здесь важная часть. Мои комментарии во всех заглавных буквах, извините, если похоже, что я кричу.
Райли
7

Желе , 14 байт

“WUBRG”wЀIAÆP

Возвращается 1за врагов и 0за друзей.

Набор тестов на Попробуй онлайн!

Как?

“WUBRG”wЀIAÆP - Main link                                   e.g. WG
“WUBRG”        - ['W','U','B','R','G']
       wЀ     - first index of sublist mapped over the input     [1,5]
          I    - incremental differences                           -4
           A   - absolute value                                     4
            ÆP - is prime?                                          0
Джонатан Аллан
источник
7

05AB1E , 7 байтов

$Æ105¿Ö

Это порт моего желе ответа . Принимает список кодовых точек в качестве входных данных. Принты 1 для друзей, 0 для врагов.

Попробуйте онлайн!

Как это устроено

$        Push 1 and [n, m] (the input).
 Æ       Reduce [n, m] by subtraction, pushing n - m.
  105¿   Take the GCD of n - m and 105.
      Ö  Test if 1 is divisible by the GCD (true iff the GCD is ±1).
Деннис
источник
6

CJam , 16 12 11 10 байт

Гольф 4 байта с использованием алгоритма Mistah Figgins

Сохранено 1 байт благодаря Линн

l:m9%5%3%!

Выходы 1для цветов противника, 0для цветов союзников.

Попробуйте онлайн! (Или проверьте все тестовые случаи )

объяснение

l           e# Push a line of input as a string
 :m         e# Reduce the string by subtraction (using the ASCII values)
   9%5%3%   e# Mod by 9, then by 5, then by 3. By doing this, enemy
            e#  pairs go to 0, and allies go to 1, 2, -1, or -2.
         !  e# Boolean negation
Бизнес Кот
источник
Не пытайся быть слишком умным! l:m9%5%3%!на байт короче.
Линн
@ Линн Ого, это так. Это довольно скучно. Спасибо
Деловая Кошка
5

Сетчатка , 18 байт

O`.
BR|BU|GR|GW|UW

Попробуйте онлайн!

Довольно просто: сортирует входные данные и пытается сопоставить любую из отсортированных союзных пар с ним. К сожалению, я не думаю, что струнный характер Retina позволяет любому из более интересных подходов быть конкурентоспособным.

В качестве краткого обзора следующей версии Retina я планирую добавить опцию, которая заменяет регулярное выражение и целевую строку (поэтому текущая строка будет использоваться в качестве регулярного выражения, а вы дадите ей строку для проверки), и в этом случае это короче Решение будет работать (или что-то в этом роде):

?`WUBRGWGRBUW
Мартин Эндер
источник
4

Желе , 6 байт

ạ:3%3Ḃ

Ради полноты. Принимает две точки кода в качестве аргумента. Выходит 0 для друзей, 1 для противников.

Попробуйте онлайн!

Фон

Пусть n и m будут кодами двух входных символов. Взяв | n - m | Нам нужно заниматься только всеми 2-мя комбинациями символов. В следующей таблице показаны все 2 комбинации символов и соответствующие абсолютные различия.

WU UB BR RG GW  WB UR BG RW GU
 2 19 16 11 16  21  3  5  5 14

Если мы разделим эти целые числа на 3 , мы получим следующие коэффициенты.

WU UB BR RG GW  WB UR BG RW GU
 0  6  5  3  5   7  1  1  1  4

1 , 4 и 7 можно сопоставить с 1 , взяв результаты по модулю 3 .

WU UB BR RG GW  WB UR BG RW GU
 0  0  2  0  2   1  1  1  1  1

Теперь нам осталось взглянуть на паритет.

Как это устроено

ạ:3%3Ḃ  Main link. Left argument: n (code point). Right argument: m (code point)

ạ       Absolute difference; yield |n - m|.
 :3     Integer division by 3, yielding |n - m| / 3.
   %3   Modulo 3, yielding |n - m| / 3 % 3.
     Ḃ  Parity bit; yield |n - m| / 3 % 3 & 1.
Деннис
источник
4

Cubix, 11 байт

Cubix-реализация решения Арно.

U%O@A*'g%2W

использование

Введите два символа, и он выводит 0для друзей и 1для врагов. Попробуй это здесь.

объяснение

Код может быть расширен следующим образом.

    U %
    O @
A * ' g % 2 W .
. . . . . . . .
    . .
    . .

Символы выполняются в следующем порядке (исключая поток управления):

A*'g%2%O@
A         # Read all input as character codes
 *        # Multiply the last two character codes
    %     # Modulo the result by
  'g      #     103
      %   # And modulo that by
     2    #     2
       O  # Output the result ...
        @ # ... and terminate
Люк
источник
2

AWK, 23 байта

{$0="WUBRGWGRBUW"~$1}1

Пример использования: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB

Это печатает, 1если пара - друг, 0иначе. Я хотел сделать что-то умное, но все, о чем я думал, будет дольше.

Роберт Бенсон
источник
2

Желе , 12 байт

“WUBRGW”ŒBẇ@

Выходы 1для союзников, 0для врагов.

Попробуйте онлайн!

объяснение

“WUBRGW”ŒBẇ@   Main link

“WUBRGW”       The string "WUBRGW"
        ŒB     Bounce; yields "WUBRGWGRBUW"
          ẇ@   Check if the input exists in that string
Бизнес Кот
источник
2

Рубин, 28 байт

Выводы true для друга, false для врага:

p'WUBRGWGRBUW'.include?$**''

Безголовая версия не сильно отличается:

p 'WUBRGWGRBUW'.include?(ARGV.join(''))
Sculper
источник
2

GolfScript , 7 байт

~*51%9>

Принимает две кодовые точки в качестве ввода.

Попробуйте онлайн! (Набор тестов, который для удобства преобразует формат ввода.)

Порт GolfScript моего ответа CJam (который технически является портом CJam результата моего грубого форсинга GolfScript ... э-э-э ...).

Тем не менее, поскольку GolfScript работает по модулю с отрицательными входными данными правильно, есть забавное альтернативное решение с тем же количеством байтов, которое использует 4для противников вместо 1:

~-)9%4&

Попробуйте онлайн!

xy   x    y    x-y    +1  %9  &4

WU   87   85     2     3   3   0
UB   85   66    19    20   2   0
BR   66   82   -16   -15   3   0
RG   82   71    11    12   3   0
GW   71   87   -16   -15   3   0
WB   87   66    21    22   4   4
UR   85   82     3     4   4   4
BG   66   71    -5    -4   5   4
RW   82   87    -5    -4   5   4
GU   71   85   -14   -13   5   4
Мартин Эндер
источник
2

Java 7, 38 байт

int b(int a,int b){return(a-b)%9%5%3;}

Порт от ответа @Mistah Figgins Befunge-98 является самым коротким в Java 7 из ответов, опубликованных до сих пор.
Что касается остальных:

39 байт: порт из ответа @Arnauld 's JavaScript (ES6) .

int a(int a,int b){return a*b%24%11%2;}

39 байт: порт из ответа CJam @MartinEnder

Object e(int a,int b){return a*b%51>9;}

47 байт: порт от @Steadybox 'C ответа

Object d(int a,int b){return(a=a*b%18)>7|a==3;}

52 байта: порт из ответа @Lynn 's Python 2

Object c(String s){return"WUBRGWGRBUW".contains(s);}

ПРИМЕЧАНИЕ. Пропущенные ответы, в которых используются простые числа / палиндромы и т. Д., Поскольку в Java их далеко нет. ;)
ТОДО: Придумываю свой ответ .. Хотя я сомневаюсь, что он короче, чем большинство из них.

Попробуйте все здесь.


РЕДАКТИРОВАТЬ: Хорошо, я придумал что-то, что не так уж плохо:

50 байтов:

Object c(int a,int b){return(a=a*b%18)>3&a<7|a<1;}

Объяснение:

ab  a   b   a*b     %18

WU  87  85  7395    15
UB  85  66  5610    12
BR  66  82  5412    12
RG  82  71  5822    8
GW  71  87  6177    3
UW  85  87  7395    15
BU  66  85  5610    12
RB  82  66  5412    12
GR  71  82  5822    8
WG  87  71  6177    3

WB  87  66  5742    0
UR  85  82  6970    4
BG  66  71  4686    6
RW  82  87  7134    6
GU  71  85  6035    5
BW  66  87  5742    0
RU  82  85  6970    4
GB  71  66  4686    6
WR  87  82  7134    6
UG  85  71  6035    5

Все враги находятся в диапазоне 4-6 (включительно) или 0.
EDIT2: Хмм .. Я только что заметил, что это очень похоже на ответ @Steadybox '.. :(

Кевин Круйссен
источник
2

PHP, 31 байт

echo!strstr(WBGURWRUGBW,$argn);

Беги echo AB | php -nR '<code>, где Aи Bдва цвета.

strtrвозвращает строку из позиции, где найден ввод;
с помощью WBGURWRUGBWhaystack это возвращает правдивую строку, если цвета - враги; пустая строка, если нет.

!превращает правдивую строку в false, что приводит к пустому выводу,
а пустую строку к true, что приводит к выводу 1.

Titus
источник