Büyü: Toplama, Büyüleri Ödeme


9

Daha fazla MtG iyiliği için: Büyü: Yeteneklerle Buluşma Mücadelesi

Öncül:

Magic: the Gathering'de, gerekli miktarda topraklara dokunarak mana bedellerini ödeyerek büyü yapıyorsunuz. Bu topraklar beş renkten birini üretebilir:

  • Beyaz (W)
  • Mavi (U)
  • Siyah (B)
  • Kırmızı (R)
  • Yeşil (G)

Maliyet iki bölümden oluşur: genel mana gereksinimi olan bir sayı ve renkli mana gereksinimini temsil eden bir dizi sembol. Sayı genel mana maliyetidir ve tatmin etmek için herhangi bir mana rengini kullanabilir, örneğin (3)ödeme yapılabilir WGG. Semboller, belirli bir rengin 1: 1 gereksinimidir. örneğin WWUBR2 beyaz mana, 1 mavi, 1 siyah ve 1 kırmızı gerekir. Genel bölüm her zaman Renkli bölümden önce gelir. Bir hatırlatma olarak, (0)geçerli bir maliyettir ve ele alınması gerekir.

Tamamen jenerik, tamamen renkli veya her ikisine birden sahip olabilirsiniz. Örneğin, aşağıdaki kartın maliyeti 4BB'dir ve 4 renkli mana ve 2 siyah mana ile ödenir:

Örnek kart

Bu meydan okumadaki toprakların her biri bir mana üretecektir. Bununla birlikte, birden fazla renk üretebilen ancak yine de sadece 1 mana veren toprakları ele alacağız. Örneğin G, yeşil bir mana WGüretecek , 1 beyaz veya 1 yeşil üretebilir.

Giriş:

Size iki giriş verilecektir, bir kartın maliyeti ve bir arazi listesi.

Kartın maliyeti bir dize veya renkli kısım için bir sayı ve bir dize içeren bir demet olabilir. Genel bir parça yoksa, string / tuple öğesini 0 ile kaplayabilirsiniz.

Arazi listesi, her birinin belirli bir arazinin üretebileceği dizelerin bir listesi olacaktır. Bu liste boş olabilir (araziniz yok). Bunu bit maskesi mantığı kullanarak bir ints listesi olarak da alabilirsiniz, ancak düzeninizi gönderebilirsiniz. Sipariş de önemliyse size kalmış, aksi takdirde WUBRGsipariş kabul edilecektir .

#Example input formats
"4BB", ("WG","B","B") #
(4,"BB"), (7,3,3)     #Both should return falsy

Çıktı:

Bir truthydeğer başarıyla toprakları verilen maliyet ve bir ödeme yapabilirsiniz eğer falseydeğerini eğer bunu yapamazsınız.

Kurallar:

  • Geçerli giriş garantisi alacaksınız
  • Mana'nın her zaman "WUBRG" düzeninde olduğu varsayılır. Farklı bir sipariş istiyorsanız, cevabınızda belirtin.
  • Renkler her zaman maliyet olarak gruplandırılacaktır, örneğin "WWUBBRG"
  • Giriş, seçtiğiniz tüm Büyük harf veya küçük harf kullanır.
  • Normal ifade 127[WUBRG]{127}ve 254 ülkeyi idare edebilmelisiniz .
  • Standart boşluklar yasaktır
  • Bu , dil başına en kısa cevap kazanır

Örnekler:

"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

MTG meydan okuma sevindim. +1
Nikko Khresna

Ayrıca, maliyetin her zaman ilk pozisyonda genel mana gereksinimi (sayı) olacağını ve ardından renkli mana gereksinimleri (W / U / B / R / G)
olacağını belirtmek

@NikkoKhresna Bu açıklığa kavuşturuldu, teşekkürler.
Veskah


@Emigna'nın silah oğlu. Sanırım sadece mana havuzuna göre topraklarınızı ayrıştırmanız gerekiyor.
Veskah

Yanıtlar:


3

JavaScript (ES6), 91 bayt

Girişi şu şekilde alır (cost)(lands):

  • cÖstBGRUWsırayla, hatta genel bölümle birlikte gelen karakterlerin bir listesidir0
  • lbirnds dizelerin listesidir.
a=>g=([c,...r],n=0,s=e='')=>[...n+s].sort()+e==a|(c&&[e,e,...c].some((c,i)=>g(r,n+!i,s+c)))

Çevrimiçi deneyin!

Yorumlananlar

a =>                        // main function taking the array a[] describing the cost
  g = (                     // g = recursive function taking:
    [c, ...r],              //   c = next land string; r[] = remaining land strings
    n = 0,                  //   n = generic mana, initialized to 0
    s = e = ''              //   s = generated cost string, initialized to e = empty string
  ) =>                      //
    [...n + s].sort() + e   // prepend n to s, split, sort and force coercion to a string
    == a | (                // if this is matching a[], the test is successful
      c &&                  // if c is defined:
      [                     //   try the following recursive calls:
        e,                  //     - increment n and append nothing to s
        e,                  //     - do nothing
        ...c                //     - leave n unchanged and append a character to s
      ].some((c, i) =>      //   for each c at position i in the above array:
        g(r, n + !i, s + c) //     process the recursive call
      )                     //   end of some()
    )                       // end of the recursive part


2

Retina , 60 bayt

\d+
*
~["^("|'|]")*\n"1,L$`(?<=(^|.*¶)+).*
(?($#1)^|([_$&]))

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

\d+
*

Genel manayı tekli'ye dönüştürün. Bu tekrarlanan _s kullanır .

1,L`.*

Birinciden sonraki tüm satırları, yani arazi listesini eşleştirin. (Bu normalde girişin en sonunda tekrar eşleşir, ancak gözetleme bunu önler.)

(?<=(^|.*¶)+)

1 dizinli satır numarasını $#1.

$
(?($#1)^|([_$&]))

Her araziyi, o arazi veya genel maliyetlerle eşleşen maliyetleri ancak yalnızca bir kez yakalayan bir normal ifade ile değiştirin.

|'|

Elde edilen normal ifadelere |s ile katılın .

["^("]")*\n"

Normal ifadeyi içine sarın ^(ve )*\n( buraya eklemek gibi görünmüyor ).

~

Bu normal ifadenin geçerli değerdeki eşleşme sayısını sayın.

Örnek: 1BB¶WB¶WB¶WGOluşturulan normal ifade için:

^((?(2)^|([_WB]))|(?(3)^|([_WB]))|(?(4)^|([_WG])))*\n

hangi _BB¶WB¶WB¶WGgerektiği gibi eşleşir.


WUBRG, WUBRGdönmeli truemi?
Nikko Khresna

@NikkoKhresna Hayır, her arazi yalnızca bir kez kullanılabilir; ödeme yapabilmek için en az 5 ülkeye ihtiyacınız var WUBRG.
Neil

Oh bu 5 renk arazi anlamına gelir .. Tamam benim kötü
Nikko Khresna

1

Jöle , 21 bayt

Œpµ®œ-)Ạ
L<⁴Ṫ©L+Ḣ¤ȯçṆ

Çevrimiçi deneyin!

çıktılar

Giriş formatı bunu Jelly için gerçekten zorlaştıran şeydir. Çünkü ve diziyi değiştirmek için kullanmamız gerekir ©ve ®ek olarak. 3 ayrı girişle bu 18 bayt olur . (Her ne kadar eminim ki Jelly beyni biri tarafından gönderilmeyi bekleyen 14 ya da daha fazla bayt çözümü var.)


1

Pyth , 25 bayt

&glQ+hAElH}k.-LHusM*GHQ]k

Çevrimiçi deneyin!

Pyth'in Jelly's gibi bir "Cartesian dizi ürünü" işlevi Œpolsaydı, bu benim Jelly çözümümü kolayca yenebilirdi. Şu anda bu tarafından yapılır usM*GHQ]k.


1

Perl 6 , 56 46 bayt

{(1 x*~*).comb.Bagany [X] $(1 X~$_)>>.comb}

Çevrimiçi deneyin!

Körili fonksiyon. Girdiyi (@lands)($generic_cost, $colored_costs)genel maliyet için açık bir 0 ile alır. Temel fikir, 1genel manayı temsil eden yeni bir sembol tanıtmak ve topraklardan gerekli manayı elde etmenin mümkün olup olmadığını kontrol etmek için Perl 6 Torbalarını (multisets) kullanmaktır.

açıklama

{ ... }  # Anonymous block returning WhateverCode
  # Preprocess cost
  1 x*    # '1' for generic mana repeated times generic cost
      ~*  # Concat with colored costs
 (      ).comb  # Split into characters
              .Bag  # Convert to a Bag (multiset)
                             # Preprocess lands
                             1 X~$_   # Prepend '1' to each land
                           $(      )  # Itemize to make 1-element lists work
                                    >>.comb  # Split each into chars
                       [X]  # Cartesian product, yields all possible ways
                            # to select colors from lands
                  # Finally check if the cost Bag is a subset of any possible
                  # color selection (which are implicitly converted to Bags)
                  any

1

Haskell , 94 bayt

x#[]=[]
x#(s:t)|x`elem`s=t|0<1=s:x#t
(e,[])?s=length s>=e
(e,x:y)?s|x#s==s=0>1|0<1=(e,y)?(x#s)

Çevrimiçi deneyin!

Tüm renklerin maliyet ve arazi listesinde aynı sırayla verileceğine güveniyoruz. Önce gerekli renkli manayı veren topraklara dokunuyoruz ve bundan sonra renksiz maliyeti ödemek için hala yeterli topraklarımıza sahip olduğumuzu kontrol ediyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.