আপনি বানান নিক্ষেপ করতে পারেন?


22

ম্যাজিক ইন: দ্য গার্ডিং, ম্যাজিং ("প্লেনওয়াকারস" নামে পরিচিত) মন্ত্র ছুঁড়ে ফেলে একে অপরের সাথে লড়াই করে। মণি খরচ মন। মানার পাঁচটি রঙ বিদ্যমান: সাদা, নীল, কালো, লাল এবং সবুজ, যথাক্রমে {W}, {U}, {B}, {R}, এবং {G as হিসাবে উপস্থাপিত।

একটি বানানের খরচ কিছুটা জটিল। খরচ নিম্নলিখিত যে কোনও সংমিশ্রণ হতে পারে:

  • এক বা একাধিক রঙ
  • এক বা একাধিক বর্ণহীন, {X as হিসাবে উপস্থাপিত, যেখানে এক্সটি ধনাত্মক পূর্ণসংখ্যা
  • এক বা একাধিক সংকর, {Y / Z as হিসাবে উপস্থাপিত, যেখানে Y এবং Z হল বর্ণ (পাঁচটি বর্ণের একটির দ্বারা বর্ণিত) বা বর্ণহীন, ধনাত্মক পূর্ণসংখ্যার দ্বারা উপস্থাপিত

বানান দেওয়ার চেষ্টা করার সময় নিম্নলিখিত বিধিগুলি প্রয়োগ হয়:

  • ব্যয়ের একটি রঙ অবশ্যই সেই রঙের এক মন দিয়ে সন্তুষ্ট থাকতে হবে
  • বর্ণহীন ব্যয় {X any যে কোনও রঙের এক্স মন দ্বারা সন্তুষ্ট হতে পারে
  • একটি হাইব্রিড ব্যয় {Y / Z Y Y বা Z এর মধ্যে সন্তুষ্ট করে সন্তুষ্ট হতে পারে
    • লক্ষণীয় যে বন্ধনীগুলি নেস্টেড নয়
    • Y এবং Z হাইব্রিড নয়

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা মনের একটি পুল এবং একটি ব্যয় দেওয়া হলেও সত্য (বা কিছু সত্যবাদী মূল্য) মুদ্রণ করে বা প্রত্যাবর্তন করে যদি কেবল সেই পুলের মানা ব্যয়টি মেটাতে পারে, অন্যথায় মিথ্যা (বা কিছু মিথ্যা মান)।

মানা পুল হ'ল বিন্যাসের একটি খালি খালি স্ট্রিং:

Color1,Color2,Color3,...,Colorn-1,Colorn

ব্যয় হ'ল বিন্যাসের একটি খালি খালি স্ট্রিং:

Cost1,Cost2,Cost3,...,Costn-1,Costn

উদাহরণ

বিন্যাসে Pool Cost -> ExpectedOutput(পুল এবং ব্যয়ের মধ্যে একটি স্থান সহ):

{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

পুলে বর্ণহীন মানা পাওয়া কি সম্ভব?
নটকি 6'15

@ নটকি আসল খেলায়, হ্যাঁ চ্যালেঞ্জের মধ্যে, না। চ্যালেঞ্জের মধ্যে সংজ্ঞায়িত পাঁচটি রঙই চ্যালেঞ্জের উদ্দেশ্যে উপস্থিত রয়েছে।
রেইনবোল্ট

আমি যাদু থেকে খুব দীর্ঘ দূরে ছিলাম। হাইব্রিডের দাম?!?
স্পার

2
@ স্পার এগুলি 2005 সালে ফিরে রভনিকায় পরিচয় হয়েছিল
মুরগাট্রয়েড 99

@ murgatroid99 6E বেরিয়ে এলে আমি ছেড়ে দিয়েছি। আমার কোনও
বন্ধুই

উত্তর:


7

পাইথ, 55 53 52 50 বাইট

FN*Fmsm?k}kG^Gvkcd\/ceKc-rz0`Hd\,#=sN)I!.-NhK1B)E0

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার জোতা

লক্ষ্য করুন যে সময় এবং স্মৃতি জটিলতা সত্যিই খারাপ। সুতরাং দ্বিতীয় উদাহরণ কাজ করে না। আমার মেশিনে ক্রাশ হওয়ার আগে আমি প্রায় 1.6 গিগাবাইট রাম বরাদ্দ করি।

ব্যাখ্যা

ব্যাখ্যাটি 53 সমাধানের জন্য। পার্থক্যটি হ'ল, প্রাথমিক পার্সিংটি শুরুর পরিবর্তে মাঝখানে ঘটে।

Kc-rz0"{}"dFN*Fmsm?k}kG^Gvkcd\/ceKc-rz0`H\,#=sN)I!.-NhK1B)E0

সুতরাং এখানে প্রাথমিক পার্সিং।

Kc-rz0`Hd
   rz0     convert input() to lowercase
  -   `H   remove all curly brackets (`H = "{}")
 c      d  split at the space
K          assign to K

সুতরাং ইনপুট "{W},{R},{R} {2/W},{W/B}"রূপান্তরিত হয় ['w,r,r', '2/w,w/b']

m               ceK\,    map each cost d of the costs split by "," to:
 s                         the sum of
  m         cd\/           map each value k of cost split by "/" to:
    k                        k
   ? }kG                     if k in "abcdef...xyz" else
        ^Gvk                 Cartesian product with "abc...yz" of int(k) repeats

সুতরাং এটি কি করে? ব্যয় ইনপুট '2/w,w/b'রূপান্তরিত হয়:

[['aa', 'ab', 'ac', ..., 'zx', 'zy', 'zz', 'w'], 'wb']

['aa', 'ab', 'ac', ..., 'zx', 'zy', 'zz', 'w']সন্তুষ্টিতে প্রতিটি স্ট্রিং {2/W}এবং প্রতিটি চর 'wb'সন্তুষ্টিতে {w/b}

এখন আমরা এই তালিকার কার্টেসিয়ান পণ্যটি তৈরি করি (বা স্ট্রিংগুলি) এবং দেখুন, মনা-পুলের সাথে কোনও সংমিশ্রণ তৈরি করা যায় কিনা।

FN*F...              )      for N in Cartesian product of ...:
       #   )                   while 1:
        =sN                      N = sum(N)
                               this flattens N
            I!.-NhK            if not (subtract mana pool from N):
                   1             print 1 (True)
                    B            break
                      E      else:
                       0       print 0 (False)

1
truthy এবং falsy মান অনুমতি দেওয়া হয়, শুধু Trueএবং False
isaacg

অ্যাসাইনমেন্টটি অন্তর্ভুক্ত করে আপনি একটি অক্ষর সংরক্ষণ করতে পারেন KKc-rz0"{}")যেখানে Kপ্রথম ব্যবহৃত হয় সেখানে রাখুন এবং এতে প্রাথমিক অ্যাসাইনমেন্টটি সরিয়ে ফেলুন K
isaacg

@ আইস্যাকগ ওহ, এটি দেখা উচিত ছিল। ধন্যবাদ।
জাকুব

@ রেনবোল্ট আপনি একটি অ কর্মক্ষম সমাধান গ্রহণ করেছেন। আমি এটি পোস্ট করার সময় এটি ঠিক কাজ করেছিল, তবে পাইথ অনেক পরিবর্তন হয়েছিল। আমি এটি আপডেট করেছি এবং আরও 2 টি বাইট সংরক্ষণ করেছি।
জাকুবে

@ জাকুব ধন্যবাদ, তবে এই উত্তরটির এমন একটি দোভাষী ব্যবহার করা উচিত যা চ্যালেঞ্জ পোস্ট হওয়ার সময় উপলভ্য ছিল, কোনও নতুন আপডেট হওয়া দোভাষী নেই।
রেইনবোল্ট

2

পাইথন 2.7, 412 টি অক্ষর

import re,collections as C
r,C=re.findall,C.Counter
def g(m,h,c,v):
 try:return t(m,h,c+int(v))
 except:
  if m[v]:return t(m-C({v:1}),h,c)
def t(m,h,c):return any(g(m,h[1:],c,v)for v in h[0].split('/'))if h else sum(m.values())>=c
def f(m,c):m=C(r(r'\w',m));c=[filter(None, x)for x in zip(*r(r'(\w+/\w+)|(\d+)|(\w)',c))];m.subtract(C(c[2]));print all(x>=0 for x in m.values())*t(m,c[0],sum(int(x)for x in c[1]))

ফাংশনটি fযা যা যাচাই করে। এটি স্ট্রিং আর্গুমেন্ট হিসাবে মানা পুল এবং ব্যয় লাগে এবং মানা 1যখন ব্যয়টি 0অন্য কোনওভাবে পূরণ করে তখন মুদ্রণ করে । উদাহরণস্বরূপ, f('{R},{R},{G},{B},{R}', '{4},{R}')প্রিন্টগুলি 1

অবহেলিত, এটি মূলত এরকম দেখাচ্ছে

import re
from collections import Counter
def helper(mana, hybrids, colorless, option):
  try:
    option = int(option) # See if option is an integer
    # For colorless hybrid, just add the value to the colorless amount
    # to check at the end.
    return check_hybrids(mana, hybrids, colorless + option)
  except ValueError: # Option is a mana letter
    # For colored hybrid costs, check if any of that color is
    # available, then try to pay the rest of the cost with 1 less
    # of that color.
    if mana[option] >= 0:
      return check_hybrids(mana - Counter({option: 1}), hybrids, colorless)
    else:
      return False
def check_hybrids(mana, hybrids, colorless):
  '''Check whether the given mana pool can pay the given hybrid costs and colorless costs'''
  if hybrids:
    # For each option in the first hybrid cost, check whether the
    # rest of the cost can be paid after paying that cost
    return any(helper(mana, hybrids[1:], colorless, option) for option in hybrids[0].split('/'))
  else:
    # When there are no remaining hybrid costs, if there is enough
    # remaining mana to pay the colorless costs, we have success
    return sum(m.values()) > colorless
def can_cast(mana_str, cost_str):
  mana = Counter(re.findall(r'\w', mana_str))
  # transpose to get separate lists of hybrid, colorless, and colored symbols
  cost = zip(*re.findall(r'(\w+/\w+)|(\d+)|(\w)',cost_str))
  cost = [filter(None, sublist) for sublist in cost] # Remove unfound symbols
  mana.subtract(Counter(cost[2]))
  # After subtracting the single-colored cost from the mana pool, if
  # anything in the mana pool is negative, we didn't have enough to
  # pay for that color.
  if any(x <=0 for x in mana.values()):
    return False
  return check_hybrids(mana, cost[0], sum(int(x)for x in cost[1]))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.