Magic the Gathering: Bạn bè hay Kẻ thù?


67

Trong trò chơi bài Magic: the Gathering có năm màu khác nhau, đại diện cho các liên kết lỏng lẻo của thẻ, Trắng ( W), Xanh lam ( U), Đen ( B), Đỏ ( R) và Xanh lục ( G). Chúng thường được sắp xếp theo hình ngũ giác như sau:

  W
G   U
 R B

Cả trong truyền thuyết của MtG cũng như trong nhiều cơ chế thẻ, các màu liền kề trong hình ngũ giác này thường được coi là đồng minh và các màu không liền kề (loại đối diện) được coi là kẻ thù.

Trong thử thách này, bạn sẽ được cung cấp hai màu và sẽ xác định mối quan hệ của chúng.

Các thách thức

Bạn được cung cấp bất kỳ hai ký tự riêng biệt từ bộ BGRUW. Bạn có thể lấy chúng làm chuỗi hai ký tự, chuỗi có dấu phân cách giữa các ký tự, hai giá trị ký tự riêng biệt, hai chuỗi đơn, hai số nguyên biểu thị các điểm mã của chúng hoặc loại danh sách hoặc bộ chứa hai ký tự / chuỗi / số nguyên.

Đầu ra của bạn phải là một trong hai giá trị riêng biệt và nhất quán theo lựa chọn của bạn, một giá trị cho biết hai màu đó là đồng minh và một màu cho biết chúng là kẻ thù. Một trong hai giá trị đó có thể không có đầu ra nào cả.

Bạn có thể viết chương trình hoặc chức năng và sử dụng bất kỳ phương pháp tiêu chuẩn nào để nhận đầu vào và cung cấp đầu ra.

Bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào , nhưng lưu ý rằng các lỗ hổng này bị cấm theo mặc định.

Đây là , vì vậy câu trả lời hợp lệ ngắn nhất - được đo bằng byte - thắng.

Các trường hợp thử nghiệm

Chỉ có 20 đầu vào có thể, vì vậy tôi sẽ liệt kê tất cả.

Bạn bè:

WU   UB   BR   RG   GW   UW   BU   RB   GR   WG

Kẻ thù:

WB   UR   BG   RW   GU   BW   RU   GB   WR   UG

33
Tiếp theo: thực hiện các quy tắc cốt lõi: P
Thuyền trưởng Man

12
@CaptainMan tôi sẽ nâng cấp bạn nếu bạn có thể làm cho nó phù hợp với bài đăng 30k ký tự :)
Walfrat

@Walfrat 30k? Nên có thể
Không phải là Charles

2
@IvanKolmychek từ các liên minh bất ngờ nhất đến kết quả bất ngờ nhất.
aluriak

1
Sự thật thú vị: Phép thuật: Cuộc tập hợp đã hoàn tất đầy đủ :)
Matthew Roh

Câu trả lời:


82

JavaScript (ES6),  26 23 17 15  14 byte

Lấy đầu vào là hai mã ASCII theo cú pháp currying (a)(b). Trả lại 4cho bạn bè hoặc 0cho kẻ thù.

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

Hãy thử trực tuyến!

Làm sao?

NB: chỉ thương số nguyên của phép chia bằng 0,6 được hiển thị bên dưới.

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

Cách tiếp cận trước đó, 15 byte

Lấy đầu vào là hai mã ASCII theo cú pháp currying (a)(b). Trả lại 0cho bạn bè hoặc 1cho kẻ thù.

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

Hãy thử trực tuyến!

Làm sao?

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

Cách tiếp cận ban đầu, 23 byte

Đưa đầu vào dưới dạng chuỗi 2 ký tự. Trả lại truecho bạn bè hoặc falsecho kẻ thù.

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

Hãy thử trực tuyến!


10
Ah, cuối cùng là một cái gì đó vui vẻ. :)
Martin Ender

4
Tìm thấy tuyệt vời!
Greg Martin

Có một số phép toán thông minh mà tôi không biết ở đây hoặc bạn chỉ vũ phu thay đổi các chế độ khác nhau cho đến khi bạn có một bài toán có hiệu quả?
FourOhFour

@FourOhFour Đó là vũ phu. Tôi nghĩ rằng đây là giải pháp modulo đôi nhỏ nhất . Nhưng một cổng của câu trả lời này (đang sử dụng so sánh) thực sự sẽ ngắn hơn một byte.
Arnauld

1
@OddDev Tôi thực sự đã kiểm tra tất cả các bit, không chỉ là bit ít quan trọng nhất. Ví dụ, a*b%290&8sẽ hoạt động tốt như vậy (sản xuất 0cho bạn bè hoặc 8cho kẻ thù).
Arnauld

37

Thạch , 6 byte

ạg105Ị

Lấy hai điểm mã làm đối số. Mang lại 1 cho bạn bè, 0 cho kẻ thù.

Hãy thử trực tuyến!

Lý lịch

Đặt nm là các điểm mã của hai ký tự đầu vào. Bằng cách lấy | n - m | , chúng ta chỉ cần quan tâm đến bản thân mình với tất cả 2 tổ hợp nhân vật. Bảng sau đây cho thấy tất cả 2 tổ hợp ký tự có sự khác biệt tuyệt đối tương ứng.

WU  2
UB 19
BR 16
RG 11
GW 16

WB 21
UR  3
BG  5
RW  5
GU 14

Tất cả kẻ thù kết hợp là chia hết cho 3 , 5 , hoặc 7 , nhưng không ai trong số những người bạn kết hợp này, vì vậy bạn bè là chính xác những người là đồng thủ với 3 × 5 × 7 = 105 .

Làm thế nào nó hoạt động

ạ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.

Phát hiện độc đáo! Tại sao giá trị tuyệt đối cần thiết? (Tôi đã thử trực tuyến và nó không đưa ra câu trả lời đúng; nhưng về mặt toán học thì không thành vấn đề.)
Greg Martin

@GregMartin Không cần thiết; ký khác biệt sẽ làm việc như là tốt. Phép trừ _là Jelly. Bạn đã sử dụng cái gì khác?
Dennis

Ah tôi thấy, tôi đọc sai chỉ là giá trị tuyệt đối, không khác biệt tuyệt đối.
Greg Martin


21

Befunge-98, 13 12 byte

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

Hãy thử trực tuyến!

In 0cho bạn bè và 1cho kẻ thù

Điều này sử dụng sự khác biệt giữa các giá trị ASCII của các chữ cái.

Nếu chúng ta lấy (((ASCII difference % 9) % 5) % 3), các giá trị cho kẻ thù sẽ là 0. Sau đó, chúng ta không phải là giá trị và in nó.

Cảm ơn @Martin đã chơi gôn


Sử dụng Jelly cho 9 byte: IA%9%5%3¬Chỉnh sửa Dùng thử trực tuyến!
Jonathan Allan

@Jonathan ALLan Tôi thấy bạn đã làm rồi! Đẹp.
MildlyMilquetoast

Tôi thực sự đã điều chỉnh phương thức của bạn (sử dụng mod 9 mod 6 thực tế chứ không phải tuyệt đối) và sử dụng thực tế là Jelly lập chỉ mục vào danh sách theo mô-đun để giảm xuống còn 7 . Tôi công nhận bạn và liên kết ở đây.
Jonathan Allan


18

Thạch , 8 7 byte

Cõng ra khỏi câu trả lời Befunge tuyệt vời của Mistah Figgins !

Iị390B¤

Hãy thử trực tuyến!

Làm sao?

Như Mistah Figgins lưu ý, quyết định có thể được đưa ra bằng cách lấy sự khác biệt tuyệt đối giữa các giá trị ASCII mod 9 mod 5 mod 3 - 0 sau đó là bạn bè và 1 và 2 là kẻ thù.

Thay vào đó, nếu chúng ta sử dụng mod 9 khác biệt (đơn giản), chúng ta thấy rằng bạn bè là 1, 2, 7 và 8 trong khi kẻ thù là 3, 4s, 5s và 6s.

Mã này lấy sự khác biệt với Ivà sau đó lập chỉ mục vào danh sách độ dài 9 [1,1,0,0,0,0,1,1,0], là 390 ở dạng nhị phân , 390B. Việc lập chỉ mục là cả hai mô-đun (rất hiệu quả việc lập chỉ mục thực hiện mod 9 miễn phí) và dựa trên 1 (do đó 1 ở bên trái).


16

Siêu lập trình mẫu C ++, 85 byte

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

ít chơi gôn

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

Vì đây là ngôn ngữ lập trình siêu dữ liệu, nên việc biên dịch cấu trúc hay không là một đầu ra có thể.

Một thể hiện của f<'W','B'>biên dịch khi và chỉ khi 'W''B'là kẻ thù.

Toán dựa trên câu trả lời Befunge .

Ví dụ sống .

Vì siêu lập trình mẫu C ++ là một trong những ngôn ngữ chơi golf tồi tệ nhất, bất cứ ai tệ hơn thế này đều cảm thấy xấu hổ. ;)


Có vẻ như có tổng cộng hai khoảng trắng thừa trong templates.
Yytsi

@TuukkaX đã sửa, d'oh
Yakk

14

Ruby, 22 19 byte

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

Đầu vào: mã ASCII của 2 ký tự. Đầu ra: 1 cho đồng minh, 0 cho kẻ thù.

Làm thế nào nó hoạt động:

Nhận sự khác biệt giữa 2 số modulo 9, sử dụng bitmask (390 là nhị phân 110000110) và nhận một bit bằng cách sử dụng []toán tử.


2
Ah tốt đẹp, tôi tiếp tục quên rằng số nguyên có thể được lập chỉ mục. +1
Martin Ender

16 byte: ->x,y{x*y%103%2}Lưu ý rằng 01được đảo ngược.
Eric Duminil

1
Và 15 byte x*y%51>9giống như mọi người khác. Tôi nghĩ rằng sẽ không công bằng cho những người ủng hộ để thay đổi nó một cách triệt để bây giờ.
GB

10

CJam , 8 byte

{*51%9>}

Một khối không tên dự kiến ​​sẽ có hai mã ký tự trên đầu ngăn xếp và thay thế chúng bằng 0(bạn bè) hoặc 1(kẻ thù).

Hãy thử trực tuyến!

Giải trình

Chà, bây giờ chúng ta đã thấy rất nhiều giải pháp số học thú vị, vì vậy tôi đoán sẽ ổn nếu tôi trình bày giải pháp của riêng mình bây giờ. Gần nhất với điều này tôi đã thấy cho đến nay là giải pháp C của Steadybox . Cái này được tìm thấy với sự giúp đỡ của một chuyên gia vũ phu GolfScript mà tôi đã viết cách đây một thời gian cho golf vô chính phủ.

Đây là những gì cái này làm với các đầu vào khác nhau (bỏ qua thứ tự, vì phép nhân ban đầu là giao hoán):

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

Chúng ta có thể thấy cách lấy sản phẩm của các đầu vào modulo 51 tách biệt các đầu vào thành các kết quả lớn và nhỏ và chúng ta có thể sử dụng bất kỳ giá trị nào ở giữa để phân biệt giữa hai trường hợp.


9

Röda , 30 22 21 byte

Byte được lưu nhờ @fergusq bằng cách sử dụng _để lấy các giá trị trên luồng làm đầu vào

{[_ in"WUBRGWGRBUW"]}

Hãy thử trực tuyến!

Hàm được chạy như push "WU" | fsau khi gán tên cho hàm

Giải trình

{                      /* Declares an anonymous function */
 [                 ]   /* Push */
  _ in                 /* the boolean value of the value on the stream is in */
      "WUBRGWGRBUW"    /* this string */
}

o_O tốc độ cực nhanh
Pavel

Có thể lưu 5 byte bằng cách đọc các giá trị đầu vào từ luồng thay vì lấy tham số: {[(_.._)in"WUBRGWGRBUW"]}nhưng sau đó hàm phải được gọi như thế [a, b] | f.
fergusq



8

Vim, 22 21 byte

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

Đầu vào: một dòng duy nhất chứa hai ký tự.

Đầu ra: bộ đệm trống nếu bạn bè, bộ đệm chứa WUBRGWGRBUWnếu kẻ thù.

Giải trình

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
Bạn có thể làm Cthay vìcw
Kritixi Lithos

8

Japt , 6 byte

Lấy cảm hứng từ giải pháp của @Martin Ender .

Lấy một mảng gồm hai mã char làm đầu vào.

×%51<9

Hãy thử trực tuyến! | Phòng thử nghiệm

Trả lại truecho bạn bè, falsecho kẻ thù.

Giải pháp 14 byte:

Lấy hai mã char làm đầu vào

nV a /3%3 f ¦1

Hãy thử trực tuyến! | Phòng thử nghiệm

Giải trình:

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

Giải pháp 12 byte:

"WUBRGW"ê èU

Hãy thử trực tuyến! | Phòng thử nghiệm

Giải trình:

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

Trả lại 1cho bạn bè và 0cho kẻ thù.

Giải pháp 9 byte :

Lấy cảm hứng từ giải pháp của @ Arnauld .

*V%24%B%2

Phòng thử nghiệm

Trả lại 1cho bạn bè, 0cho kẻ thù.

Giải pháp 11 byte:

lấy cảm hứng từ giải pháp của @Mistah Figgins .

nV %9%5%3¦0

Phòng thử nghiệm


8

Brain-Flak , 155, 147 , 135 byte

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

Hãy thử trực tuyến!

Đây là 134 byte mã cộng với một byte hình phạt cho -acờ cho phép nhập ASCII.

Điều này hoạt động bằng cách tìm sự khác biệt tuyệt đối giữa các đầu vào và kiểm tra xem chúng có bằng 2, 11, 16 hoặc 19. Nếu có, đầu vào là một người bạn và nó sẽ in 1. Nếu không, nó sẽ không in gì cả. Vì không có gì trong flak não tương ứng với một ngăn xếp trống, đó là giả, không có đầu ra nào là giá trị giả. ( meta )

Một điều tôi đặc biệt thích về câu trả lời này, đó là đoạn mã "khác biệt tuyệt đối" (nghĩa là (([(({}[{}]))<>])){({}())<>}{}{}<>{}) không ngăn xếp sạch, nhưng nó vẫn có thể được sử dụng trong câu trả lời này vì chúng tôi không quan tâm đến ngăn xếp nào chúng tôi kết thúc trước khi mã hóa sự khác biệt có thể.

Trong lần chỉnh sửa sau, tôi đã tận dụng lợi thế này nhiều hơn bằng cách lạm dụng phần còn lại trên ngăn xếp mà không kết thúc với sự khác biệt tuyệt đối trên nó. Trong lần sửa đổi đầu tiên, tôi đã tắt cả hai để giữ cho nó lành mạnh hơn một chút. Không làm điều này mang lại cho hai golf chính:

  1. Rõ ràng, nó loại bỏ mã để bật chúng : {}{}, nhưng quan trọng hơn:

  2. Nó cho phép chúng tôi nén 2, 11, 16, 19chuỗi từ

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

    đến

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

    May mắn thay, không có mã bổ sung cần thiết để xử lý các phần còn lại sau này, vì vậy chúng chỉ còn lại trên ngăn xếp thay thế.

Vì não bộ nổi tiếng là khó hiểu, nên đây là phiên bản dễ đọc / bình luận:

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

Có một cú đẩy, pop bạn có thể loại bỏ và bạn có thể đẩy 0 trong nếu hiệu quả hơn để xuống tới 129: TIO
Riley

@Riley Tuyệt, cảm ơn vì tiền boa! Tôi thích có một phiên bản nhận xét, vì vậy tôi sẽ đợi cho đến khi tôi có thể hiểu phiên bản đó trước khi cập nhật.
DJMcMayhem

Đó chỉ là hai thay đổi nhỏ. Đây là phần quan trọng. Nhận xét của tôi là trong tất cả các mũ, xin lỗi nếu có vẻ như tôi đang hét.
Riley

7

Thạch , 14 byte

“WUBRG”wЀIAÆP

Trả lại 1cho kẻ thù và 0cho bạn bè.

Bộ thử nghiệm tại Dùng thử trực tuyến!

Làm sao?

“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 byte

$Æ105¿Ö

Đây là một cổng của câu trả lời Jelly của tôi . Lấy danh sách các điểm mã làm đầu vào. In 1 cho bạn bè, 0 cho kẻ thù.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

$        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 byte

Đánh gôn 4 byte bằng thuật toán Mistah Figgins

Đã lưu 1 byte nhờ Lynn

l:m9%5%3%!

Đầu ra 1cho màu kẻ thù, 0cho màu đồng minh.

Hãy thử trực tuyến! (Hoặc xác minh tất cả các trường hợp thử nghiệm )

Giải trình

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

Đừng cố quá thông minh! l:m9%5%3%!là một byte ngắn hơn.
Lynn

@Lynn ồ, đúng rồi. Điều đó hơi nhàm chán. Cảm ơn
Business Cat

5

Võng mạc , 18 byte

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

Hãy thử trực tuyến!

Khá đơn giản: sắp xếp đầu vào và cố gắng khớp bất kỳ cặp đồng minh nào được sắp xếp với nó. Thật không may, tôi không nghĩ rằng bản chất dựa trên chuỗi của Retina cho phép bất kỳ phương pháp tiếp cận thú vị nào có thể cạnh tranh.

Để xem lén cho phiên bản Retina tiếp theo, tôi dự định thêm một tùy chọn hoán đổi regex và chuỗi đích (vì vậy chuỗi hiện tại sẽ được sử dụng làm regex và bạn cung cấp cho nó một chuỗi để kiểm tra), trong trường hợp này ngắn hơn giải pháp sẽ hoạt động (hoặc một cái gì đó dọc theo những dòng đó):

?`WUBRGWGRBUW



4

Thạch , 6 byte

ạ:3%3Ḃ

Vì sự hoàn hảo. Lấy hai điểm mã làm đối số. Mang lại 0 cho bạn bè, 1 cho kẻ thù.

Hãy thử trực tuyến!

Lý lịch

Đặt nm là các điểm mã của hai ký tự đầu vào. Bằng cách lấy | n - m | , chúng ta chỉ cần quan tâm đến bản thân mình với tất cả 2 tổ hợp nhân vật. Bảng sau đây cho thấy tất cả 2 tổ hợp ký tự có sự khác biệt tuyệt đối tương ứng.

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

Nếu chúng ta chia các số nguyên này cho 3 , chúng ta sẽ nhận được các chỉ số sau.

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

1 , 47 có thể được ánh xạ thành 1 bằng cách lấy kết quả modulo 3 .

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

Bây giờ chúng ta chỉ cần nhìn vào sự tương đương.

Làm thế nào nó hoạt động

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

Khối, 11 byte

Một triển khai Cubix của giải pháp Arnauld.

U%O@A*'g%2W

Sử dụng

Nhập hai ký tự, và nó xuất ra 0cho bạn bè và 1cho kẻ thù. Hãy thử nó ở đây.

Giải trình

Mã có thể được mở rộng như thế này.

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

Các ký tự được thực hiện theo thứ tự này (không bao gồm luồng điều khiển):

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 byte

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

Ví dụ sử dụng: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB

Điều này in 1nếu cặp là một người bạn, 0nếu không. Tôi muốn làm một cái gì đó thông minh, nhưng mọi thứ tôi nghĩ sẽ dài hơn.


2

Thạch , 12 byte

“WUBRGW”ŒBẇ@

Đầu ra 1cho đồng minh, 0cho kẻ thù.

Hãy thử trực tuyến!

Giải trình

“WUBRGW”ŒBẇ@   Main link

“WUBRGW”       The string "WUBRGW"
        ŒB     Bounce; yields "WUBRGWGRBUW"
          ẇ@   Check if the input exists in that string

2

Ruby, 28 byte

Đầu ra đúng cho bạn bè, sai cho kẻ thù:

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

Phiên bản không được chỉnh sửa không khác nhiều:

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


2

GolfScript , 7 byte

~*51%9>

Lấy hai điểm mã làm đầu vào.

Hãy thử trực tuyến! (Bộ kiểm tra chuyển đổi định dạng đầu vào cho thuận tiện.)

Một cổng GolfScript trong câu trả lời CJam của tôi (về mặt kỹ thuật, là cổng CJam là kết quả của người tìm kiếm vũ phu GolfScript của tôi ... uhhh ...).

Tuy nhiên, vì GolfScript có modulo đúng với đầu vào âm, nên có một giải pháp thay thế thú vị ở cùng một số byte sử dụng 4cho kẻ thù thay vì 1:

~-)9%4&

Hãy thử trực tuyến!

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 byte

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

Cổng từ câu trả lời Befunge-98 của @Mistah Figginscâu trả lời ngắn nhất trong Java 7 từ các câu trả lời được đăng cho đến nay.
Đối với những người khác:

39 byte: Cảng từ @Arnauld JavaScript (ES6) câu trả lời 's .

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

39 byte: Cảng từ @MartinEnder CJam câu trả lời 's

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

47 byte: Cổng từ câu trả lời C của @Steadybox

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

52 byte: Cổng từ câu trả lời Python 2 của @Lynn

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

LƯU Ý: Bỏ qua các câu trả lời sử dụng các số nguyên tố / palindromes và như nhau, bởi vì các câu trả lời gần như không có trong Java. ;)
TODO: Đến với câu trả lời của riêng tôi .. Mặc dù tôi nghi ngờ nó ngắn hơn hầu hết những câu hỏi này.

Hãy thử tất cả ở đây.


EDIT: Ok, tự mình nghĩ ra thứ gì đó không tệ lắm:

50 byte:

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

Giải trình:

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

Tất cả kẻ thù đều ở trong phạm vi 4-6 (bao gồm) hoặc 0.
EDIT2: Hmm .. Tôi chỉ nhận thấy nó rất giống với câu trả lời của @Steadybox .. :(


2

PHP, 31 byte

echo!strstr(WBGURWRUGBW,$argn);

Chạy với echo AB | php -nR '<code>, ở đâu ABlà hai màu.

strtrtrả về chuỗi từ vị trí tìm thấy đầu vào;
với WBGURWRUGBWhaystack, điều này trả về một chuỗi trung thực nếu màu sắc là kẻ thù; chuỗi rỗng nếu không.

!biến chuỗi trung thực thành false, dẫn đến đầu ra trống
và chuỗi trống thành true, dẫn đến đầu ra 1.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.