Magic: The Gathering, Spelling


9

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MtG-goodness: Magic: The Gathering Combat with Abilities

สถานที่ตั้ง:

ในเวทย์มนตร์: การรวบรวมคุณร่ายคาถาโดยการจ่ายมานาของพวกเขาโดยการแตะที่ที่ดินตามจำนวนที่ต้องการ ดินแดนเหล่านี้สามารถสร้างหนึ่งในห้าสีที่:

  • สีขาว (W)
  • สีน้ำเงิน (U)
  • ดำ (B)
  • แดง (R)
  • เขียว (G)

ราคาประกอบด้วยสองส่วนคือตัวเลขซึ่งเป็นข้อกำหนดของมานาทั่วไปและชุดของสัญลักษณ์ที่แสดงถึงความต้องการมานาที่มีสี จำนวนเป็นค่าใช้จ่ายมานะทั่วไปและสามารถใช้สีของมานะใด ๆ เพื่อตอบสนองความมันเช่นสามารถชำระเงินด้วย(3) WGGสัญลักษณ์มีความต้องการสีเฉพาะ 1: 1 เช่นWWUBRจะต้องมีมานาขาว 2 ตัว, 1 สีน้ำเงิน, 1 ดำและ 1 แดง ส่วนทั่วไปจะมาก่อนส่วนที่มีสี เพื่อเป็นการเตือนความจำ(0)คือค่าใช้จ่ายที่ถูกต้องและต้องจัดการ

คุณสามารถมีค่าใช้จ่ายที่เป็นค่าทั่วไปหรือสีทั้งหมดหรือทั้งสองอย่าง ตัวอย่างเช่นการ์ดต่อไปนี้มีราคา 4BB และจ่ายด้วย 4 ของมานาที่มีสีอะไรและมานาดำ 2 อัน:

บัตรตัวอย่าง

ดินแดนในการท้าทายนี้จะสร้างมานาหนึ่งอัน อย่างไรก็ตามเราจะพิจารณาดินแดนที่สามารถผลิตได้หลายสี แต่ยังคงให้ 1 มานาเท่านั้น เช่นGจะผลิตมานาสีเขียวWGสามารถผลิตได้ 1 สีขาวหรือ 1 สีเขียว

การป้อนข้อมูล:

คุณจะได้รับสองอินพุตต้นทุนของการ์ดและรายการที่ดิน

ค่าใช้จ่ายของการ์ดอาจเป็นสตริงหรือทูเปิลที่มีตัวเลขและสตริงสำหรับส่วนที่มีสี หากไม่มีชิ้นส่วนทั่วไปคุณสามารถวางสตริง / tuple ด้วย 0

รายการที่ดินจะเป็นรายการของสตริงที่แต่ละคนเป็นสิ่งที่ที่ดินที่กำหนดสามารถผลิตได้ รายการนี้สามารถว่างเปล่า (คุณไม่มีดินแดน) คุณสามารถใช้นี่เป็นรายการของ int โดยใช้ตรรกะบิตมาสก์ แต่โพสต์ชุดรูปแบบของคุณถ้าคุณทำ การสั่งซื้อนั้นขึ้นอยู่กับคุณด้วยหากมีความสำคัญมิฉะนั้นจะถือว่าเป็นไปWUBRGตามลำดับ

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

เอาท์พุท:

truthyค่าถ้าคุณประสบความสำเร็จสามารถจ่ายค่าใช้จ่ายที่ได้รับที่ดินของคุณและfalseyคุ้มค่าถ้าคุณไม่สามารถ

กฎ:

  • คุณจะได้รับการรับรองการป้อนข้อมูลที่ถูกต้อง
  • มานะจะถือว่าเป็นคำสั่ง "WUBRG" เสมอ หากคุณต้องการคำสั่งซื้ออื่นให้ระบุไว้ในคำตอบของคุณ
  • สีจะถูกจัดกลุ่มในค่าใช้จ่ายเสมอเช่น "WWUBBRG"
  • อินพุตจะใช้ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทั้งหมดตามที่คุณต้องการ
  • คุณควรจัดการ regex 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


@Emigna ลูกชายของปืน ฉันคิดว่ามันแตกต่างกันในแง่ที่ว่าคุณจำเป็นต้องแยกวิเคราะห์ดินแดนของคุณเทียบกับการได้รับมานาพูล
Veskah

คำตอบ:


3

JavaScript (ES6), 91 ไบต์

ใช้อินพุตเป็น(cost)(lands):

  • costเป็นรายการของตัวอักษรBGRUWตามลำดับนำหน้าด้วยส่วนทั่วไปแม้ว่าจะเป็น0
  • lands เป็นรายการของสตริง
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+
*

แปลงมานะทั่วไปเป็น unary ใช้ซ้ำ_s

1,L`.*

จับคู่ทุกบรรทัดหลังจากรายการแรกนั่นคือรายการที่ดิน (โดยปกติจะจับคู่อีกครั้งที่ส่วนท้ายสุดของอินพุต แต่ lookbehind จะป้องกันสิ่งนั้น)

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

จับหมายเลขบรรทัดที่ 1 $#1จัดทำดัชนีใน

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

แทนที่แต่ละพื้นที่ด้วย regex ที่จับภาพต้นทุนที่ตรงกับที่ดินหรือต้นทุนทั่วไป แต่เพียงครั้งเดียว

|'|

เข้าร่วม regexes ผลลัพธ์ด้วย|s

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

ล้อม regex ไว้^(และ)*\n(ฉันไม่สามารถแทรก a ตรงนี้ได้)

~

นับจำนวนการแข่งขันของ regex นั้นกับค่าปัจจุบัน

ตัวอย่าง: สำหรับกรณีของ1BB¶WB¶WB¶WGregex ที่สร้างขึ้นคือ:

^((?(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+Ḣ¤ȯçṆ

ลองออนไลน์!

เอาท์พุท

รูปแบบอินพุตเป็นสิ่งที่ทำให้ยากสำหรับเยลลี่ เพราะและปรับเปลี่ยนอาร์เรย์เราจำเป็นต้องใช้©และ®นอกเหนือจาก มี 3 ปัจจัยการผลิตที่แยกจากกันนี้จะเป็น18 ไบต์ (ถึงแม้ว่าฉันแน่ใจว่ามีวิธีแก้ปัญหา 14 ไบต์หรือมากกว่านั้นที่รอการโพสต์โดยหนึ่งใน Mastermind ของ Jelly)


1

Pyth , 25 ไบต์

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

ลองออนไลน์!

ถ้า Pyth มีฟังก์ชั่น "ผลิตภัณฑ์คาร์ทีเซียนของอาร์เรย์" เช่นเดียวกับเยลลี่Œpสิ่งนี้จะเอาชนะโซลูชันเยลลี่ของฉันได้อย่างง่ายดาย usM*GHQ]kขณะที่จะกระทำโดย


1

Perl 6 , 56 46 ไบต์

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

ลองออนไลน์!

ฟังก์ชั่น curried นำเข้าเช่นเดียว(@lands)($generic_cost, $colored_costs)กับ 0 ชัดเจนสำหรับค่าใช้จ่ายทั่วไป แนวคิดพื้นฐานคือการแนะนำสัญลักษณ์ใหม่ที่1แสดงถึงมานาทั่วไปและใช้ Perl 6 Bags (Multisets) เพื่อตรวจสอบว่าเป็นไปได้ที่จะได้รับมานาที่ต้องการจากดินแดนหรือไม่

คำอธิบาย

{ ... }  # 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 ไบต์

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.