আমি কি এখানে থাকতে পারি?


16

গেম টেররিয়ায় , গেম মেকানিকগুলির মধ্যে একটিতে ঘর তৈরি করা জড়িত যাতে কোনও এনপিসি প্রবেশ করতে পারে a বৈধ বাড়ি হিসাবে কী গণনা করা হয় তার জন্য একটি কঠোর নিয়ম রয়েছে। নিয়মের তালিকা এখানে:

  1. বাড়ির মোট ক্ষেত্রফল কমপক্ষে square০ বর্গাকার টাইল হতে হবে তবে but৫০ এরও কম হতে হবে Also এছাড়াও, বাইরের ফ্রেম সহ বাড়ির আকার কমপক্ষে এর মধ্যে একটি হতে হবে:

    5x12
    6x10
    7x9
    8x8
    9x7
    10x6
    12x5
    15x4
    

    সরলতার জন্য, আপনি নিরাপদে ধরে নিতে পারেন: ক) সমস্ত ইনপুট ঘরগুলি আয়তক্ষেত্রাকার হবে এবং খ) কোনও শক্ত টাইল #বাড়ির অভ্যন্তরে থাকবে না। এখানে আমাদের 12x6 ফ্রেম (সুন্দর ASCII এ আঁকা):

    ############
    #          #
    #          #
    #          #
    #          #
    ############
    
  2. বাড়িটি অবশ্যই পটভূমির দেয়ালে beেকে রাখা উচিত। এগুলি শক্ত টাইলস নয়, তৃতীয় মাত্রায় বাড়ির পিছনে প্রাচীর । গর্ত অনুমোদিত, কিন্তু কোনও গর্ত 4x4 এর চেয়ে বড় হতে পারে না। যদি একটি সারিতে 5 বা ততোধিক স্পেস অক্ষরের সারি বা কলাম থাকে তবে এটি 4x4 এর চেয়ে বড় গর্ত এবং ঘরটি অবৈধ। একাধিক গর্তও অনুমোদিত, তবে কমপক্ষে একটি প্রাচীর পৃথক থাকতে হবে।

    ############
    #**********#
    #**********#
    #**********#
    #**********#
    ############
    
    ############
    #*    *    #
    #*    *    #
    #*    *    #
    #******    #
    ############  (Still acceptable since neither hole is larger than 4x4 and there is a separator)
    
    ############
    #    ******#
    #***    ***#
    #    ******#
    #***    ***#
    ############  (Also still valid. No row or column of blank spaces is longer or taller than 4.)
    
  3. একটি প্রবেশদ্বার থাকতে হবে। এটি পাশের একটি দরজা |বা -মেঝে বা সিলিংয়ের প্ল্যাটফর্ম হতে পারে । যদি একমাত্র প্রবেশদ্বার কোনও কোণে থাকে তবে এনপিসি প্রবেশ করতে অক্ষম। এছাড়াও, আপনার যদি মেঝে হিসাবে একটি প্ল্যাটফর্ম থাকে, আপনার অবশ্যই এনপিসি দাঁড়ানোর জন্য কমপক্ষে একটি একক কঠিন ব্লক থাকতে হবে। এই শক্ত ব্লকটি বাম বা ডানদিকে পাশের দেয়ালের সাথে সরাসরি সংলগ্ন হতে পারে না । এগুলি প্রবেশদ্বার সহ সমস্ত বৈধ বাড়ি:

    ############
    #**********#
    |**********#
    #**********#
    #**********|
    ############  (Multiple doors, or doors up high are okay)
    
    ############
    #**********#
    #**********#
    #**********#
    #**********#
    #######----#
    
    #----#######
    #**********#
    #**********#
    #**********#
    #**********#
    ############
    
  4. কমপক্ষে একটি হালকা উত্স $, টেবিল Tএবং চেয়ার থাকতে হবে C, যদিও আরও অনুমোদিত। আলোর উত্স বাতাসে বা মাটিতে হতে পারে তবে টেবিল এবং চেয়ার উভয়ই অবশ্যই মাটিতে থাকতে হবে, যেমন সর্বনিম্ন সারিতে।

    ############
    #**********#
    #**********#
    #***$******|
    #****TC****|
    ############
    

    এছাড়াও, আপনি ধরে নিতে পারেন যে কোনও আসবাবের পিছনে একটি প্রাচীর রয়েছে, সুতরাং একটি মশাল, চেয়ার বা টেবিল দুটি গর্তের মধ্যে পৃথক হিসাবে গণনা করতে পারে।

    ############
    #*    *    #
    #*    *    #
    #*    $    #
    #**TC******|
    ############
    

চ্যালেঞ্জ

আপনাকে অবশ্যই সংক্ষিপ্ততম ফাংশনটি লিখতে হবে যা কোনও বাড়িকে ASCII স্ট্রিং হিসাবে গ্রহণ করে এবং সত্য / মিথ্যাটি বৈধ আবাসন কিনা তা ফেরত দেয়। আপনি এটিকে একটি নতুন লাইন সীমাবদ্ধ স্ট্রিং, স্ট্রিংগুলির একটি তালিকা বা যুক্তিসঙ্গত হিসাবে অন্য কোনও উপায়ে নিতে পারেন। আমার জন্য, দয়া করে একটি সংক্ষিপ্ত প্রোগ্রাম অন্তর্ভুক্ত করুন যাতে আমি এটি সঠিকভাবে কাজ করে কি না তা পরীক্ষা করতে পারি।

রেফারেন্সের জন্য, এগুলি সমস্ত অবৈধ ইনপুট:

############
-**********#
-****$*****#
-**********#
-******TC**#
############  (You can't have platforms on the sidewalls)

###########-
#**********#
#**********#
#****$*****#
#**T***C***#
###########|  (NPC can't enter because the only entrances are on the corner)

############
#**********#
#******$***#
#**********#
#T****C****#
##--------##  (NPC has nowhere to stand)

############
#**********#
#**********#
#**********#
#**$**TC***#
##########|#  (Door cannot be in the floor or ceiling)

############
#**********#
#**********#
#**********#
|**   T C  #
############  (Since table and chair do not count as a background wall, the hole in background is too wide)

####### ####
#**********#
#**********#
#****$*****#
#**T***C***|
############  (There's a hole in the frame.)


###########################################################################
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
#                                                                         #
###########################################################################  (House is 75x11, which is too big.)

লিডারবোর্ড


6
দুর্দান্ত চ্যালেঞ্জ, টেরিয়ারিয়া সহকর্মী।
Rɪᴋᴇʀ

আমরা কি ধরে নিতে পারি যে গর্তগুলি আয়তক্ষেত্রাকার হবে? অন্যথায় এটি এমন একটি পরীক্ষার কেস ব্যবহার করতে পারে যেখানে পুরো 4x4-তে ফিট হয় না তবে এতে কখনও কখনও একের পর এক 4 টিরও বেশি স্পেস থাকে না।
মার্টিন ইন্ডার

অনেকগুলি পয়েন্ট রয়েছে যা আমি অস্পষ্ট বলে মনে করি। 1. ফ্রেমটি কি আয়তক্ষেত্রাকার হতে হবে? " সমস্ত ঘরগুলি আয়তক্ষেত্র হবে " পরামর্শ দেয় যে তারা এটি করে তবে ফ্রেমগুলি পরিষ্কারভাবে রায় দেয় না যা আয়তক্ষেত্রাকার নয় তবে তাদের অক্ষ-বিন্যস্ত বাউন্ডিং বাক্সের চারটি কোণে যায়। এবং সম্ভবত গর্তগুলি ঘিরে রাখা যেতে পারে #। ২. মার্টিন যেমন জিজ্ঞাসা করেছিলেন, " 4x4 এর চেয়ে বড় কোনও গর্ত হতে পারে না " এর অর্থ কী? (এটিও নোট করুন যে আমার তৃতীয় পড়ার আগেই আমি এই গর্তটি কী তা বোঝার বিষয়ে নিশ্চিত ছিলাম people আপনি এই লোকটি লিখবেন যাঁরা গেমটি খেলেননি)।
পিটার টেলর

1
৩. " এই শক্ত ব্লকটি সরাসরি দেয়ালের সাথে সংলগ্ন হতে পারে না " - একটি প্রাচীর কী? পয়েন্ট 2 থেকে এটি বলে মনে হচ্ছে *, তবে এটি বৈধ দরজার প্রদত্ত উদাহরণগুলি বাদ দেবে। 4. না " মাটিতে " অর্থ "পেনাল্টিমেট সারিতে" বা "একটি উপরে #" আছে? ৫. " এটি টেবিল এবং চেয়ারগুলির জন্য প্রযোজ্য নয় " "সুতরাং এর অর্থ কী এর সাথে সরাসরি Tবা এর Cনীচে একটি 4x4 গর্ত খুব বড়? ". " এনপিসি প্রবেশ করতে পারে না কারণ একমাত্র প্রবেশদ্বারটি কোণে রয়েছে " আমি মনে করি না কোণটি সম্পর্কে অনুমানটি কিছু বলেছিল। তারা হতে পারে -বা |অন্য দরজা আছে?
পিটার টেলর

A. কোনায় প্রবেশদ্বারগুলি যদি অ্যাক্সেস স্বীকার না করায় কোনও সমস্যা হয় তবে তার অর্থ কি প্রতিটি *প্রবেশদ্বার থেকে পৌঁছনীয় হতে হবে? বা *অনুমতিপ্রাপ্ত ছিদ্রগুলির মাঝখানে বিচ্ছিন্ন হয়ে গেছে, কেবল একটি পাশ দিয়ে প্রবেশের অনুমতি পেয়ে পুরো ঘর দুটি কেটে দেয় এমন ছিদ্র এবং প্রবেশদ্বারগুলি যা সরাসরি কোনও গর্তে প্রবেশ করে?
পিটার টেলর

উত্তর:


2

পাইথন 2, 503 439 বাইট

সুপার শর্ট নয়, তবে এটি একটি সমাধান। আপনি যদি গল্ফকে কিছু দেখতে পান তবে আমাকে জানান। আমি আমার অদম্য সংস্করণটিও দেখার পরামর্শ দিচ্ছি, কারণ এটি আসলে পাঠযোগ্য।

সম্পাদনা: ifএকটি লুপের বাইরের সমস্ত গুলি নীচে একত্রিত করা হয়েছে।

def f(s):
 s=s.split("\n");e=l=0;h=len(s);w=len(s[0])
 for c in s[0][1:-1]+s[-1][1:-1]:
    if(c in"#-")<1:return 0
    if"-"==c:e=1
 for r in s[1:-1]:
    if(r[0]in"#|")*(r[-1]in"#|")<1or" "*5in r:return 0
    if"$"in r:l=1
 for r in zip(*s):
    if" "*5in`r`[2::5]:return 0
 if(h*w<60)+(h*w>749)+(w<5)+(h<4)or" "in s[0][0]+s[0][-1]+s[-1][0]+s[-1][-1]or("T"in s[-2])*("C"in s[-2])*l<1or("#"in s[-1][2:-2])<1or"|"in"".join(s[1:-1])<1>e:return 0
 return 1

এটি অনলাইনে চেষ্টা করুন

Ungolfed:

Falseডিবাগিংয়ের জন্য ফলাফলটির ফলাফলও আউটপুট করে ।

def f(s):

    # check dimensions
    s=s.split("\n")
    h=len(s)
    w=len(s[0])
    if h*w < 60 or h*w > 749 or w<5 or h<4: return False,"Size"

    # top / bottom
    e=0
    for c in s[0][1:-1]+s[-1][1:-1]:
        if(c in"#-")<1:return False,"T/B"

        # entrance
        if"-"==c:e=1

    # no spaces in corners -_-
    if" "in s[0][0]+s[0][-1]+s[-1][0]+s[-1][-1]: return False,"Corner"

    # light, table, chair
    l=t=c=0

    # left / right
    for r in s[1:-1]:
        if(r[0]in"#|")*(r[-1]in"#|")<1: return False,"L/R"

        # walls, put above
        if" "*5in r: return False,"Walls"

        # light
        if"$"in r:l=1

    # table, chair
    if"T"in s[-2]:t=1
    if"C"in s[-2]:c=1

    if l*t*c<1: return False,"L/T/C"

    # wall columns
    for r in zip(*s): # Transpose
        if" "*5in`r`[2::5]: # Tuple to string
            return False,"Walls"

    # entrance
    if"|"in"".join(s[1:-1])<1>e: return False,"Entrance"

    # place to stand
    if("#"in s[-1][2:-2])<1: return False,"Stand"

    return True

নিরবচ্ছিন্ন সংস্করণ অনলাইন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.