Magic: The Gathering, Paying for Spells


9

Để biết thêm về lòng tốt của MtG: Magic: Cuộc chiến tập hợp với khả năng

Tiền đề:

Trong Magic: the Gathering, bạn sử dụng phép thuật bằng cách trả chi phí mana của họ bằng cách khai thác các vùng đất với số lượng cần thiết. Những vùng đất này có thể tạo ra một trong năm màu đó là:

  • Trắng (W)
  • Màu xanh (U)
  • Đen (B)
  • Đỏ (R)
  • Màu xanh lá cây (G)

Chi phí được tạo thành từ hai phần: một số là yêu cầu mana chung và một loạt các biểu tượng đại diện cho yêu cầu mana màu. Con số là chi phí mana chung và có thể sử dụng bất kỳ màu nào của mana để đáp ứng nó, ví dụ (3)có thể được trả bằng WGG. Các biểu tượng là một yêu cầu 1: 1 của một màu cụ thể. ví dụ: WWUBRsẽ cần 2 mana trắng, 1 xanh, 1 đen và 1 đỏ. Phần Chung sẽ luôn đến trước phần Màu. Xin nhắc lại, (0)là một chi phí hợp lệ và phải được xử lý.

Bạn có thể có chi phí hoàn toàn chung chung, hoặc hoàn toàn màu, hoặc cả hai. Ví dụ: thẻ sau có chi phí 4BB và được trả bằng 4 mana màu bất kỳ và 2 mana đen:

Thẻ ví dụ

Vùng đất trong thử thách này sẽ tạo ra một mana. Tuy nhiên, chúng tôi sẽ xem xét các vùng đất có thể tạo ra nhiều màu sắc nhưng vẫn chỉ mang lại 1 mana. Ví dụ: Gsẽ tạo ra một mana màu xanh lá cây, WGcó thể tạo ra 1 màu trắng hoặc 1 màu xanh lá cây.

Đầu vào:

Bạn sẽ được cung cấp hai đầu vào, chi phí thẻ và danh sách các vùng đất.

Chi phí của thẻ có thể là một chuỗi hoặc một tuple chứa một số và một chuỗi cho phần được tô màu. Nếu không có phần chung, bạn có thể đệm chuỗi / tuple bằng 0.

Danh sách đất đai sẽ là một danh sách các chuỗi trong đó mỗi chuỗi là những gì một vùng đất nhất định có thể tạo ra. Danh sách này có thể trống (bạn không có đất). Bạn cũng có thể coi đây là danh sách các int sử dụng logic mặt nạ bit nhưng đăng sơ đồ của bạn nếu bạn làm như vậy. Thứ tự cũng tùy thuộc vào bạn nếu nó quan trọng, nếu không nó sẽ được giả định theo WUBRGthứ tự.

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

Đầu ra:

Một truthygiá trị nếu bạn có thể trả thành công chi phí cho vùng đất của bạn và một falseygiá trị nếu bạn không thể.

Quy tắc:

  • Bạn sẽ được đảm bảo đầu vào hợp lệ
  • Mana sẽ được coi là luôn theo thứ tự "WUBRG". Nếu bạn muốn một thứ tự khác, hãy nêu trong câu trả lời của bạn.
  • Màu sắc sẽ luôn được nhóm trong chi phí, ví dụ: "WWUBBRG"
  • Đầu vào sẽ sử dụng tất cả chữ hoa hoặc chữ thường, tùy bạn chọn.
  • Bạn sẽ có thể xử lý regex 127[WUBRG]{127}và 254 vùng đất.
  • Sơ hở tiêu chuẩn bị cấm
  • Đây là , câu trả lời ngắn nhất cho mỗi ngôn ngữ sẽ thắng

Ví dụ:

"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

Tôi vui vì có thách thức mtg. +1
Nikko Khresna

Ngoài ra, tốt nhất để đề cập rằng chi phí sẽ luôn có yêu cầu mana chung (số) ở vị trí đầu tiên, sau đó là các yêu cầu mana màu (W / U / B / R / G)
Nikko Khresna

@NikkoKhresna Điều đó đã được làm rõ, cảm ơn.
Veskah


@Emigna con trai của một khẩu súng. Tôi đoán nó khác nhau theo nghĩa là bạn cần phân tích vùng đất của mình so với việc chỉ được cung cấp hồ mana.
Veskah

Câu trả lời:


3

JavaScript (ES6), 91 byte

Đưa đầu vào là (cost)(lands):

  • coStBGRUW0
  • tôimộtndS
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)))

Hãy thử trực tuyến!

Đã bình luận

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

Võng mạc , 60 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

\d+
*

Chuyển đổi mana chung thành unary. Điều này sử dụng lặp đi lặp lại _s.

1,L`.*

Phù hợp với tất cả các dòng sau đầu tiên, tức là danh sách các vùng đất. (Điều này thường sẽ khớp lại ở cuối đầu vào, nhưng giao diện ngăn chặn điều đó.)

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

Nắm bắt số dòng 1 chỉ mục trong $#1.

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

Thay thế mỗi vùng đất bằng một biểu thức ghi lại các chi phí khớp với đất đó hoặc chi phí chung, nhưng chỉ một lần.

|'|

Tham gia regexes kết quả với |s.

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

Gói regex vào ^()*\n(tôi dường như không thể chèn vào đây).

~

Đếm số lượng trận đấu của regex đó trên giá trị hiện tại.

Ví dụ: Đối với trường hợp của 1BB¶WB¶WB¶WGregex được tạo là:

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

_BB¶WB¶WB¶WGphù hợp theo yêu cầu.


WUBRG, WUBRGCó nên trở về true?
Nikko Khresna

@NikkoKhresna Không, mỗi vùng đất chỉ được sử dụng một lần; bạn cần ít nhất 5 vùng đất để có thể trả tiền WUBRG.
Neil

Ồ, điều đó đề cập đến vùng đất 5 màu..khi xấu của tôi
Nikko Khresna

1

Thạch , 21 byte

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

Hãy thử trực tuyến!

Đầu ra

Các định dạng đầu vào là những gì thực sự làm cho điều này khó khăn cho Jelly. Bởi vì sửa đổi mảng, chúng ta cần sử dụng ©®ngoài ra. Với 3 đầu vào riêng biệt, đây sẽ là 18 byte . (Mặc dù tôi chắc chắn rằng có một giải pháp byte 14 hoặc hơn đang chờ để được đăng bởi một trong những chủ mưu của Jelly.)


1

Bình thường , 25 byte

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

Hãy thử trực tuyến!

Nếu Pyth có chức năng "sản phẩm Cartesian của mảng" như Jelly Œp, thì điều này sẽ dễ dàng đánh bại giải pháp Jelly của tôi. Hiện tại điều đó được thực hiện bởi usM*GHQ]k.


1

Perl 6 , 56 46 byte

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

Hãy thử trực tuyến!

Chức năng cuộn tròn. Có đầu vào như (@lands)($generic_cost, $colored_costs)với 0 rõ ràng cho chi phí chung. Ý tưởng cơ bản là giới thiệu một biểu tượng mới 1đại diện cho mana chung và sử dụng Túi Perl 6 (multisets) để kiểm tra xem có thể lấy mana cần thiết từ các vùng đất hay không.

Giải trình

{ ... }  # 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 byte

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)

Hãy thử trực tuyến!

Chúng tôi dựa vào thực tế là tất cả các màu sẽ được đưa ra theo cùng một thứ tự trong chi phí và trong danh sách đất đai. Đầu tiên chúng tôi khai thác các vùng đất cung cấp mana màu cần thiết và sau đó chỉ cần kiểm tra rằng chúng tôi vẫn có đủ đất để trả chi phí không màu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.