मेरे ट्रिप कूल रहो!


11

चुनौती

मार्क्स और स्पेंसर के आसपास घूमते हुए, मैंने देखा कि उनके पास दुकान के चारों ओर बेतरतीब ढंग से एयर कंडीशनिंग इकाइयाँ थीं। शांत रखने के लिए, मुझे आश्चर्य हुआ कि एयर कंडीशनिंग इकाई से बहुत लंबे समय तक दूर रहने के बिना पूरी दुकान में घूमने का सबसे आसान तरीका क्या था।

एक नक्शे को देखते हुए, आपको एक एयर कंडीशनिंग इकाई से दूरी को यथासंभव कम रखने के लिए पूरे नक्शे के चारों ओर यात्रा करने का एक रास्ता खोजना होगा (भले ही एसी इकाई एक दीवार के दूसरी तरफ हो)।

नक्शा

मानचित्र आपको किसी भी तरह से आपूर्ति की जा सकती है और निम्नलिखित प्रतीकों का उपयोग करता है:

+ is a corner of a wall
| is a east/west facing wall
- is a north/south facing wall
X is an air conditioning unit
S is the start and end point

एक उदाहरण मानचित्र होगा:

+------S---+
|   X      |
| ---+-+ X |
|    |X|   |
| ---+ +---+
|   X      |
+----------+

या

+---+--+
| X |  |
|   |  +-----+------+
|   | X      | X    |
|     ---+       |  S
|   |    |  X    |  |
|   |  +-+-------+--+
| X    |
+------+

पूरे नक्शे के आसपास यात्रा करने का मतलब है कि हर खाली जगह और एयर कंडीशनर से गुजरना। आप एक दीवार के माध्यम से यात्रा नहीं कर सकते हैं और केवल orthogonally यात्रा कर सकते हैं। एक नक्शा हमेशा आयताकार नहीं हो सकता है।

एक एसी यूनिट से जितना संभव हो उतना कम दूरी रखना सभी समय के कदमों का योग है।

प्रवेश करने और छोड़ने के माध्यम से गुजरना।

आप किसी भी तरह से पथ को आउटपुट कर सकते हैं। उदाहरणों में शामिल:

  • पथ के साथ मानचित्र को आउटपुट करना शामिल है
  • कम्पास बिंदुओं के उत्तराधिकार के रूप में पथ को आउटपुट करना (जैसे NNSESW)

2
@ BetaDecay और इसकी गणना कैसे की जाती है? किसी भी समय अधिकतम दूरी? सभी समय चरणों में दूरी का योग / औसत?
इंगो बुर्क

5
यह समझना असंभव है कि इस समस्या का लक्ष्य क्या है। यदि आपको हर वर्ग का दौरा करना चाहिए, तो अधिकतम दूरी एक स्थिर है।
feersum

1
@ Faersum क्यों है? क्या मानचित्र लेआउट कुछ वर्गों को फिर से तैयार करने और इस तरह से पथ के लिए कई कब्जे देने के लिए आवश्यक नहीं बना सकता है?
अदृश्यपन्दा

6
क्या यह अनुकूलन समस्या है? यदि नहीं, तो सही आउटपुट के साथ कुछ परीक्षण मामले होने चाहिए।
mbomb007

2
क्या आप हमें पहले उदाहरण के लिए केवल दो संभावित यात्रा मार्ग के लिए दूरी दे सकते हैं?
mdahmoune

जवाबों:


1

PowerShell विंडोज के लिए, 376 367 बाइट्स

एक आलसी आदमी की तरह, मैं हर शेल्फ पर नहीं जाता, मैं एक स्टोर में एयर कंडीशनर से एयर कंडीशनर तक जाता हूं। मेरा मानना ​​है कि मैंने हर एयर कंडीशनर में जाने वाले स्टोर पर यात्रा की।

$f={param($m,$d,$o=@{})$w=(($l=$m-split"
")|% le*|sort)[-1]
$m=($l|% *ht $w)-join"
"
if(!$o.$m-or$o.$m-ge$d-and$m-match'(?s)X.*S|S.*X'){$o.$m=$d++
$n=-split")X(S )X(.{$w}S S)X( S.{$w})X("|%{sls "(?s)^(.*$_.*)$" -inp $m -a|% m*|%{($_.Groups-replace'S',' ')[1,2]-join'S'}}
$d=(($n+,($m-replace"(?s)(?<=S(.{$w})?) | (?=(.{$w})?S)",'S')*!$n)|%{&$f $_ $d $o}|sort)[0]}+$d}

इसे ऑनलाइन आज़माएं!

unrolled:

$f={
    param($map,$distance,$o=@{})
    $lines = $map-split"`n"
    $width = ($lines|% length|sort)[-1]
    $map = ($lines|% padRight $width)-join"`n"                              # to rectangle

    if(!$o.$map -or $o.$map-ge$distance -and $map-match'(?s)X.*S|S.*X'){
        $o.$map = $distance++                                               # store a map to avoid recalculations
        $n = -split")X(S )X(.{$width}S S)X( S.{$width})X("|%{               # search a nearest X in 4 directions
            select-string "(?s)^(.*$_.*)$" -InputObject $map -AllMatches|% Matches|%{
                ($_.Groups-replace'S',' ')[1,2]-join'S'                     # start a new segment (reset all S and replace the nearest X by S)
            }
        }
        $stepMore = $map-replace"(?s)(?<=S(.{$w})?) | (?=(.{$w})?S)",'S'
        $n += ,$stepMore*!$n                                                # add a step if X was not found
        $distance=($n|%{&$f $_ $distance $o}|sort)[0]                       # recursive repeat
    }

    +$distance
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.