Magic the Gathering: เพื่อนหรือศัตรู?


67

ในเกมการ์ดเวทย์มนตร์: การรวบรวมมีห้าสีที่แตกต่างกันซึ่งแสดงถึงความผูกพันของการ์ดสีขาว ( 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
Captain Man

12
@CaptainMan ฉันจะ upvote คุณถ้าคุณสามารถทำให้มันพอดีกับการโพสต์ตัวละคร 30k :)
Walfrat

@ Walrat 30k? ควรเป็นไปได้
ไม่ใช่ Charles

2
@IvanKolmychek จากพันธมิตรที่ไม่คาดคิดมากที่สุดจะได้ผลลัพธ์ที่ไม่คาดคิดที่สุด
aluriak

1
ความจริงแล้วสนุก: เวทมนตร์: การรวบรวมนั้นกำลังทำให้สมบูรณ์ :)
Matthew Roh

คำตอบ:


82

JavaScript (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

4
ค้นหาที่ยอดเยี่ยม!
Greg Martin

มีคณิตศาสตร์ที่ฉลาดบ้างไหมที่ฉันไม่รู้จักที่นี่หรือคุณแค่ดุร้ายกับ modulos ที่แตกต่างกันจนกว่าคุณจะได้อันที่ใช่หรือไม่
FourOhFour

@ FourOhFour มันถูกบังคับให้ดุร้าย ฉันคิดว่านี่เป็นทางออกคู่โมดูโลที่เล็กที่สุด แต่พอร์ตของคำตอบนี้ (ซึ่งใช้การเปรียบเทียบ) จริง ๆ แล้วจะสั้นกว่าหนึ่งไบต์
Arnauld

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

ทั้งหมดศัตรูอยู่รวมกันเป็นหารด้วย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

อ่าฉันเข้าใจแล้วฉันอ่านผิด ๆว่ามันคุ้มค่าจริงๆ
เกร็กมาร์ติน


21

Befunge-98, 13 12 bytes

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

ลองออนไลน์!

พิมพ์0สำหรับเพื่อนและ1ศัตรู

สิ่งนี้ใช้ความแตกต่างระหว่างค่า ASCII ของตัวอักษร

ถ้าเรารับ(((ASCII difference % 9) % 5) % 3)ค่าสำหรับศัตรูจะเป็น 0 จากนั้นเราไม่ได้ค่าและพิมพ์

ขอบคุณ@Martinสำหรับการเล่นกอล์ฟ


ใช้ Jelly สำหรับ 9 ไบต์: IA%9%5%3¬แก้ไขลองออนไลน์!
Jonathan Allan

@JanathanAllan ฉันเห็นว่าคุณทำไปแล้ว! ดี
MildlyMilquetoast

ที่จริงผมปรับเปลี่ยนวิธีการของคุณ (ใช้จริงมากกว่าแน่นอนแตกต่าง) mod 9 สมัยที่ 6 และใช้ความจริงที่ว่าดัชนีวุ้นเป็นรายการชุดที่จะได้รับมันลงไป 7 ฉันรับรองคุณและเชื่อมโยงที่นี่
Jonathan Allan

@JanathanAllan ฉันได้วิธี mod 9 mod 6 ด้วย แต่ Befunge ไม่มีความแตกต่างหรือค่าสัมบูรณ์ดังนั้นมันจึงไม่เป็นไปได้
MildlyMilquetoast

18

เยลลี่ , 8 7 ไบต์

Piggybacks จากคำตอบ Befunge สุดวิเศษของ Mistah Figgins !

Iị390B¤

ลองออนไลน์!

อย่างไร?

ดังที่ Mistah Figgins ตั้งข้อสังเกตการตัดสินใจอาจทำโดยการใช้ความแตกต่างที่แน่นอนระหว่างค่า ASCII mod 9 mod 5 mod 3 - 0s นั้นเป็นเพื่อนและ 1s และ 2s เป็นศัตรู

ถ้าเราใช้ความแตกต่าง mod (ธรรมดา) 9 เราพบว่าเพื่อนเป็น 1, 2, 7 และ 8 ในขณะที่ศัตรูคือ 3s, 4s, 5s และ 6s

รหัสที่ใช้แตกต่างกับ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>{};

น้อย golfed:

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

เนื่องจากนี่เป็นภาษา metaprogramming การคอมไพล์การคอมไพล์หรือไม่เป็นเอาต์พุตที่เป็นไปได้หนึ่งรายการ

อินสแตนซ์ของการf<'W','B'>รวบรวมถ้าและถ้าหาก'W'และ'B'เป็นศัตรู

คณิตศาสตร์ตามออกคำตอบ Befunge

ตัวอย่างสด

เนื่องจากเทมเพลตการเขียนโปรแกรม C ++ เป็นหนึ่งในภาษากอล์ฟที่เลวร้ายที่สุดใครก็ตามที่แย่กว่านี้ควรรู้สึกอับอาย ;)


ดูเหมือนว่ามีทั้งหมดสอง whitespaces ซ้ำซ้อนภายในtemplates
Yytsi

@TuukkaX ได้รับการแก้ไขแล้วศิลปวัตถุ
Yakk

14

Ruby, 22 19 ไบต์

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

อินพุต: รหัส ASCII ของ 2 ตัวอักษร เอาต์พุต: 1 สำหรับพันธมิตร, 0 สำหรับศัตรู

มันทำงานอย่างไร:

รับความแตกต่างระหว่าง 2 หมายเลข modulo 9 ใช้ bitmask (390 เป็น binary 110000110) และรับ bit เพียงครั้งเดียวโดยใช้[]โอเปอเรเตอร์


2
ดีมากฉันลืมไปเลยว่าจำนวนเต็มสามารถสร้างดัชนีได้ +1
Martin Ender

16 ไบต์: ->x,y{x*y%103%2}โปรดทราบว่า0และ1จะย้อนกลับ
Eric Duminil

1
และ 15 ไบต์x*y%51>9เหมือนกันทุกคน ฉันคิดว่ามันคงไม่ยุติธรรมกับผู้อัปโหลดที่จะเปลี่ยนมันอย่างรุนแรงในขณะนี้
GB

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

เราสามารถเห็นได้ว่าการนำผลิตภัณฑ์ของอินพุต modulo 51 มาแยกอินพุตกับผลลัพธ์ที่มีขนาดใหญ่และเล็กได้อย่างไรและเราสามารถใช้ค่าใด ๆ ระหว่างนั้นเพื่อแยกความแตกต่างระหว่างสองกรณี


9

Röda , 30 22 21 bytes

จำนวนไบต์ที่บันทึกไว้ต้องขอบคุณ @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



8

เป็นกลุ่ม22 22ไบต์

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

Japtap , 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 bytes

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

ลองออนไลน์!

นี่คือโค้ดขนาด 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

มันเป็นการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น นี่คือส่วนสำคัญ ความคิดเห็นของฉันอยู่ในตัวพิมพ์ใหญ่ทั้งหมดขออภัยถ้าดูเหมือนว่าฉันกำลังตะโกน
Riley


7

05AB1E , 7 ไบต์

$Æ105¿Ö

นี่คือพอร์ตของคำตอบของฉัน Jelly ทำรายการจุดโค้ดเป็นอินพุต พิมพ์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 ไบต์ขอบคุณ Lynn

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

@ ลินน์โอ้ว้าวมันเป็น มันช่างน่าเบื่อ ขอบคุณ
Business Cat

5

เรติน่า 18 ไบต์

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

ลองออนไลน์!

ค่อนข้างตรงไปข้างหน้า: เรียงลำดับอินพุตและพยายามจับคู่ใด ๆ ของพันธมิตรที่เรียงลำดับไว้ น่าเสียดายที่ฉันไม่คิดว่าลักษณะของสตริงแบบเรติน่าอนุญาตให้มีวิธีการที่น่าสนใจมากขึ้นในการแข่งขัน

ในฐานะที่เป็นแอบมองสำหรับรุ่น Retina ต่อไปฉันวางแผนที่จะเพิ่มตัวเลือกที่แลกเปลี่ยน regex และสตริงเป้าหมาย (ดังนั้นสตริงปัจจุบันจะถูกใช้เป็น regex และคุณให้สตริงเพื่อตรวจสอบ) ซึ่งในกรณีนี้สั้นกว่านี้ วิธีแก้ปัญหาจะทำงาน (หรือบางสิ่งบางอย่างตามสายเหล่านั้น):

?`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 ของโซลูชันของ Arnauld

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

Ruby, 28 ไบต์

เอาต์พุตจริงสำหรับเพื่อนเท็จสำหรับศัตรู:

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

เวอร์ชันที่ไม่ดีไม่แตกต่างกันมาก:

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


2

GolfScriptขนาด 7 ไบต์

~*51%9>

ใช้จุดโค้ดสองจุดเป็นอินพุต

ลองออนไลน์! (ชุดทดสอบที่แปลงรูปแบบอินพุตเพื่อความสะดวก)

พอร์ต GolfScript ของคำตอบ CJam ของฉัน (ซึ่งทางเทคนิคคือพอร์ต CJam ของผลลัพธ์ของ GolfScript brute forcer ... 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 ไบต์:พอร์ตจาก@Arnauld JavaScript (ES6) คำตอบของ

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

39 ไบต์:พอร์ตจาก@MartinEnder 's คำตอบ CJam

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

47 ไบต์:พอร์ตจาก@Steadybox 'C answer

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

52 ไบต์:พอร์ตจากคำตอบ Python 2 ของ@Lynn

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

หมายเหตุ: ข้ามคำตอบที่ใช้ primes / palindromes และเหมือนกันเพราะคำตอบนั้นไม่ใกล้เคียงกับ 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 สิ่งนี้จะคืนค่าสายสัจธรรมถ้าสีเป็นศัตรู สตริงว่างถ้าไม่

!เปลี่ยนสตริง truthy ที่จะfalseส่งผลในการส่งออกที่ว่างเปล่า
และสตริงที่ว่างเปล่าที่จะส่งผลในการส่งออกtrue1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.