यह अंतिम स्प्रिंट है ... और आपकी आधी टीम बीमार है। आप देर से काम कर रहे हैं, बस दिन के लिए अपना आखिरी काम कर रहे हैं, आगे देख रहे हैं ... रोशनी बंद क्यों हो गई? मुझे याद नहीं है कि आने वाला सुरक्षा लड़का ... ओह नहीं! मैंने घर पर अपनी चाबी छोड़ दी!
जैसे ही स्थिति की भयावहता डूबती है, आप तय करते हैं कि आप भागने वाले हैं ।
टास्क सारांश
अपने भागने को प्रभावित करने के लिए, आपको एक योजना की आवश्यकता है! हालाँकि, आप जानते हैं कि किसी भी योजना के विफल होने की संभावना होती है, और विभिन्न योजनाओं के लिए अलग-अलग मात्रा में प्रयास की आवश्यकता होती है।
भूखा, थका हुआ और एक इंजीनियर होने के नाते, आप सफलता से बचने की संभावनाओं और इसके लिए आवश्यक प्रयासों की चिंताओं को संतुलित करते हुए, जटिल से बचने का सबसे अच्छा तरीका निर्धारित करने के लिए एक छोटा कार्यक्रम लिखने का निर्णय लेते हैं।
आप भवन का नक्शा बनाते हैं:
#######################
# = #
! = ! <-- window
# ! = # (freedom!)
#################= #
# # = #
# # = #
# # = #
# o ! # # ! = #
##| ! ## # ! = #
#######################
^ ^ ^
me my door ludicrously high shelves
(locked) (climbable)
कार्यालय से बचने के लिए, आपको अपने आप को नक्शे से बाहर ले जाना होगा। यहां आप देख सकते हैं कि 2 खिड़कियां ( !
) हैं, या तो कोई आपको स्वतंत्रता के लिए ले जाएगा, लेकिन उनमें से केवल एक ही सुलभ है। हम नक्शे के सीमा के बाहर अपने पैर रखने के रूप में 'नक्शे से दूर' को परिभाषित करते हैं
सेल प्रकार
- empty, you can be here (i.e. the escapee can consume this cell)
# - solid (your desk, your in-tray), you can't be here, but you can stand on it
! - destructible, (co-worker's desk, door, window), you can't be here until you smash it first (turning it into an empty cell)
= - climbable, (fire ladder, filing cabinet, etc.), you can be here
मूल रूप से भस्म द्वारा ली गई कोशिकाओं को खाली होने के लिए लिया जाता है।
कार्रवाई विनिर्देशों
आपके पास अपने डिस्पोजेबल पर कई संभावित कार्य हैं। ये कुछ पूर्णांक सफलता की संभावना के साथ सरल राज्य संक्रमण द्वारा परिभाषित किए गए हैं। उदाहरण के लिए, चलने के लिए, आप एस्केपी एक सेल को स्थानांतरित करते हैं, जिसे हम इस संक्रमण के साथ दर्शाते हैं:
चरण
1 स्टेप, 100%, दर्पण
o. o
|. --> |
# #
डॉट्स उन कोशिकाओं को दिखाते हैं जो खाली (या चढ़ाई करने योग्य, लेकिन ठोस या विनाशकारी नहीं) होनी चाहिए क्योंकि हम इसमें या इसके माध्यम से आगे बढ़ते हैं। 100% का मतलब है कि आपके पास खुद को चोट न पहुंचाने और अपने साहसी पलायन को समाप्त करने का 100% मौका है। सभी संभाव्यताएं 1% और 100% समावेशी के बीच पूर्णांक प्रतिशत होंगी। पहला आरेख प्रारंभिक अवस्था (कुछ ठोस पर खड़े होने, कुछ खाली जगह के बगल में खड़े होने) को दर्शाता है। दूसरा आरेख टर्मिनल स्थिति (खाली स्थान में स्थानांतरित) दिखाता है। विशेष रूप से कुछ भी होने के लिए बाईं (प्रारंभिक स्थिति) पर किसी अनिर्दिष्ट कोशिकाओं (रिक्त स्थान ) के लिए कोई आवश्यकता नहीं है । अनिर्दिष्ट कोशिकाएँ (स्थान,
) दाईं ओर (टर्मिनल राज्य) वही होना चाहिए जो वे पहले थे (जैसे कि जो भी पलायनकर्ता के पीछे था, या जो कुछ भी मैं चल रहा हूं) (यह खाली जगह या अन्यथा हो)। ध्यान दें कि सभी दाहिने हाथ (टर्मिनल राज्य) ) आरेख केवल कोशिकाओं को विनाशकारी से खाली में बदल देगा, कोई अन्य परिवर्तन नहीं हो सकता है। "1 stp" का अर्थ है कि इसमें 1 stp खर्च होता है: हम एक कदम उठाने के लिए आवश्यक ऊर्जा की मात्रा के रूप में "stp" को परिभाषित करते हैं।
"दर्पण" का अर्थ है कि इस क्रिया के दो रूप हैं। "सही" कार्रवाई दिखाई गई है, "बाएं" कार्रवाई एक सटीक दर्पण है, उदाहरण के लिए:
.o
.|
#
दर्पण (वाम) रूप है
o.
|.
#
सही एक्शन को "राइट" कहा जाता है (उदाहरण के लिए "स्टेप राइट") लेफ्ट एक्शन को "लेफ्ट" कहा जाता है (जैसे "स्टेप लेफ्ट")
इन आरेखों में, पलायनकर्ता द्वारा दिखाया गया है
o
|
जब खड़े (2 इकाइयों लंबा) और
%
जब क्राउचिंग (1 यूनिट लंबा)। कोशिकाएं जो ठोस या विनाशकारी होनी चाहिए, एक हैश द्वारा इंगित की जाती हैं #
। कोशिकाएं जो ठोस या विनाशकारी नहीं होनी चाहिए, एक बिंदु द्वारा इंगित की जाती हैं .
। कोशिकाएं जो विनाशकारी होनी चाहिए, एक धमाके द्वारा इंगित की जाती हैं !
। एक नव निर्मित खाली स्थान एक अंडरस्कोर द्वारा दिखाया गया है _
।
x
एक संदर्भ बिंदु है जो स्थानांतरित नहीं होता है (यह मौजूद नहीं है, उस कक्ष पर कोई अवरोध नहीं होना चाहिए (अंतरिक्ष की तरह ))।
नोट: जब आप फर्श से टकराते हैं तो हम तेजी से मंदी की समस्या को नजरअंदाज कर देते हैं, और हां, इस खेल में आप सीढ़ी से पूरी तरह से महाकाव्य कूद सकते हैं)
चरण
1 स्टेप, 100%, दर्पण
o. o
|. --> |
x# x#
चढ़ जाओ
1 स्टेप, 100%, दर्पण
= =
o. --> o
|. |
x= x=
मिश्रण
3 एसपी, 100%, दर्पण
%. %
x# --> x#
ऊपर चढ़ना
10 एसटीपी, 95%, दर्पण
o. %
|# --> #
x# x#
ड्रॉप
0 स्टेप, 100%
o
| --> o
x. x|
ड्रॉप (स्टैंड)
0 स्टेप, 100%
% o
x. --> x|
ऊपर चढ़ना
2 stp, 100%
= o
o --> |
x| x
झुकना
2 stp, 100%
o
| --> %
x# x#
खड़ा
4 stp, 100%
. o
% --> |
x# x#
छोटी छलांग
4 एसपी, 95%, दर्पण
o.. o
|.. --> |
x# x#
लम्बी कूद
7 एसटीपी, 75%, दर्पण
o... o
|... --> |
x# x#
ऊँची छलांग
12 stp, 90%, दर्पण
.. o
o. --> |
|
x# x#
इसमें अपनी पीठ रखो!
20 एसटीपी, 80%, दर्पण
o!. _o
|!. --> _|
x# x#
पंच
8 एसटीपी, 90%, दर्पण
o! o_
| --> |
x# x#
लात
8 stp, 85%, दर्पण
o o
|! --> |_
x# x#
डाक टिकट
8 stp, 90%
o o
| --> |
x! x_
योजनाओं
एक योजना ऊपर बताई गई क्रियाओं का एक क्रम है। उदाहरण के लिए:
Step Left
High Jump Left
Crouch
Shuffle Left
Shuffle Left
Stand
Long Jump Left
Put your back into it! Left
Step Left
बूंदों को शामिल करने पर ध्यान दें। आपको कुछ भी करने से रोकने के लिए नियमों को स्थापित किया जाना चाहिए, लेकिन आपको अभी भी इसके लिए योजना बनानी होगी!
किसी भी योजना में एक आवश्यक प्रयास होता है, जो प्रत्येक चरण के प्रयासों का योग होता है। सफलता की संभावना भी है, जो प्रत्येक क्रिया की सफलता की संभावनाओं का उत्पाद है। सरल उदाहरण:
Step Right: 1stp, 100%
Long Jump Right: 7stp, 75%
Step Right: 1stp, 100%
Stamp: 8stp, 90%
Drop: 0stp, 100%
Drop: 0stp, 100%
Drop: 0stp, 100%
Drop: 0stp, 100%
Step Left: 1stp, 100%
Step Left: 1stp, 100%
High Jump Left: 12stp, 90%
Effort = 1+7+1+8+1+1+12 = 31
Success Probability = 75%*90*90% = 60.75%
पृष्ठ के शीर्ष पर मानचित्र के लिए एक 'काम किया गया उदाहरण' एक जिश के रूप में पाया जा सकता है ।
इनपुट
इनपुट दो भागों में आता है, एक पूर्णांक, और वर्णों की एक सरणी या स्ट्रिंग।
पूर्णांक आपकी न्यूनतम स्वीकार्य (प्रतिशत) सफलता की संभावना है। इसे एक प्रतिशत के रूप में व्याख्या किया जाना है, इसलिए 80 का मतलब है कि आपकी योजना को 80% से कम संभावना के साथ सफल होना चाहिए।
एक वैध नक्शा एक आयत है जिसमें स्थायी एस्केपी (1x2 का न्यूनतम आकार) और कोई अनिर्दिष्ट प्रतीक शामिल नहीं हैं। सभी पंक्तियों की लंबाई समान होगी। आप 1-आयामी सीमांकित स्ट्रिंग के रूप में इनपुट स्वीकार कर सकते हैं (सीमांकक एक एकल संगत वर्ण या CRLF और LFCR जोड़ी में से एक होना चाहिए), एक समान 1-आयामी सरणी, या 2-आयामी सरणी के रूप में। यदि आपका चुना हुआ इनपुट प्रारूप मानचित्र की चौड़ाई या ऊँचाई को किसी तरह से इंगित नहीं करता है, तो आप इन के लिए अतिरिक्त तर्क स्वीकार कर सकते हैं (आपको अपने उत्तर में यह स्पष्ट रूप से बताना होगा)। यदि आप इसे सूट करते हैं तो आप कमांड लाइन तर्क और मानक इनपुट का मिश्रण कर सकते हैं (उदाहरण के लिए स्टड से नक्शा, argv से न्यूनतम सफलता संभावना)। निम्न उदाहरण वैध और अमान्य मानचित्र हैं।
मान्य:
o
|
मान्य:
# #
! o #
! | #
#########
अमान्य (कोई पलायन नहीं):
# #
! #
! #
#########
अमान्य (हमेशा भागने वाला व्यक्ति खड़ा होता है):
# #
! #
! % #
#########
अमान्य (अमान्य प्रतीक):
# #
! ~ #
! #
#########
अमान्य (आयत / विभिन्न लंबाई पंक्तियाँ नहीं):
# #
! o #
! | #
#########
आप मान सकते हैं कि आपका इनपुट वैध है (मुझे परवाह नहीं है कि आपका प्रोग्राम अवैध इनपुट सौंप दिया गया है)।
उत्पादन
आउटपुट टेक्स्ट (ASCII) है। एक स्ट्रिंग के रूप में लौटाया जा सकता है, या मानक आउटपुट पर मुद्रित किया जा सकता है। योजना को LF, CRLF, या LFCR द्वारा परिसीमित किया जाना चाहिए। इसी तरह, आवश्यक प्रयास के बाद एक और LF, CRLF या LFCR होना चाहिए। अनुगामी रेखा विराम वैकल्पिक है।
आपको आवश्यक प्रयास के साथ एक इष्टतम योजना का उत्पादन करना चाहिए, या "कोई उम्मीद नहीं है!" यदि ऐसी कोई योजना मौजूद नहीं है। आपको सफलता की संभावना का उत्पादन करने की आवश्यकता नहीं है। इस पाठ में अनुगामी रेखा विराम हो सकती है या नहीं।
एक इष्टतम योजना को एक योजना के रूप में परिभाषित किया गया है (ऊपर देखें) कम से कम सफलता की संभावना के साथ न्यूनतम प्रयास की आवश्यकता है। ध्यान दें कि आप संभाव्यता की गणना सटीक होनी चाहिए, आप यह नहीं मान सकते हैं कि फ्लोटिंग पॉइंट काफी अच्छा है (यही कारण है कि मैं आपसे आउटपुट की उम्मीद नहीं करता हूं)। मैं इसे काफी परीक्षण करने के लिए परीक्षण मामलों को डिजाइन करने का प्रयास करूंगा (यदि आप उन्हें पास करते हैं और कोई भी गलत धारणा नहीं बनाते हैं तो आप अपने जमा को मान्य मान सकते हैं)।
प्रारूप:
Required Effort: <effort>
<plan>
उदाहरण के लिए, इनपुट के लिए
50
# #
! o #
! | #
#########
एक उपयुक्त आउटपुट होगा:
Required Effort: 23
Step Left
Step Left
Step Left
Kick Left
Punch Left
Step Left
Step Left
Step Left
Step Left
यहां सफलता की संभावना 76.5% है।
उसी नक्शे के लिए, लेकिन 80% की सफलता की न्यूनतम संभावना, आपको "अपनी पीठ इसमें डालनी होगी", जिसके लिए अधिक प्रयास की आवश्यकता होगी लेकिन सफलता की संभावना मानदंड को पूरा करना होगा। यदि सफलता की न्यूनतम संभावना 80% से अधिक थी, तो आपको थोड़ा कठिन सोचने की आवश्यकता होगी (या तो दरवाजे के हिस्से के माध्यम से पंच या किक करें और बाहर की ओर फेरबदल करें)। यदि सफलता की न्यूनतम संभावना 100% थी, तो आपको "कोई उम्मीद नहीं है!"
उदाहरण
यह संभव है कि किसी इनपुट के लिए एक से अधिक मान्य योजनाएँ हों, आप आउटपुट हों, इनकी आवश्यकता बिल्कुल नहीं है, लेकिन इसके लिए आवश्यक आवश्यक प्रयास होना चाहिए, और एक मान्य योजना होनी चाहिए। आप अपने समाधान की जांच करने के लिए सत्यापनकर्ता का उपयोग कर सकते हैं (नीचे देखें)
इनपुट:
100
o
|
आउटपुट:
Required Effort: 0
Drop
इनपुट:
5
# = #
# = !
# = ! ! !
# =#######
# = #
# = o #
# = ! | #
##########
आउटपुट:
Required Effort: 57
Step Left
Kick Left
Step Left
Step Left
Step Left
Climb Up
Climb Up
Climb Up
Climb Up
Climb off Right
High Jump Right
Long Jump Right
Step Right
Drop
Kick Right
Crouch
Shuffle Right
Shuffle Right
इनपुट:
60
#########
# ! # #
! ! ! o #
! # ! | #
#########
आउटपुट:
Required Effort: 58
Step Left
Kick Left
Crouch
Shuffle Left
Shuffle Left
Stand
Punch Left
Clamber Up Left
Shuffle Left
Drop (Stand)
Kick Left
Crouch
Shuffle Left
Shuffle Left
उसी नक्शे के लिए, लेकिन 80%, आउटपुट होना चाहिए:
There is no hope!
एक ही नक्शे के लिए, लेकिन 50%, एक अलग योजना के साथ आवश्यक प्रयास 56 हो जाता है)
इनपुट:
50
#######################
# # = #
! # = !
# # = #
###### #####!## =### #
#= ## # = #
#=############# = #
#= = #
#= o = #
#!!| = #
#######################
आउटपुट:
Required Effort: 121
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Step Right
Climb Up
Climb Up
Climb Up
Climb Up
Climb Up
Climb Up
Climb off Right
Long Jump Left
Step Left
Step Left
Stamp
Drop
Drop
Crouch
Shuffle Left
Shuffle Left
Shuffle Left
Shuffle Left
Shuffle Left
Shuffle Left
Stand
Clamber Up Left
Stand
Clamber Up Left
Stand
Step Left
Step Left
Step Left
Step Left
Punch Left
Clamber Up Left
Shuffle Left
इनपुट:
66
######
# ###
#o ! !
#| ! !
### ##
######
आउटपुट:
Required Effort: 37
Step Right
Put your back into it! Right
Kick Right
Crouch
Shuffle Right
Shuffle Right
इनपुट:
यह एक झूठी मान्यताओं की जाँच करने के लिए डिज़ाइन किया गया है, जिसका शिकार कोई भी हो सकता है, और इसके परिणामस्वरूप थोड़ा अजीब लग सकता है
30
###################
# ## # # # # = #
! ## # # # = #
# # # = #
## ############= #
# ## # #= #
# = # #= #
! = # #= #
# = # #= #
#o= ! ==#
#|= ! =#
#!= # ==########==#
# # ! !! =#
# # !! ! = #
# # !!!!#########
# # # #
# # # #
###################
सफलता की संभावना 30 के साथ आउटपुट:
Required Effort: 199
Long Jump Right
Put your back into it! Right
<snip>
सफलता की संभावना के साथ आउटपुट 32 बाधाएं:
Required Effort: 200
Long Jump Right
Punch Right
<snip>
इनपुट के रूप में शीर्ष पर मानचित्र का उपयोग करना, सफलता की संभावना 1% की संभावना के साथ, आपको 116 का आवश्यक प्रयास (सफलता का मौका ~ 32%, यह मेरे परीक्षण कार्यक्रम में चलने में लगभग 20 सेकंड लग गए) प्राप्त करना चाहिए।
विजय मानदंड
यह कोड-गोल्फ है, सबसे छोटी कोड जीत हो सकती है।
पात्र होने के लिए, आपका फ़ंक्शन या प्रोग्राम काम करना चाहिए और उचित मशीन पर 30minutes के तहत उपरोक्त प्रत्येक टेस्टकेस को हल करने में सक्षम होना चाहिए। मेरा सॉल्वर उन्हें 30 सेकेंड से कम में करता है। यदि परीक्षण स्क्रिप्ट (नीचे) 30 मिनट से कम में चलती है, तो आप निश्चित रूप से जाने के लिए अच्छे हैं।
उदाहरण सॉल्वर, सत्यापनकर्ता, टेस्ट स्क्रिप्ट और टेस्टकेस (समाधान के साथ)
सॉल्वर, और सॉल्यूशन वेरीफ़ायर के लिए सी # कोड, यहाँ एक जिस्ट के रूप में उपलब्ध है । जीस्ट में भी शामिल है file.txt
, जो ऊपर वर्णित क्रियाओं के एक पठनीय (पर्याप्त) रूप है, और कार्यक्रम को चलाने के लिए आवश्यक है। उस फ़ाइल और युक्ति के बीच कोई विसंगति जानबूझकर नहीं है।
जिस्ट में कई परीक्षण मामले (ऊपर दिए गए सभी उदाहरणों सहित) और स्वचालित रूप से उनके खिलाफ प्रस्तुत करने के लिए पॉवरशेल स्क्रिप्ट शामिल है। यदि स्क्रिप्ट आपको बताती है कि एक विशेष परीक्षण विफल हो गया है, तो आप OfficeEscapeSolver.exe testcase<n>.txt outputFromYourProgram.txt
अधिक विवरण देखने के लिए दौड़ सकते हैं । इन परीक्षण मामलों के लिए उदाहरण समाधान दूसरे जिस्ट में हैं ।
सभी कोड एक पूर्ण गड़बड़ी है (हालांकि अनगुल्ड), लेकिन आपको static void Main(...)
आउटपुट की मात्रा बदलने के लिए बहुत दूर नहीं जाना चाहिए (इस जानकारी का उपयोग करने के लिए स्वतंत्र महसूस करें, मैंने इसे आपके लाभ के लिए प्रदान किया है!)।
टेस्ट-केस पास करने का यह मतलब नहीं है कि आपका आउटपुट अच्छी तरह से बने, क्योंकि स्क्रिप्ट और वेरिफायर बहुत उदार हैं। आपका आउटपुट मान्य होने के लिए आपके प्रस्तुतिकरण से ऊपर के विनिर्देश से मेल खाना चाहिए।
अगर आपको लगता है कि आपको सॉल्वर या टेस्टस्क्रिप्ट के साथ बग मिल गया है file.txt
, या किसी डोडी टेस्टकेस में कोई त्रुटि है , तो कृपया इस पोस्ट पर टिप्पणी करें या अन्यथा मुझे एसई चैट पर पिंग करें; मैं शायद संवाद करने के किसी अन्य प्रयास को नोटिस नहीं करूंगा।
मैं बैश या बैच में परीक्षण स्क्रिप्ट प्रदान नहीं करूंगा, क्योंकि मैं उन्हें नहीं जानता, लेकिन मैं एक अनुवाद शामिल करके खुश हूं और यदि लोग चाहते हैं तो एक सी # संस्करण लिखेंगे।
पोस्ट Amble
प्रश्न मिल गए? आज देर न करें, उनसे पूछें!
इस कार्य के लिए प्रयास की आवश्यकता होती है , गंभीर गोल्फरों को अपने दांतों को डुबाने के लिए कुछ देने की।
इनपुट / आउटपुट पर उनकी प्रतिक्रिया के लिए ais523 को मेरा धन्यवाद।
अगर लोग और अधिक चाहते हैं (मैं इस पोस्ट को और अधिक नहीं बनना चाहता हूं), या खुद के कुछ प्रदान करना चाहता हूं, तो मैं जिस्ट फाइल में अधिक टेस्टकेस प्रदान कर सकता हूं।