Магія зібрання: друзі чи вороги?


67

У картковій грі Magic: Gathering є п’ять різних кольорів, які представляють вільну приналежність карт, Білий ( W), Синій ( U), Чорний ( B), Червоний ( R) та Зелений ( 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 в синтаксисі currying (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 в синтаксисі currying (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

Спробуйте в Інтернеті!


10
Ага, нарешті щось веселе. :)
Мартін Ендер

4
Фантастична знахідка!
Грег Мартін

Чи є якась розумна математика, про яку я тут не знаю, або ви просто грубо застосовували різні модулі, доки не отримали той, який працював?
FourOhFour

@FourOhFour Це було жорстоко змушене. Я думаю, що це найменше рішення з подвійним модулем . Але порт цієї відповіді (який використовує порівняння) насправді був би на один байт коротшим.
Арнольд

1
@OddDev Я фактично перевірив усі біти, не тільки найменш значущі. Наприклад, він a*b%290&8би працював так само добре (продукуючи 0для друзів або 8для ворогів).
Арнольд

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

Усі комбінації противника поділяються на 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 за гольф


Використовуйте Jelly для 9 байт: IA%9%5%3¬Редагувати Спробуйте в Інтернеті!
Джонатан Аллан

@JonathanAllan Я бачу, ви вже зробили! Приємно.
MildlyMilquetoast

Я фактично перетворив ваш метод (використовуючи фактичну, а не абсолютну різницю) mod 9 mod 6, і використав той факт, що Jelly індексує списки модульно, щоб зменшити його до 7 . Я акредитував вас і зв’язав тут.
Джонатан Аллан

@JonathanAllan Я також придумав метод mod 9 mod 6 теж, але Befunge не має фактичної різниці або абсолютного значення, тому це було не так реально
MildlyMilquetoast

18

Желе , 8 7 байт

Скарбочки від казкової відповіді Міста Фіггінса на Befunge !

Iị390B¤

Спробуйте в Інтернеті!

Як?

Як зазначав Міста Фіггінс, рішення може бути прийняте, прийнявши абсолютну різницю між значеннями ASCII mod 9 mod 5 mod 3 - 0s, то друзі, а 1s та 2s - вороги.

Якщо ми замість цього візьмемо (просту) різницю mod 9, то виявимо, що друзями є 1, 2, 7, 8 і 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 ++ є однією з найгірших мов для гольфу, кожен, хто гірший за це, повинен відчувати сором. ;)


Здається, всередині templates є два зайвих пробіли .
Yytsi

@TuukkaX виправлено, d'oh
Yakk

14

Рубі, 22 19 байт

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

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

Як це працює:

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


2
Ах приємно, я постійно забуваю, що цілі числа можна індексувати. +1
Мартін Ендер

16 байт: ->x,y{x*y%103%2}Зауважте, що це 0і 1обернено назад.
Ерік Дюмініл

1
І 15 байт, x*y%51>9як і всі. Я думаю, що було б несправедливо змінити так, щоб вони змінили це так кардинально.
ГБ

10

CJam , 8 байт

{*51%9>}

Неназваний блок, який очікує два коди символів у верхній частині стека і замінює їх на 0(друзі) або 1(вороги).

Спробуйте в Інтернеті!

Пояснення

Ну, ми бачили зараз багато цікавих арифметичних рішень, тож я гадаю, що це добре, якщо зараз я презентую своє. Найближче до цього, що я бачив до цього часу, є рішення C 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

Röda , 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 */
}

o_O швидкість блискавки
Павло

Можна зберегти 5 байт, прочитавши вхідні значення з потоку замість того, щоб брати параметри:, {[(_.._)in"WUBRGWGRBUW"]}але тоді функцію потрібно викликати як [a, b] | f.
fergusq


9

C, 33 32 29 24 22 байт

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

Повертається 1, якщо друзі, 0, якщо вороги.


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

2
Можна зробити Cзамістьcw
Kritixi Lithos

8

Japt , 6 байт

Натхненний @Martin Ендер розчином .

Приймає масив з двох кодових char як вхідний.

×%51<9

Спробуйте в Інтернеті! | Тестовий сюїт

Повертається trueдля друзів, falseдля ворогів.

14-байтне рішення:

В якості вхідного сигналу приймає два char коди

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

Мозг-Флак , 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
{}

Є поштовх, поп, який ви можете зняти, і ви можете натиснути 0, якщо ефективніше перейти до 129: TIO
Riley

@Riley Cool, дякую за пораду! Мені подобається мати коментовану версію, тому я зачекаю, поки зможу зрозуміти цю версію перед оновленням.
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 байти, використовуючи алгоритм Міста Фіггінса

Збережено 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%!- байт коротший.
Лінн

@Lynn О, вау, це так. Це щось нудно. Спасибі
Ділова кішка

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 байт

Кубікс втілення рішення Арнальда.

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

Рубін, 28 байт

Вихідні для товариша, хибні для ворога:

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

Невикористана версія не сильно відрізняється:

p 'WUBRGWGRBUW'.include?(ARGV.join(''))


2

GolfScript , 7 байт

~*51%9>

В якості введення бере два кодових пункти.

Спробуйте в Інтернеті! (Тестовий набір, який перетворює формат введення для зручності.)

Порт GolfScript моєї відповіді на CJam (технічно це порт CJam в результаті мого грубого форссера GolfScript ... uhhh ...).

Однак, оскільки 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 байт: Порт від відповіді JavaScript (ES6) @Arnauld .

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. ;)
TODO: Придумати свою власну відповідь .. Хоча я сумніваюся, що вона коротша, ніж більшість із них.

Спробуйте все тут.


EDIT: Гаразд, придумав щось, що не так вже й погано:

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повертає рядок з позиції, де знайдено вхід;
за WBGURWRUGBWдопомогою стога сіна це повертає тризуму струну, якщо кольори вороги; порожній рядок, якщо ні.

!перетворює truthy-рядок до false, в результаті чого
порожній рядок і порожній рядок до true, призводять до виводу 1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.