매직 더 개더링 : 친구 또는 적?


67

카드 게임 Magic : The Gathering 에는 흰색 ( W), 파란색 ( U), 검은 색 ( B), 빨간색 ( R) 및 녹색 ( G)의 느슨한 제휴를 나타내는 5 가지 색상이 있습니다 . 이들은 종종 다음과 같이 오각형으로 배열됩니다.

  W
G   U
 R B

MtG와 많은 카드 역학 모두에서이 오각형의 인접한 색상은 일반적으로 동맹으로 간주되며 인접하지 않은 (반대 정렬) 색상은 적으로 간주됩니다.

이 도전에서는 두 가지 색상이 주어지며 그 관계를 결정해야합니다.

도전

set에서 두 개의 다른 문자가 제공됩니다 BGRUW. 이것을 두 문자 문자열, 문자 사이에 구분 기호가있는 문자열, 두 개의 개별 문자 값, 두 개의 단일 문자열, 코드 포인트를 나타내는 두 개의 정수 또는 두 개의 문자 / 문자열 / 정수를 포함하는 목록 또는 세트 유형으로 사용할 수 있습니다.

결과물은 두 가지 색상이 동맹임을 나타내고 다른 하나는적임을 나타내는 두 가지 명확하고 일관된 선택 값 중 하나 여야합니다. 이 두 값 중 하나가 전혀 출력되지 않을 수 있습니다.

당신은 쓸 수 있습니다 프로그램이나 기능을 하고, 우리의 사용 표준 방법 입력을 수신하고 출력을 제공합니다.

모든 프로그래밍 언어를 사용할 수 있지만 이러한 허점 은 기본적으로 금지되어 있습니다.

이것은 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.

테스트 사례

가능한 입력은 20 개뿐이므로 모두 나열하겠습니다.

친구:

WU   UB   BR   RG   GW   UW   BU   RB   GR   WG

적 :

WB   UR   BG   RW   GU   BW   RU   GB   WR   UG

33
다음으로 : 핵심 규칙 구현 : P
Captain Man

12
@CaptainMan 나는 당신이 30k 캐릭터 포스트에 맞출 수 있다면 당신을
찬성합니다

@ 왈 프랏 30k? 가능해야 함
Charles

2
가장 예상치 못한 제휴의 @IvanKolmychek이 가장 예기치 않은 결과를 낳습니다.
aluriak

1
재미있는 사실 : Magic : 모임이 끝났습니다 :)
Matthew Roh

답변:


82

자바 스크립트 (ES6),  26 23 17 15  14 바이트

카레 구문에서 두 개의 ASCII 코드로 입력을 (a)(b)받습니다. 4친구 나 0적 에게 반환 합니다 .

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

온라인으로 사용해보십시오!

어떻게?

NB : 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

온라인으로 사용해보십시오!


10
아, 마침내 재미있다. :)
Martin Ender 2016 년

4
환상적인 발견!
Greg Martin

내가 알지 못하는 영리한 수학이 있습니까? 아니면 효과가있는 모듈을 얻을 때까지 다른 모듈로를 무차별하게 수행 했습니까?
FourOhFour 4

@FourOhFour 그것은 무차별 강제되었습니다. 나는 이것이 가장 작은 이중 모듈로 솔루션 이라고 생각합니다 . 그러나이 답변 의 포트 (비교를 사용하는)는 실제로 1 바이트 더 짧습니다.
Arnauld

1
@ OddDev 실제로 가장 중요한 비트뿐만 아니라 모든 비트를 테스트했습니다. 예를 들어 친구 나 적 a*b%290&8에게도 잘 작동 합니다. 08
Arnauld

37

젤리 , 6 바이트

ạg105Ị

두 개의 코드 포인트를 인수로 사용합니다. 수익률 1 친구, 0 적을합니다.

온라인으로 사용해보십시오!

배경

nm 을 두 입력 문자의 코드 포인트라고 하자 . 으로 복용 | N - m | , 우리는 모든 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.

멋지게 발견되었습니다! 절대 값이 왜 필요한가요? (온라인으로 시도했지만 정답은 제공하지 않았지만 수학적으로는 중요하지 않습니다.)
Greg Martin

@GregMartin 필요하지 않습니다; 서명 된 차이도 잘 작동합니다. 빼기는 _젤리입니다. 다른 것을 사용 했습니까?
Dennis

아, 나는 절대 차이가 아닌 절대 값으로 잘못 읽습니다 .
Greg Martin


21

Befunge-98, 13 12 바이트

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

온라인으로 사용해보십시오!

0친구와 1적을 위한 지문

문자의 ASCII 값 사이의 차이를 사용합니다.

를 취하면 (((ASCII difference % 9) % 5) % 3)적의 값은 0이됩니다. 그런 다음 값이 아니라 인쇄합니다.

골프를위한 @Martin 에게 감사합니다


9 바이트 젤리를 사용하여 IA%9%5%3¬편집 온라인으로보십시오!
Jonathan Allan

@JonathanAllan 당신이 이미 봤어요! 좋은.
MildlyMilquetoast

나는 실제로 (절대적이지 않고 차이를 사용하여) mod 9 mod 6 방법을 모핑하고 Jelly가 모듈 식으로 목록에 색인 하여 7로 낮추는 사실을 사용 했습니다 . 나는 당신을 인정하고 여기에 링크했습니다.
Jonathan Allan

@JonathanAllan 나도 mod 9 mod 6 방법을 생각해 냈지만 Befunge는 실제 차이 또는 절대 값을 가지지 않았으므로 실현 가능하지 않았습니다.
MildlyMilquetoast

18

젤리 , 8 7 바이트

Mistah Figgins의 멋진 Befunge 답변에 대한 피기 백 !

Iị390B¤

온라인으로 사용해보십시오!

어떻게?

Mistah Figgins가 지적했듯이 결정은 ASCII 값 mod 9 mod 5 mod 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. 인덱싱은 모듈 식 (따라서 효과적으로 인덱싱은 mod 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 answer 기반 수학 .

라이브 예 .

C ++ 템플릿 메타 프로그래밍은 최악의 골프 언어 중 하나이므로 이보다 더 나쁜 사람은 수치심을 느낄 것입니다. ;)


내부에 총 2 개의 중복 공백이있는 것 같습니다 template.
Yytsi

@TuukkaX fixed, d' oh
Yakk

14

루비, 22 19 바이트

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

입력 : 2 문자의 ASCII 코드. 출력 : 아군의 경우 1, 적의 경우 0

작동 방식 :

두 개의 모듈로 9 사이의 차이를 얻고 비트 마스크 (390은 이진수 110000110)를 사용하고 []연산자를 사용하여 단일 비트를 얻습니다 .


2
아, 정수를 인덱싱 할 수 있다는 것을 잊어 버렸습니다. +1
Martin Ender 2016 년

16 바이트 : 및 ->x,y{x*y%103%2}그 반대입니다.01
Eric Duminil

1
그리고 x*y%51>9다른 사람들 과 마찬가지로 15 바이트 . 나는 그것을 너무 급진적으로 바꾸는 것이 공평한 사람들에게는 불공평하다고 생각합니다.
GB

10

CJam , 8 바이트

{*51%9>}

스택 위에 두 개의 문자 코드가 필요하고 이름을 0(친구) 또는 1(적)으로 바꾸는 명명되지 않은 블록 .

온라인으로 사용해보십시오!

설명

글쎄, 우리는 지금 많은 재미있는 산술 솔루션을 보았으므로 지금 내 자신의 것을 제시하면 괜찮습니다. 지금까지 본 가장 가까운 것은 Steadybox의 C 솔루션 입니다. 이것은 내가 얼마 전에 무정부 상태의 골프를 위해 쓴 GolfScript brute forcer의 도움으로 발견되었습니다.

다음은 다양한 입력에 대해이 작업을 수행하는 것입니다 (초기 곱셈은 정식이기 때문에 순서 무시).

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 */
}

o_O 번개 속도
Pavel

매개 변수를 사용하는 대신 스트림에서 입력 값을 읽어 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 Ender의 솔루션에서 영감을 얻었습니다 .

두 개의 문자 코드 배열을 입력으로 사용합니다.

×%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을 인쇄합니다. 그렇지 않으면 아무 것도 인쇄하지 않습니다. brain-flak의 어떤 것도 빈 스택에 해당 하지 않기 때문에 잘못된 값이 출력되지 않습니다. ( 메타 )

이 답변에서 특히 마음에 드는 점은 '절대 차이'스 니펫 (즉, (([(({}[{}]))<>])){({}())<>}{}{}<>{} )이 스택 정리되지 않지만 인코딩 전에 끝나는 스택을 신경 쓰지 않기 때문에이 답변에 여전히 사용할 수 있다는 것입니다 가능한 차이점.

나중에 편집에, 나는 스택에 남은 남용하여이 더욱 이용했다 하지 않는 그것에 절대 차이와 끝까지합니다. 첫 번째 개정판에서, 나는 그것들을 약간 더 제정신 상태로 유지하기 위해 둘 다 터졌다. 이렇게 하지 않으면 두 가지 주요 골프가 제공됩니다.

  1. 분명히, 그것은 팝 코드를 제거 {}{}하지만 더 중요합니다 :

  2. 이를 통해 2, 11, 16, 19시퀀스 를 압축 할 수 있습니다.

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

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

    다행스럽게도 나중에 이러한 남은 부분을 처리하는 데 필요한 추가 코드가 없으므로 대체 스택에 그대로 남아 있습니다.

brain-flak는 이해하기 어려운 것으로 유명하므로 다음은 읽기 / 설명 된 버전입니다.

#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
{}

푸시, 팝을 제거 할 수 있으며 if에서 0을 더 효율적으로 129로 낮추면 TIO
Riley

@Riley Cool, 팁 주셔서 감사합니다! 나는 주석이 달린 버전을 좋아하므로 업데이트하기 전에 해당 버전을 이해할 수있을 때까지 기다릴 것입니다.
DJMcMayhem

단지 두 가지 사소한 변화였습니다. 여기 중요한 부분이 있습니다. 내 의견은 모두 대문자로 표시됩니다. 소리 지르는 것처럼 보이면 죄송합니다.
Riley

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 바이트

Mistah Figgins의 알고리즘 을 사용하여 4 바이트 골프

Lynn 덕분에 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

@Lynn 오 와우. 좀 지루하다. 감사합니다
Business Cat

5

레티 나 , 18 바이트

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

온라인으로 사용해보십시오!

매우 간단합니다 : 입력을 정렬하고 정렬 된 동맹 쌍 중 하나와 일치하도록 시도합니다. 불행히도, Retina의 문자열 기반 특성으로 인해 더 흥미로운 접근 방식이 경쟁력을 가질 수 있다고 생각하지 않습니다.

다음 Retina 버전에 대한 몰래 엿보기로 정규 표현식과 대상 문자열을 바꾸는 옵션을 추가 할 계획입니다 (따라서 현재 문자열은 정규 표현식으로 사용되며 확인할 문자열을 제공합니다). 솔루션이 작동합니다 (또는 그 라인을 따라 뭔가).

?`WUBRGWGRBUW



4

젤리 , 6 바이트

ạ:3%3Ḃ

완전성을 위해. 두 개의 코드 포인트를 인수로 사용합니다. 수익률 0 친구, 1 적을합니다.

온라인으로 사용해보십시오!

배경

nm 을 두 입력 문자의 코드 포인트라고 하자 . 으로 복용 | N - m | , 우리는 모든 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

결과 modulo 3 을 취하면 1 , 471 에 매핑 될 수 있습니다 .

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 바이트

Arnauld 솔루션의 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

루비, 28 바이트

친구에게는 true를, 적에게는 false를 출력합니다.

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

ungolfed 버전은 크게 다르지 않습니다.

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


2

GolfScript , 7 바이트

~*51%9>

두 개의 코드 포인트를 입력으로 사용합니다.

온라인으로 사용해보십시오! 편의상 입력 형식을 변환하는 테스트 스위트

내 CJam 답변 의 GolfScript 포트 (기술적으로는 내 GolfScript 무차별 대입 결과의 CJam 포트입니다 ...) ...

그러나 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

자바 7, 38 바이트

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

@Mistah Figgins 포트 Befunge-98 답변 은 지금까지 게시 된 답변 중에서 Java 7에서 가장 짧습니다.
다른 사람에 관해서는 :

39 바이트 : @Arnauld 의 JavaScript (ES6) 응답 에서 포트 .

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

39 바이트 : @MartinEnder 의 CJam 답변 에서 포트

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 의 Python 2 답변 에서 포트

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

참고 : 프라임 / 회문 등을 사용하는 답변을 건너 뛰었습니다 .Java에서는 거의 없기 때문입니다. ;)
TODO : 내 자신의 대답을 생각해 낸다.

여기서 모두 시도하십시오.


편집 : 좋아, 너무 나쁘지 않은 무언가를 생각해 냈다.

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>, 어디에 AB 두 가지 색상이 있습니다.

strtr입력이있는 위치에서 문자열을 반환합니다.
WBGURWRUGBW 건초 더미이 색상이 적을하는 경우 truthy 문자열을 반환로; 그렇지 않으면 빈 문자열입니다.

!에 truthy 문자열을 전환 false빈 출력 결과
와에 빈 문자열 true출력 결과 1.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.