Magic the Gathering: Friends or Foes?

67

Dalam permainan kartu Magic: the Gathering ada lima warna berbeda, yang mewakili afiliasi kartu yang longgar, Putih ( W), Biru ( U), Hitam ( B), Merah ( R), dan Hijau ( G). Ini sering diatur dalam pentagon sebagai berikut:

  W
G   U
 R B

Baik dalam pengetahuan MtG maupun dalam banyak mekanika kartu, warna-warna yang berdekatan dalam pentagon ini biasanya dianggap sebagai sekutu, dan warna-warna yang tidak berdekatan (agak berlawanan) dianggap musuh.

Dalam tantangan ini, Anda akan diberi dua warna dan harus menentukan hubungannya.

Tantangan

Anda diberi dua karakter berbeda dari set BGRUW. Anda dapat mengambil ini sebagai string dua karakter, string dengan pembatas antara karakter, dua nilai karakter yang terpisah, dua string singleton, dua bilangan bulat yang mewakili titik kode mereka, atau daftar atau set tipe yang berisi dua karakter / string / integer.

Output Anda harus menjadi salah satu dari dua nilai yang berbeda dan konsisten pilihan Anda, yang menunjukkan bahwa kedua warna adalah sekutu dan yang menunjukkan bahwa mereka adalah musuh. Salah satu dari dua nilai itu mungkin bukan keluaran sama sekali.

Anda dapat menulis sebuah program atau fungsi dan menggunakan salah satu metode standar kami untuk menerima input dan memberikan output.

Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.

Ini adalah , sehingga jawaban terpendek yang valid - diukur dalam byte - menang.

Uji Kasus

Hanya ada 20 input yang mungkin, jadi saya akan mendaftar semuanya.

Teman:

WU   UB   BR   RG   GW   UW   BU   RB   GR   WG

Musuh:

WB   UR   BG   RW   GU   BW   RU   GB   WR   UG
Martin Ender
sumber
33
Selanjutnya: terapkan aturan inti: P
Captain Man
12
@CaptainMan saya akan mendukung Anda jika Anda dapat membuatnya pas di posting karakter 30k :)
Walfrat
@Walfrat 30k? Harus dimungkinkan
Bukan berarti Charles
2
@IvanKolmychek dari aliansi yang paling tak terduga datang hasil yang paling tak terduga.
aluriak
1
Fakta menyenangkan: Sihir: Pertemuan itu turing lengkap :)
Matthew Roh

Jawaban:

82

JavaScript (ES6),  26 23 17 15  14 byte

Mengambil input sebagai dua kode ASCII dalam sintaks currying (a)(b). Pengembalian 4untuk teman atau 0untuk musuh.

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

Cobalah online!

Bagaimana?

NB: hanya hasil bagi bilangan bulat dari divisi dengan 0,6 ditunjukkan di bawah ini.

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

Pendekatan sebelumnya, 15 byte

Mengambil input sebagai dua kode ASCII dalam sintaks currying (a)(b). Pengembalian 0untuk teman atau 1untuk musuh.

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

Cobalah online!

Bagaimana?

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

Pendekatan awal, 23 byte

Mengambil input sebagai string 2 karakter. Pengembalian trueuntuk teman atau falseuntuk musuh.

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

Cobalah online!

Arnauld
sumber
10
Ah, akhirnya sesuatu yang menyenangkan. :)
Martin Ender
4
Temuan yang fantastis!
Greg Martin
Apakah ada beberapa matematika pintar yang tidak saya sadari di sini atau apakah Anda baru saja memaksa modulos berbeda hingga Anda mendapatkannya?
FourOhFour
@ Fourour Fourour paksa dipaksa. Saya pikir ini adalah solusi modulo ganda terkecil . Tetapi port jawaban ini (yang menggunakan perbandingan) sebenarnya satu byte lebih pendek.
Arnauld
1
@ OddDev Saya benar-benar menguji semua bit, bukan hanya yang paling tidak penting. Misalnya, a*b%290&8akan bekerja dengan baik (memproduksi 0untuk teman atau 8untuk musuh).
Arnauld
37

Jelly , 6 byte

ạg105Ị

Mengambil dua poin kode sebagai argumen. Menghasilkan 1 untuk teman, 0 untuk musuh.

Cobalah online!

Latar Belakang

Biarkan n dan m menjadi titik kode dari dua karakter input. Dengan mengambil | n - m | , kita hanya perlu memusatkan perhatian pada 2 kombinasi karakter saja. Tabel berikut menunjukkan semua 2-kombinasi karakter perbedaan absolut yang sesuai.

WU  2
UB 19
BR 16
RG 11
GW 16

WB 21
UR  3
BG  5
RW  5
GU 14

Semua kombinasi musuh dapat dibagi dengan 3 , 5 , atau 7 , tetapi tidak ada teman yang menggabungkan ini, jadi teman adalah persis mereka yang co-prime dengan 3 × 5 × 7 = 105 .

Bagaimana itu bekerja

ạ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.
Dennis
sumber
Terlihat dengan indah! Mengapa nilai absolut diperlukan? (Saya mencobanya secara online dan itu tidak memberikan jawaban yang benar; tetapi secara matematis itu seharusnya tidak masalah.)
Greg Martin
@GregMartin Tidak perlu; perbedaan yang ditandatangani akan bekerja dengan baik juga. Pengurangannya _adalah Jelly. Apakah Anda menggunakan sesuatu yang lain?
Dennis
Ah, begitu, saya salah membaca hanya sebagai nilai absolut, bukan perbedaan absolut.
Greg Martin
21

Befunge-98, 13 12 byte

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

Cobalah online!

Cetakan 0untuk teman dan 1musuh

Ini menggunakan perbedaan antara nilai ASCII dari surat-surat.

Jika kita mengambil (((ASCII difference % 9) % 5) % 3), nilai untuk musuh akan menjadi 0. Kemudian, kita bukan nilai dan mencetaknya.

Terima kasih kepada @Martin untuk golfnya

MildlyMilquetoast
sumber
Gunakan Jelly untuk 9 byte: IA%9%5%3¬Sunting Coba Online!
Jonathan Allan
@ Jonathan Allan, saya melihat Anda sudah melakukannya! Bagus.
MildlyMilquetoast
Saya benar-benar mengubah metode Anda (menggunakan perbedaan aktual, bukan absolut) mod 9 mod 6, dan menggunakan fakta bahwa Jelly mengindeks ke dalam daftar secara modular untuk menurunkannya menjadi 7 . Saya akreditasi Anda dan ditautkan di sini.
Jonathan Allan
@ Jonathan Allan Saya datang dengan metode mod 9 mod 6 juga, tetapi Befunge tidak memiliki perbedaan aktual atau nilai absolut, jadi itu tidak layak
MildlyMilquetoast
18

Jelly , 8 7 byte

Piggyback off dari jawaban Befunge Mistah Figgins yang luar biasa !

Iị390B¤

Cobalah online!

Bagaimana?

Sebagai Mistah Figgins mencatat keputusan dapat dibuat dengan mengambil perbedaan absolut antara nilai ASCII mod 9 mod 5 mod 3 - 0s kemudian teman dan 1s dan 2s adalah musuh.

Jika kita alih-alih mengambil perbedaan (biasa) mod 9 kita menemukan bahwa teman-teman adalah 1s, 2s, 7s, dan 8s sementara musuh adalah 3s, 4s, 5s, dan 6s.

Kode mengambil perbedaan dengan Idan kemudian indeks ke daftar panjang 9 [1,1,0,0,0,0,1,1,0], yang merupakan 390 dalam biner 390B,. Pengindeksan bersifat modular (sehingga pengindeksan melakukan mod 9 secara gratis) dan berbasis 1 (karenanya 1 di sebelah kiri).

Jonathan Allan
sumber
16

Metaprogramming template 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>{};

kurang golf:

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

Karena ini adalah bahasa pemrograman metaprogram, sebuah kompilasi konstruk atau bukan adalah salah satu hasil yang mungkin.

Contoh f<'W','B'>kompilasi jika dan hanya jika 'W'dan 'B'adalah musuh.

Matematika didasarkan pada jawaban Befunge .

Contoh langsung .

Karena metaprogramming template C ++ adalah salah satu bahasa golf terburuk, siapa pun yang lebih buruk dari ini seharusnya merasa malu. ;)

Yakk
sumber
Sepertinya ada total dua spasi putih berlebihan di dalam template.
Yytsi
@TuukkaX diperbaiki, d'oh
Yakk
14

Ruby, 22 19 byte

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

Input: kode ASCII dari 2 karakter. Output: 1 untuk sekutu, 0 untuk musuh.

Bagaimana itu bekerja:

Dapatkan perbedaan antara 2 angka modulo 9, gunakan bitmask (390 adalah binary 110000110) dan dapatkan bit tunggal menggunakan []operator.

GB
sumber
2
Ah bagus, saya selalu lupa bahwa bilangan bulat dapat diindeks. +1
Martin Ender
16 byte: ->x,y{x*y%103%2}Catat itu 0dan 1dibalik.
Eric Duminil
1
Dan 15 byte dengan yang x*y%51>9lainnya. Saya pikir tidak adil jika upvotes mengubahnya begitu radikal sekarang.
GB
10

CJam , 8 byte

{*51%9>}

Blok tanpa nama yang mengharapkan dua kode karakter di atas tumpukan dan menggantinya dengan 0(teman) atau 1(musuh).

Cobalah online!

Penjelasan

Yah, kami telah melihat banyak solusi aritmatika yang menyenangkan sekarang, jadi saya kira tidak apa-apa jika saya menghadirkan solusi saya sendiri sekarang. Yang paling dekat dengan ini saya telah melihat sejauh ini adalah Steadybox Solusi C . Yang ini ditemukan dengan bantuan seorang forcer GolfScript brute saya menulis beberapa waktu lalu untuk golf anarki.

Inilah yang dilakukan orang ini terhadap berbagai input (mengabaikan urutan, karena perkalian awal adalah komutatif):

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

Kita dapat melihat bagaimana mengambil produk dari input modulo 51 dengan baik memisahkan input menjadi hasil yang besar dan kecil, dan kita dapat menggunakan salah satu nilai di antara untuk membedakan antara dua kasus.

Martin Ender
sumber
9

Röda , 30 22 21 byte

Bytes disimpan berkat @fergusq dengan menggunakan _untuk mengambil nilai pada streaming sebagai input

{[_ in"WUBRGWGRBUW"]}

Cobalah online!

Fungsi dijalankan seperti push "WU" | fsetelah menetapkan nama ke fungsi

Penjelasan

{                      /* Declares an anonymous function */
 [                 ]   /* Push */
  _ in                 /* the boolean value of the value on the stream is in */
      "WUBRGWGRBUW"    /* this string */
}
Kritixi Lithos
sumber
o_O kecepatan kilat
Pavel
Dimungkinkan untuk menyimpan 5 byte dengan membaca nilai input dari aliran alih-alih mengambil parameter:, {[(_.._)in"WUBRGWGRBUW"]}tetapi kemudian fungsi tersebut harus dipanggil seperti [a, b] | f.
fergusq
9

05AB1E , 10 byte

Mengembalikan 0 untuk teman dan 1 untuk musuh.

‘Û‹BWR‘ûIå

Cobalah online! atau sebagai Test suite

Penjelasan

‘Û‹BWR‘     # push the string "RUGBWR"
       û    # palendromize (append the reverse minus the first char)
        Iå  # check if input is in this string
Emigna
sumber
9

C, 33 32 29 24 22 byte

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

Mengembalikan 1 jika teman, 0 jika musuh.

Steadybox
sumber
8

Vim, 22 21 byte

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

Input: satu baris berisi dua karakter.

Output: kosongkan buffer jika teman, buffer mengandung WUBRGWGRBUWjika musuh.

Penjelasan

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
m-chrzan
sumber
2
Anda bisa melakukannya Cdaripadacw
Kritixi Lithos
8

Japt , 6 byte

Terinspirasi oleh solusi @Martin Ender .

Mengambil array dari dua kode char sebagai input.

×%51<9

Cobalah online! | Test Suite

Pengembalian trueuntuk teman, falseuntuk musuh.

Solusi 14-byte:

Mengambil dua kode karakter sebagai input

nV a /3%3 f ¦1

Cobalah online! | Test Suite

Penjelasan:

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

Solusi 12-byte:

"WUBRGW"ê èU

Cobalah online! | Test Suite

Penjelasan:

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

Pengembalian 1untuk teman dan 0untuk musuh.

Solusi 9-byte :

Terinspirasi oleh solusi @ Arnauld .

*V%24%B%2

Test Suite

Pengembalian 1untuk teman, 0untuk musuh.

Solusi 11-byte:

terinspirasi oleh solusi @Mistah Figgins .

nV %9%5%3¦0

Test Suite

Oliver
sumber
8

Brain-Flak , 155, 147 , 135 byte

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

Cobalah online!

Ini adalah 134 byte kode ditambah satu byte penalti untuk -aflag yang memungkinkan input ASCII.

Ini berfungsi dengan menemukan perbedaan absolut antara input, dan memeriksa apakah mereka sama dengan 2, 11, 16, atau 19. Jika ya, input adalah teman, dan mencetak 1. Jika tidak, ia tidak mencetak apa pun. Karena tidak ada apa pun di brain-flak yang sesuai dengan tumpukan kosong, yang palsu, tidak ada output yang merupakan nilai palsu. ( meta )

Satu hal yang saya sukai dari jawaban ini, adalah cuplikan "perbedaan mutlak" (yaitu, (([(({}[{}]))<>])){({}())<>}{}{}<>{}) tidak menumpuk bersih, tetapi masih dapat digunakan dalam jawaban ini karena kami tidak peduli tumpukan mana yang kami hadapi sebelum penyandian perbedaan yang mungkin.

Pada edit selanjutnya, saya mengambil keuntungan dari ini lebih dengan menyalahgunakan sisa makanan di tumpukan yang tidak berakhir dengan perbedaan absolut di atasnya. Pada revisi pertama, saya muncul keduanya untuk menjaga sedikit lebih waras. Tidak melakukan ini memberikan dua golf utama:

  1. Jelas, itu menghapus kode untuk pop mereka:, {}{}tetapi yang lebih penting:

  2. Ini memungkinkan kita untuk mengompresi 2, 11, 16, 19urutan dari

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

    untuk

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

    Untungnya, tidak ada kode tambahan yang diperlukan untuk menangani sisa-sisa ini nanti, jadi mereka hanya tersisa di tumpukan alternatif.

Karena brain-flak terkenal sulit dipahami, berikut adalah versi yang dapat dibaca / dikomentari:

#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
sumber
Ada dorongan, pop yang dapat Anda hapus, dan Anda dapat menekan 0 jika lebih efisien hingga 129: TIO
Riley
@Riley Keren, terima kasih atas tipnya! Saya suka memiliki versi komentar, jadi saya akan menunggu sampai saya dapat memahami versi itu sebelum memperbarui.
DJMcMayhem
Itu hanya dua perubahan kecil. Inilah bagian yang penting. Komentar saya ada di semua batas, maaf jika sepertinya saya berteriak.
Riley
7

Jelly , 14 byte

“WUBRG”wЀIAÆP

Pengembalian 1untuk musuh dan 0untuk teman.

Test suite di Coba online!

Bagaimana?

“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
Jonathan Allan
sumber
7

05AB1E , 7 byte

$Æ105¿Ö

Ini adalah port jawaban Jelly saya . Mengambil daftar titik kode sebagai input. Mencetak 1 untuk teman, 0 untuk musuh.

Cobalah online!

Bagaimana itu bekerja

$        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).
Dennis
sumber
6

CJam , 16 12 11 10 byte

Golf 4 byte dengan menggunakan algoritma Mistah Figgins

Disimpan 1 byte berkat Lynn

l:m9%5%3%!

Output 1untuk warna musuh, 0untuk warna sekutu.

Cobalah online! (Atau verifikasi semua kasus uji )

Penjelasan

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
Kucing Bisnis
sumber
Jangan mencoba terlalu pintar! l:m9%5%3%!byte lebih pendek.
Lynn
@ Lynn Oh wow, benar. Itu agak membosankan. Terima kasih
Bisnis Cat
5

Retina , 18 byte

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

Cobalah online!

Cukup terus terang: mengurutkan input dan mencoba mencocokkan salah satu pasangan sekutu yang diurutkan terhadapnya. Sayangnya, saya tidak berpikir bahwa sifat berbasis tali dari Retina memungkinkan pendekatan yang lebih menarik untuk menjadi kompetitif.

Sebagai pengintaian untuk versi Retina berikutnya, saya berencana untuk menambahkan opsi yang menukar regex dan string target (jadi string saat ini akan digunakan sebagai regex dan Anda memberinya string untuk diperiksa), dalam hal ini lebih pendek solusi akan bekerja (atau sesuatu di sepanjang garis itu):

?`WUBRGWGRBUW
Martin Ender
sumber
4

Brachylog , 10 byte

Solusi mudah, tidak ada trik yang terlibat.

p~s"WUBRGW

Cobalah online!

Penjelasan

p               A permutation of the input
 ~s             is a substring of
   "WUBRGW      this string
Leo
sumber
4

Jelly , 6 byte

ạ:3%3Ḃ

Demi kelengkapan ini. Mengambil dua poin kode sebagai argumen. Menghasilkan 0 untuk teman, 1 untuk musuh.

Cobalah online!

Latar Belakang

Biarkan n dan m menjadi titik kode dari dua karakter input. Dengan mengambil | n - m | , kita hanya perlu memusatkan perhatian pada 2 kombinasi karakter saja. Tabel berikut menunjukkan semua 2-kombinasi karakter perbedaan absolut yang sesuai.

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

Jika kita membagi bilangan bulat ini dengan 3 , kita mendapatkan quotients berikut.

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

1 , 4 , dan 7 dapat dipetakan ke 1 dengan mengambil hasil modulo 3 .

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

Sekarang kita hanya perlu melihat paritasnya.

Bagaimana itu bekerja

ạ: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.
Dennis
sumber
4

Cubix, 11 byte

Implementasi Cubix dari solusi Arnauld.

U%O@A*'g%2W

Pemakaian

Masukkan dua karakter, dan hasilnya 0untuk teman dan 1musuh. Coba di sini.

Penjelasan

Kode dapat diperluas seperti ini.

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

Karakter dieksekusi dalam urutan ini (tidak termasuk aliran kontrol):

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
Luke
sumber
2

AWK, 23 Bytes

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

Contoh penggunaan: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB

Ini akan mencetak 1jika pasangan adalah teman, 0jika tidak. Saya ingin melakukan sesuatu yang pintar, tetapi semua yang saya pikirkan akan lebih lama.

Robert Benson
sumber
2

Jelly , 12 byte

“WUBRGW”ŒBẇ@

Output 1untuk sekutu, 0untuk musuh.

Cobalah online!

Penjelasan

“WUBRGW”ŒBẇ@   Main link

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

Ruby, 28 byte

Output benar untuk teman, salah untuk musuh:

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

Versi ungolfed tidak jauh berbeda:

p 'WUBRGWGRBUW'.include?(ARGV.join(''))
Sculper
sumber
2

GolfScript , 7 byte

~*51%9>

Mengambil dua titik kode sebagai input.

Cobalah online! (Test suite yang mengubah format input untuk kenyamanan.)

Port GolfScript dari jawaban CJam saya (yang secara teknis, adalah port CJam dari hasil forcer GolfScript saya yang kasar ... uhhh ...).

Namun, karena GolfScript mendapatkan modulo dengan input negatif dengan benar, ada solusi alternatif yang menyenangkan pada jumlah byte yang sama yang digunakan 4untuk musuh daripada 1:

~-)9%4&

Cobalah online!

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
Martin Ender
sumber
2

Java 7, 38 byte

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

Port dari @Mistah Figgins 'Befunge-98 jawaban adalah yang terpendek di Jawa 7 dari jawaban yang diposting sejauh ini.
Adapun yang lainnya:

39 byte: Port dari jawaban JavaScript (ES6) @Arnauld .

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

39 bytes: Pelabuhan dari @MartinEnder 's CJam jawaban

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

47 byte: Port dari jawaban @Steadybox 'C

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

52 byte: Port dari @Lynn 's Python 2 menjawab

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

CATATAN: Melewati jawaban yang menggunakan bilangan prima / palindrom dan yang sama, karena mereka sama sekali tidak pendek di Jawa. ;)
TODO: Datang dengan jawaban saya sendiri .. Meskipun saya ragu itu lebih pendek dari sebagian besar dari ini.

Coba semuanya di sini.


EDIT: Ok, muncul sendiri sesuatu yang tidak terlalu buruk:

50 byte:

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

Penjelasan:

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

Semua musuh berada dalam kisaran 4-6 (inklusif) atau 0.
EDIT2: Hmm .. Saya hanya memperhatikan bahwa ini sangat mirip dengan jawaban @Steadybox '.. :(

Kevin Cruijssen
sumber
2

PHP, 31 byte

echo!strstr(WBGURWRUGBW,$argn);

Jalankan dengan echo AB | php -nR '<code>, di mana Adan Bdua warna.

strtrmengembalikan string dari posisi di mana input ditemukan;
dengan WBGURWRUGBWtumpukan jerami ini mengembalikan string yang benar jika warnanya musuh; string kosong jika tidak.

!mengubah string yang sebenarnya menjadi false, menghasilkan output kosong
dan string kosong menjadi true, menghasilkan output 1.

Titus
sumber