Untuk kebaikan MtG lainnya: Sihir: The Gathering Combat with Abilities
Tempat:
Di Magic: the Gathering, Anda menggunakan mantra dengan membayar biaya mana dengan mengetuk tanah untuk jumlah yang diperlukan. Tanah ini dapat menghasilkan salah satu dari lima warna yaitu:
- Putih (w)
- Biru (u)
- Hitam (B)
- Merah (r)
- Hijau (g)
Biaya terdiri dari dua bagian: angka yang merupakan persyaratan mana generik, dan serangkaian simbol yang mewakili persyaratan mana berwarna. Angka tersebut adalah biaya mana generik dan dapat menggunakan warna mana saja untuk memenuhinya, misalnya (3)
dapat dibayar dengan WGG
. Simbol adalah persyaratan 1: 1 untuk warna tertentu. misalnya WWUBR
akan membutuhkan 2 mana putih, 1 biru, 1 hitam dan 1 merah. Bagian Generik akan selalu datang sebelum bagian Berwarna. Sebagai pengingat, (0)
adalah biaya yang valid dan harus ditangani.
Anda dapat memiliki biaya yang sepenuhnya generik, atau sepenuhnya berwarna, atau keduanya. Sebagai contoh, kartu berikut memiliki biaya 4BB dan dibayar dengan 4 mana pun berwarna dan 2 mana hitam:
Tanah di tantangan ini masing-masing akan menghasilkan satu mana. Namun, kami akan mempertimbangkan lahan yang dapat menghasilkan banyak warna tetapi masih hanya menghasilkan 1 mana. Misal G
akan menghasilkan mana hijau, WG
bisa menghasilkan 1 putih atau 1 hijau.
Memasukkan:
Anda akan diberikan dua input, biaya kartu dan daftar tanah.
Biaya kartu dapat berupa string, atau tuple yang berisi angka dan string untuk bagian berwarna. Jika tidak ada bagian generik, Anda dapat mengisi string / tuple dengan 0.
Daftar tanah akan menjadi daftar string di mana masing-masing adalah apa yang dapat dihasilkan oleh tanah tertentu. Daftar ini dapat kosong (Anda tidak memiliki tanah). Anda juga dapat menganggap ini sebagai daftar int menggunakan bit-mask logic tetapi memposting skema Anda jika Anda melakukannya. Pesanan juga terserah Anda jika itu penting, jika tidak maka akan dianggap sesuai WUBRG
pesanan.
#Example input formats
"4BB", ("WG","B","B") #
(4,"BB"), (7,3,3) #Both should return falsy
Keluaran:
Sebuah truthy
nilai jika Anda berhasil dapat membayar biaya diberikan tanah Anda dan falsey
nilai jika Anda tidak bisa.
Aturan:
- Anda akan dijamin input yang valid
- Mana akan dianggap selalu dalam urutan "WUBRG". Jika Anda menginginkan urutan yang berbeda, nyatakan demikian dalam jawaban Anda.
- Warna akan selalu dikelompokkan dalam biaya, mis. "WWUBBRG"
- Input akan menggunakan semua huruf besar atau semua huruf kecil, pilihan Anda.
- Anda harus dapat menangani regex
127[WUBRG]{127}
dan 254 tanah. - Celah standar dilarang
- Ini adalah kode-golf , jawaban terpendek per menang bahasa
Contoh:
"0", ("") => 1
"1BB", ("WG","B","B") => 1
"BB", ("WG","B","B") => 1
"WB", ("WG","B","B") => 1
"1UB", ("W","U","B") => 1
"1BB", ("WB","WB","WG") => 1
"1", ("WG","B","B") => 1
"1BB", ("WGR","WB","WB") => 1
"WUBRG", ("W","U","B","R","G") => 1
"1WWUBB", ("W","WG","U","B","B","R") => 1
"10BB", ("WGR","WB","WB","B","B","B","B","B","B","B","B","B") => 1
"R", ("") => 0
"4", ("WG","B","B") => 0
"1BB", ("WG","WB") => 0
"1UB", ("WG","W","UB") => 0
"1UBR", ("W","WG","UBR") => 0
"WUBRG", ("WUBRG") => 0
"1WWUBB", ("W","WG","U","B","B") => 0
"10UU", ("WGR","WB","WB","B","B","B","B","B","B","B","B","B") => 0
sumber
Jawaban:
JavaScript (ES6), 91 byte
Mengambil input sebagai
(cost)(lands)
:BGRUW
Cobalah online!
Berkomentar
sumber
Python 2 ,
131129 byteCobalah online!
sumber
Retina , 60 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Ubah mana generik menjadi unary. Ini menggunakan
_
s berulang .Cocokkan semua baris setelah yang pertama, yaitu daftar tanah. (Ini biasanya akan cocok lagi di akhir input, tetapi tampilan di belakang mencegah hal itu.)
Tangkap nomor baris 1-diindeks di
$#1
.Ganti setiap tanah dengan regex yang menangkap biaya yang cocok dengan tanah itu atau biaya generik, tetapi hanya sekali.
Bergabunglah dengan regex yang dihasilkan dengan
|
s.Bungkus regex
^(
dan)*\n
(sepertinya saya tidak bisa memasukkan di¶
sini).Hitung jumlah kecocokan dari regex itu pada nilai saat ini.
Contoh: Untuk kasus
1BB¶WB¶WB¶WG
regex yang dihasilkan adalah:yang
_BB¶WB¶WB¶WG
cocok seperti yang dipersyaratkan.sumber
WUBRG, WUBRG
harus kembalitrue
?WUBRG
.Jelly , 21 byte
Cobalah online!
Keluaran
Format input inilah yang benar-benar membuat ini sulit untuk Jelly. Karena
Ṫ
danḢ
memodifikasi array, kita perlu menggunakan©
dan®
sebagai tambahan. Dengan 3 input terpisah ini akan menjadi 18 byte . (Meskipun saya yakin ada 14 atau lebih solusi byte menunggu untuk diposting oleh salah satu dalang Jelly.)sumber
Pyth , 25 byte
Cobalah online!
Jika Pyth memiliki "Cartesian product of array" berfungsi seperti Jelly
Œp
, ini akan dengan mudah mengalahkan solusi Jelly saya. Saat ini yang dilakukan olehusM*GHQ]k
.sumber
Perl 6 ,
5646 byteCobalah online!
Fungsi kari. Mengambil input seperti
(@lands)($generic_cost, $colored_costs)
dengan 0 eksplisit untuk biaya generik. Ide dasarnya adalah untuk memperkenalkan simbol baru yang1
mewakili mana generik dan menggunakan Perl 6 Bags (multiset) untuk memeriksa apakah mungkin untuk mendapatkan mana yang diperlukan dari tanah.Penjelasan
sumber
Haskell , 94 byte
Cobalah online!
Kami mengandalkan kenyataan bahwa semua warna akan diberikan dalam urutan yang sama dalam biaya dan dalam daftar tanah. Pertama-tama kita mengetuk tanah untuk memberikan mana berwarna yang diperlukan dan setelah itu hanya memeriksa bahwa kita masih memiliki cukup tanah untuk membayar biaya tidak berwarna.
sumber