Dalam Magic: the Gathering, para penyihir (dikenal sebagai "planeswalkers") saling bertarung dengan melemparkan mantra. Mantra mana biaya. Ada lima warna mana: Putih, Biru, Hitam, Merah, dan Hijau, masing-masing direpresentasikan sebagai {W}, {U}, {B}, {R}, dan {G}.
Biaya mantra sedikit lebih kompleks. Biaya dapat berupa kombinasi dari yang berikut:
- Satu atau lebih warna
- Satu atau lebih tidak berwarna, direpresentasikan sebagai {X}, di mana X adalah bilangan bulat positif
- Satu atau lebih hibrida, diwakili sebagai {Y / Z}, di mana Y dan Z adalah warna (diwakili oleh salah satu dari lima huruf) atau tidak berwarna, diwakili oleh bilangan bulat positif
Aturan berikut ini berlaku ketika mencoba membaca mantra:
- Warna dalam biaya harus dipenuhi oleh satu mana dari warna itu
- Biaya tak berwarna {X} dapat dipenuhi oleh X mana warna apa pun
- Biaya hibrida {Y / Z} dapat dipenuhi dengan memenuhi Y atau Z
- Perhatikan bahwa kawat gigi tidak bersarang
- Y dan Z bukan hibrida
Tulis sebuah program atau fungsi yang, mengingat kumpulan mana dan biaya, mencetak atau mengembalikan true (atau nilai kebenaran) jika dan hanya jika mana dalam kumpulan itu dapat memenuhi biaya, yang lain salah (atau nilai falsy).
Pool mana adalah string yang tidak kosong dari format:
Color1,Color2,Color3,...,Colorn-1,Colorn
Biaya adalah string format yang tidak kosong:
Cost1,Cost2,Cost3,...,Costn-1,Costn
Contohnya
Dalam format Pool Cost -> ExpectedOutput
(dengan spasi antara Pool dan Biaya):
{R},{R},{G},{B},{R} {4},{R} -> True
{G},{G},{G},{G},{W},{W},{W} {2/W},{2/U},{2/B},{2/R},{2/G} -> False
{G},{G},{R} {R/G},{G/B},{B/R} -> True
{R},{R},{R},{G} {1},{G},{2/G}-> True
{R} {R},{R},{R},{R},{R} -> False
{W},{R},{R} {2/W},{W/B} -> True
{U},{U} {1} -> True
{W},{R},{G} {1},{2} -> True
sumber
Jawaban:
Pyth,
55535250 byteCobalah secara online: Demonstrasi atau Uji harness
Perhatikan bahwa kompleksitas waktu dan memori benar-benar buruk. Jadi contoh kedua tidak berhasil. Saya mengalokasikan sekitar 1,6 GB Ram sebelum crash di komputer saya.
Penjelasan
Penjelasannya adalah untuk solusi 53. Satu-satunya perbedaan adalah, bahwa penguraian awal terjadi di tengah dan bukan di awal.
Jadi, inilah uraian awal.
Jadi input
"{W},{R},{R} {2/W},{W/B}"
akan dikonversi menjadi['w,r,r', '2/w,w/b']
.Jadi apa fungsinya? Input biaya
'2/w,w/b'
dikonversi menjadi:Setiap string dalam
['aa', 'ab', 'ac', ..., 'zx', 'zy', 'zz', 'w']
memuaskan{2/W}
dan setiap karakter dalam'wb'
memuaskan{w/b}
.Sekarang kita menghasilkan produk Cartesian dari daftar ini (atau string) dan lihat, apakah ada kombinasi yang dapat dihasilkan dengan pool-mana.
sumber
True
danFalse
.K
. Letakkan diKc-rz0"{}")
manaK
pertama kali digunakan, dan hapus penugasan awalK
.Python 2.7, 412 karakter
Fungsi
f
adalah fungsi yang melakukan pemeriksaan. Dibutuhkan pool dan biaya mana sebagai argumen string, dan dicetak1
ketika mana memenuhi biaya dan0
sebaliknya. Misalnya,f('{R},{R},{G},{B},{R}', '{4},{R}')
cetak1
.Tidak disatukan, pada dasarnya terlihat seperti ini
sumber