마술 : 채집, 주문을 지불


9

더 많은 MtG 굿 니스 : 매직 : 능력을 가진 채집 전투

전제:

Magic : The Gathering에서는 필요한 양만큼 땅을 두드려 마나 비용을 지불하여 주문을 시전합니다. 이 토지는 다음 다섯 가지 색상 중 하나를 생성 할 수 있습니다.

  • 화이트 (W)
  • 블루 (U)
  • 블랙 (B)
  • 레드 (R)
  • 그린 (G)

비용은 두 가지 부분으로 구성됩니다 : 일반적인 마나 요구 사항 인 숫자와 채색 된 마나 요구 사항을 나타내는 일련의 기호. 숫자는 일반적인 마나 비용이며 마나의 색상을 사용하여 만족시킬 (3)수 있습니다 ( 예 : 으로 지불) WGG. 기호는 특정 색상의 1 : 1 요구 사항입니다. 예를 들어 WWUBR흰색 마나 2 개, 파란색 1 개, 검은 색 1 개, 빨간색 1 개가 필요합니다. 일반 부분은 항상 컬러 부분 앞에옵니다. 알림 (0)은 유효한 비용이며 처리해야합니다.

비용은 전적으로 일반적이거나 전체적으로 색이 있거나 둘 다일 수 있습니다. 예를 들어, 다음 카드의 비용은 4BB이며 색깔이있는 마나 4 개와 검은 마나 2 개로 지불됩니다.

예시 카드

이 도전의 땅은 각각 하나의 마나를 생성합니다. 그러나 우리는 여러 색상을 생산할 수 있지만 여전히 1 마나 만 산출하는 땅을 고려할 것입니다. 예를 들어 G녹색 마나 WG를 생성하고 1 흰색 또는 1 녹색을 생성 할 수 있습니다.

입력:

카드 비용과 토지 목록이라는 두 가지 입력이 제공됩니다.

카드 비용은 문자열이거나 색칠 된 부분의 숫자와 문자열을 포함하는 튜플 일 수 있습니다. 일반적인 부분이 없으면 문자열 / 튜플을 0으로 채울 수 있습니다.

토지 목록은 주어진 토지가 생산할 수있는 문자열 목록입니다. 이 목록은 비어있을 수 있습니다 (땅이 없음). 비트 마스크 논리를 사용하여 이것을 int의 목록으로 가져갈 수도 있지만 스키마를 게시 할 수도 있습니다. 주문은 중요한 경우에도 귀하에게 달려 있으며, 그렇지 않으면 WUBRG순서대로 가정됩니다 .

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

산출:

truthy값이 성공적으로 땅 주어진 비용과 지불 할 수있는 경우 falsey값을 경우 당신은 할 수 없습니다.

규칙 :

  • 유효한 입력이 보장됩니다
  • 마나는 항상 "WUBRG"순서 인 것으로 가정합니다. 다른 주문을 원하면 답변에 명시하십시오.
  • 색상은 항상 비용으로 그룹화됩니다 (예 : "WWUBBRG")
  • 입력은 모두 대문자 또는 모두 소문자를 사용합니다.
  • 정규식 127[WUBRG]{127}과 254 개의 토지 를 처리 할 수 ​​있어야합니다 .
  • 금지 된 표준 허점
  • 이것은 언어 당 가장 짧은 답변

예 :

"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 도전이 기쁘다. +1
Nikko Khresna

또한 비용은 항상 첫 번째 위치에 일반 마나 요구 사항 (숫자)이 있고 그 다음에 유색 마나 요구 사항 (W / U / B / R / G)이 있음을 언급하는 것이 가장 좋습니다
Nikko Khresna

@NikkoKhresna 감사합니다.
Veskah


총의 아들 에미 냐. 나는 단지 마나 풀을받는 것에 비해 땅을 파싱해야한다는 점에서 다르다는 것을 생각합니다.
Veskah

답변:


3

자바 스크립트 (ES6), 91 바이트

다음과 같이 입력을받습니다 (cost)(lands).

  • 영형에스BGRUW순서대로 문자 목록 으로, 일반 부분이 접두사로되어 있어도0
  • 에스 문자열 목록입니다.
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)))

온라인으로 사용해보십시오!

댓글

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

레티 나 , 60 바이트

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

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다. 설명:

\d+
*

일반 마나를 단항으로 변환합니다. 반복되는 _s를 사용합니다 .

1,L`.*

첫 번째 이후의 모든 줄, 즉 토지 목록을 일치시킵니다. (이것은 일반적으로 입력의 맨 끝에서 다시 일치하지만, 룩백은이를 방지합니다.)

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

에서 1 색인 행 번호를 캡처하십시오 $#1.

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

각 토지를 해당 토지 또는 일반 비용과 일치하는 비용을 한 번만 캡처하는 정규식으로 교체하십시오.

|'|

결과 정규 표현식을 |s로 결합하십시오 .

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

에서 정규식 랩 ^()*\n(내가 삽입 할 수없는 것 여기).

~

현재 값에서 해당 정규 표현식의 일치 횟수를 계산합니다.

예 : 1BB¶WB¶WB¶WG생성 된 정규식 의 경우 :

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

이는 _BB¶WB¶WB¶WG필요에 따라 일치합니다.


WUBRG, WUBRG반환해야 true합니까?
Nikko Khresna

@NikkoKhresna 아니요, 각 토지는 한 번만 사용할 수 있습니다. 당신은 지불 할 수있는 적어도 5 토지가 필요합니다 WUBRG.
Neil

오 그것은 5 개의 색 땅을 말한다.. 좋아 나의 나쁜
Nikko Khresna

1

젤리 , 21 바이트

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

온라인으로 사용해보십시오!

출력

입력 형식은 Jelly에게 실제로 어려운 부분입니다. 때문에 배열을 수정, 우리는 사용에 필요 ©하고 ®추가. 3 개의 개별 입력을 사용하면 18 바이트가 됩니다. (젤리 마스터 마인드 중 하나에 의해 게시되기를 기다리는 14 바이트 정도의 솔루션이 있다고 확신합니다.)


1

Pyth , 25 바이트

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

온라인으로 사용해보십시오!

만약 Pyth가 Jelly 's와 같은 "Cartesian product of array"기능을 가지고 있다면 Œp이것은 내 젤리 솔루션을 쉽게 이길 것입니다. 현재는에 의해 수행됩니다 usM*GHQ]k.


1

펄 6 , 56 46 바이트

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

온라인으로 사용해보십시오!

카레 기능. (@lands)($generic_cost, $colored_costs)일반 비용으로 명시 적 0과 같이 입력을 받습니다. 기본 아이디어는 1일반 마나를 나타내는 새로운 심볼을 소개하고 Perl 6 Bags (멀티 세트)를 사용하여 토지에서 필요한 마나를 얻을 수 있는지 확인하는 것입니다.

설명

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

하스켈 , 94 바이트

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)

온라인으로 사용해보십시오!

우리는 모든 색상이 비용과 토지 목록에서 동일한 순서로 제공된다는 사실에 의존합니다. 먼저 우리는 필요한 색깔의 마나를주는 땅을 두드린 후에도 여전히 무색의 비용을 지불 할만큼 충분한 땅이 있는지 확인합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.