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 kode-golf , 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
sumber
Jawaban:
JavaScript (ES6),
26 23 17 1514 byteMengambil input sebagai dua kode ASCII dalam sintaks currying
(a)(b)
. Pengembalian4
untuk teman atau0
untuk musuh.Cobalah online!
Bagaimana?
NB: hanya hasil bagi bilangan bulat dari divisi dengan 0,6 ditunjukkan di bawah ini.
Pendekatan sebelumnya, 15 byte
Mengambil input sebagai dua kode ASCII dalam sintaks currying
(a)(b)
. Pengembalian0
untuk teman atau1
untuk musuh.Cobalah online!
Bagaimana?
Pendekatan awal, 23 byte
Mengambil input sebagai string 2 karakter. Pengembalian
true
untuk teman ataufalse
untuk musuh.Cobalah online!
sumber
a*b%290&8
akan bekerja dengan baik (memproduksi0
untuk teman atau8
untuk musuh).Jelly , 6 byte
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.
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
sumber
_
adalah Jelly. Apakah Anda menggunakan sesuatu yang lain?ạ
hanya sebagai nilai absolut, bukan perbedaan absolut.Python 2 , 19 byte
Cobalah online!
Fungsi anonim: pengembalian
1
untuk teman dan0
musuh.sumber
Befunge-98,
1312 byteCobalah online!
Cetakan
0
untuk teman dan1
musuhIni 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
sumber
IA%9%5%3¬
Sunting Coba Online!Jelly ,
87 bytePiggyback off dari jawaban Befunge Mistah Figgins yang luar biasa !
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
I
dan kemudian indeks ke daftar panjang 9[1,1,0,0,0,0,1,1,0]
, yang merupakan 390 dalam biner390B
,. Pengindeksan bersifat modular (sehingga pengindeksan melakukan mod 9 secara gratis) dan berbasis 1 (karenanya 1 di sebelah kiri).sumber
Metaprogramming template C ++, 85 byte
kurang golf:
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. ;)
sumber
template
.Ruby,
2219 byteInput: 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.sumber
->x,y{x*y%103%2}
Catat itu0
dan1
dibalik.x*y%51>9
lainnya. Saya pikir tidak adil jika upvotes mengubahnya begitu radikal sekarang.CJam , 8 byte
Blok tanpa nama yang mengharapkan dua kode karakter di atas tumpukan dan menggantinya dengan
0
(teman) atau1
(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):
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.
sumber
Röda ,
302221 byteBytes disimpan berkat @fergusq dengan menggunakan
_
untuk mengambil nilai pada streaming sebagai inputCobalah online!
Fungsi dijalankan seperti
push "WU" | f
setelah menetapkan nama ke fungsiPenjelasan
sumber
{[(_.._)in"WUBRGWGRBUW"]}
tetapi kemudian fungsi tersebut harus dipanggil seperti[a, b] | f
.05AB1E , 10 byte
Mengembalikan 0 untuk teman dan 1 untuk musuh.
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
C,
3332292422 byteMengembalikan 1 jika teman, 0 jika musuh.
sumber
Vim,
2221 byteInput: satu baris berisi dua karakter.
Output: kosongkan buffer jika teman, buffer mengandung
WUBRGWGRBUW
jika musuh.Penjelasan
sumber
C
daripadacw
Japt , 6 byte
Terinspirasi oleh solusi @Martin Ender .
Mengambil array dari dua kode char sebagai input.
Cobalah online! | Test Suite
Pengembalian
true
untuk teman,false
untuk musuh.Solusi 14-byte:
Mengambil dua kode karakter sebagai input
Cobalah online! | Test Suite
Penjelasan:
Solusi 12-byte:
Cobalah online! | Test Suite
Penjelasan:
Pengembalian
1
untuk teman dan0
untuk musuh.Solusi 9-byte :
Terinspirasi oleh solusi @ Arnauld .
Test Suite
Pengembalian
1
untuk teman,0
untuk musuh.Solusi 11-byte:
terinspirasi oleh solusi @Mistah Figgins .
Test Suite
sumber
Brain-Flak ,
155, 147, 135 byteCobalah online!
Ini adalah 134 byte kode ditambah satu byte penalti untuk
-a
flag 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:
Jelas, itu menghapus kode untuk pop mereka:,
{}{}
tetapi yang lebih penting:Ini memungkinkan kita untuk mengompresi
2, 11, 16, 19
urutan dariuntuk
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:
sumber
Jelly , 14 byte
Pengembalian
1
untuk musuh dan0
untuk teman.Test suite di Coba online!
Bagaimana?
sumber
05AB1E , 7 byte
Ini adalah port jawaban Jelly saya . Mengambil daftar titik kode sebagai input. Mencetak 1 untuk teman, 0 untuk musuh.
Cobalah online!
Bagaimana itu bekerja
sumber
CJam ,
16121110 byteGolf 4 byte dengan menggunakan algoritma Mistah Figgins
Disimpan 1 byte berkat Lynn
Output
1
untuk warna musuh,0
untuk warna sekutu.Cobalah online! (Atau verifikasi semua kasus uji )
Penjelasan
sumber
l:m9%5%3%!
byte lebih pendek.Retina , 18 byte
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):
sumber
Java (OpenJDK 8) ,
2823 byte-5 byte terima kasih kepada fergusq
Cobalah online!
sumber
"WUBRGWGRBUW"::contains
?Brachylog , 10 byte
Solusi mudah, tidak ada trik yang terlibat.
Cobalah online!
Penjelasan
sumber
Jelly , 6 byte
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.
Jika kita membagi bilangan bulat ini dengan 3 , kita mendapatkan quotients berikut.
1 , 4 , dan 7 dapat dipetakan ke 1 dengan mengambil hasil modulo 3 .
Sekarang kita hanya perlu melihat paritasnya.
Bagaimana itu bekerja
sumber
Cubix, 11 byte
Implementasi Cubix dari solusi Arnauld.
Pemakaian
Masukkan dua karakter, dan hasilnya
0
untuk teman dan1
musuh. Coba di sini.Penjelasan
Kode dapat diperluas seperti ini.
Karakter dieksekusi dalam urutan ini (tidak termasuk aliran kontrol):
sumber
Python 2 , 26 byte
Cobalah online!
sumber
AWK, 23 Bytes
Contoh penggunaan: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Ini akan mencetak
1
jika pasangan adalah teman,0
jika tidak. Saya ingin melakukan sesuatu yang pintar, tetapi semua yang saya pikirkan akan lebih lama.sumber
Jelly , 12 byte
Output
1
untuk sekutu,0
untuk musuh.Cobalah online!
Penjelasan
sumber
Ruby, 28 byte
Output benar untuk teman, salah untuk musuh:
Versi ungolfed tidak jauh berbeda:
sumber
05AB1E , 7 byte
Adaptasi mod-trick dari jawaban Jonathan's Jelly
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
GolfScript , 7 byte
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
4
untuk musuh daripada1
:Cobalah online!
sumber
Java 7, 38 byte
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 .
39 bytes: Pelabuhan dari @MartinEnder 's CJam jawaban
47 byte: Port dari jawaban @Steadybox 'C
52 byte: Port dari @Lynn 's Python 2 menjawab
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:
Penjelasan:
Semua musuh berada dalam kisaran 4-6 (inklusif) atau 0.
EDIT2: Hmm .. Saya hanya memperhatikan bahwa ini sangat mirip dengan jawaban @Steadybox '.. :(
sumber
PHP, 31 byte
Jalankan dengan
echo AB | php -nR '<code>
, di manaA
danB
dua warna.strtr
mengembalikan string dari posisi di mana input ditemukan;dengan
WBGURWRUGBW
tumpukan jerami ini mengembalikan string yang benar jika warnanya musuh; string kosong jika tidak.!
mengubah string yang sebenarnya menjadifalse
, menghasilkan output kosongdan string kosong menjadi
true
, menghasilkan output1
.sumber