मल्टी-लेवल फ्री पार्किंग स्पेस फाइंडर


14

बच्चों से संबंधित परिचय

जब भी मैं अपने बच्चों को एक मनोरंजन पार्क में ले जाता हूं, तो बच्चे अधिक घबरा जाते हैं हम पार्क के करीब होते हैं, तंत्रिका चोटी के साथ जब हम पार्किंग स्थल में होते हैं और पार्क करने के लिए कोई जगह नहीं पाते हैं। इसलिए मैंने तय किया है कि पार्किंग खर्च किए गए समय को कम से कम करने के लिए मुझे निकटतम मुफ्त पार्किंग स्थान खोजने के लिए एक विधि की आवश्यकता है।

तकनीकी परिचय

इस तरह एक पार्किंग स्थल के प्रतिनिधित्व की कल्पना करें:

*****************
*               *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
*               *
**********E******

इस प्रतिनिधित्व में *एक दीवार, एक ·मुफ्त पार्किंग स्थान, एक Eप्रवेश बिंदु और Cएक कार पहले से ही खड़ी है। हर व्हाट्सएप एक स्थिति है जिस कार को पार्क किया जा सकता है वह पार्किंग स्थल पर घूमने के लिए उपयोग कर सकती है। आइए अब इस अवधारणा को 3 डी तक बढ़ाकर बहु-स्तरीय पार्किंग स्थल बनाएँ:

    1st floor            2nd floor            3rd floor            4th floor
*****************    *****************    *****************    *****************
*               1    *               2    *               3    *               *
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ····C··CCCCCC *    * ······C······ *
* ************* *    * ************* *    * ************* *    * ************* *
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ···CCCCCCCCCC *    * ··C·······C·· *
*               *    *               1    *               2    *               3
**********E******    *****************    *****************    *****************

संख्या 1, 2और 3स्तरों के बीच कनेक्शन का प्रतिनिधित्व करते हैं। 1के साथ पहली मंजिल जोड़ता से 1दूसरी मंजिल तो में एक कार स्टेपिंग में 1पहली मंजिल में स्थान पर दिखाई देता 1दूसरी मंजिल में स्थिति।

चुनौती

निम्नलिखित की तरह पार्किंग की एक स्कीम देते हुए, सबसे छोटा प्रोग्राम लिखें, जो निम्नलिखित के अनुसार निकटतम मुक्त पार्किंग स्थान की दूरी की गणना करता है।

नियम

  • इनपुट 3 डी चार सरणी या 2 डी स्ट्रिंग सरणी या समकक्ष होगा, और आउटपुट एक पूर्णांक होगा जो कार को निकटतम मुफ्त पार्किंग स्थान पर पहुंचने के लिए आवश्यक कदमों की संख्या का प्रतिनिधित्व करेगा। यदि आप एक 3 डी चार सरणी प्राप्त करते हैं तो पहला इंडेक्स फ्लोर नंबर और प्रत्येक फ्लोर के लिए दूसरा और तीसरा इंडेक्स (x, y) स्थिति का प्रतिनिधित्व कर सकता है, लेकिन यह आपके ऊपर है।
  • 9 से अधिक रैंप नहीं होंगे, जिनका प्रतिनिधित्व किया जाएगा [1-9]
  • कार Eस्थिति से शुरू होती है (प्रति नक्शे में केवल एक प्रवेश बिंदु होगा) और हर बार चार दिशाओं में से एक में व्हाट्सएप का उपयोग करके घूमता है: ऊपर, नीचे, बाएं, दाएं। कार ·पदों और [1-9]पदों पर भी कदम रख सकती है ।
  • स्थिति का हर परिवर्तन (चरण) 1 के रूप में गिना जाता है, और हर बार कार एक मंजिल से दूसरी कोटि में जाती है, क्योंकि कार को रैंप लेना चाहिए। इस मामले में, एक खाली स्थान के से आंदोलन एक बगल में 1करने के लिए 1अपने आप में क्या है क्योंकि इस आंदोलन कार में प्रकट होता है की वजह से, 3 चरणों के रूप में गिना है 1अन्य फर्श पर स्थिति।
  • कार मैट्रिक्स सीमा से आगे नहीं जा सकती है।
  • जब कार पार्क की जाएगी तो गिनती खत्म हो जाएगी ·। यदि कोई पहुंच से मुक्त पार्किंग स्थान नहीं है, तो आप शून्य, एक नकारात्मक पूर्णांक, एक शून्य मान या एक त्रुटि वापस कर सकते हैं।

उदाहरण

उदाहरण के ऊपर परिणाम 32 होगा, क्योंकि यह चौथी मंजिल पर जाने के लिए सस्ता है और पास के पार्किंग स्थल में पार्क किया जा सकता है 3। तीसरी मंजिल में निकटतम मुक्त पार्किंग स्थान 33 और 34 की दूरी पर हैं।

अन्य उदाहरण:

    1st floor            2nd floor            3rd floor            4th floor
*****************    *****************    *****************    *****************
*               1    *               2    *               3    *               *
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ····C··CCCCCC *    * ······C······ *
* ************* *    * ************* *    * ************* *    * ************* *
* CCCCCCCCCCCCC *    * ·CCCCCCCCCCCC *    * ···CCCCCCCCCC *    * ··C·······C·· *
*               *    *               1    *               2    *               3
**********E******    *****************    *****************    *****************

Answer: 28 (now the parking space in the 2nd floor is closer)

    1st floor            2nd floor            3rd floor            4th floor
*****************    *****************    *****************    *****************
*               1    4               2    5               3    6               *
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ····C··CCCCCC *    * ······C······ *
* ************* *    * ************* *    * ************* *    * ************* *
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ···CCCCCCCCCC *    * ··C·······C·· *
4               *    5               1    6               2    *               3
**********E******    *****************    *****************    *****************

Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)

    1st floor            2nd floor            3rd floor            4th floor
*****************    *****************    *****************    *****************
*               1    *               *    *               3    *               2
* CCCCCCCCCCCCC *    * CCCCCCCCCCCCC *    * ····C··CCCCCC *    * ······C······ *
* ************* *    * ************* *    * ************* *    * ************* *
* CCCCCCCCCCCCC *    * ·CCCCCCCCCCCC *    * ···CCCCCCCCCC *    * ··C·······C·· *
*               *    *               3    *               2    *               1
**********E******    *****************    *****************    *****************

Answer: 16 (now the parking space in the 4th floor is closer)

 1st floor     2nd floor     3rd floor     4th floor     5th floor
************  ************  ************  ************  ************
*CCCCCCCCC 1  *CCCCCCCCC 2  *CCCCCCCCC 3  *·CCCCCCCC 4  *········C *
*          *  *          *  *          *  *          *  *          *
*CCCCCCCCC E  *CCCCCCCCC 1  *CCCCCCCCC 2  *··CCCCCCC 3  *·······CC 4
************  ************  ************  ************  ************

Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)

 1st floor     2nd floor     3rd floor  
************  ************  ************
*CCCCCCCCC 1  *CCCCCCCCC 2  *CCCCCCCCC *
*          *  *          *  *          *
*CCCCCCCCC E  *CCCCCCCCC 1  *CCCCCCCCC 2
************  ************  ************

Answer: -1 (no free parking space)

 1st floor  
************
*          *
*          *
*         E*
************

Answer: -1 (no parking space at all)

 1st floor  
************
* ·····    *
*·      ****
* ····· * E
*********

Answer: -1 (the parking lot designer was a genius)

वैकल्पिक

  • आप पार्किंग लॉट मैप का प्रतिनिधित्व करने के लिए जो भी वर्ण उपयोग कर सकते हैं, बस अपने उत्तर में निर्दिष्ट करें कि आपके चुने हुए अक्षर क्या हैं और उनका क्या मतलब है।

यह , इसलिए प्रत्येक भाषा की जीत के लिए सबसे छोटा कार्यक्रम / तरीका / लैम्ब्डा / जो कुछ भी हो सकता है!

यदि आपको एल्गोरिथ्म में मदद की आवश्यकता है, तो कृपया सी # में मेरे (अनगुल्ड) कार्यान्वयन की जांच करें ।



जब से हम स्पष्ट रूप से पागल पार्किंग लॉट डिजाइनरों के साथ काम कर रहे हैं, एक रैंप सीधे से कह सकते हैं, पहली मंजिल से तीसरी मंजिल तक? मुझे लगता है कि आपको या तो इस तरह के एक परीक्षण मामले को जोड़ना चाहिए (जो कि बहुत मजेदार हो सकता है) या समझाएं कि यह होने वाला नहीं है।
अरनुलद

2
@ अरनल्ड ने जोड़ा। मोबाइल ऐप से एक मुश्किल काम ...
चार्ली

1
-1 कोई रंगीन ब्लॉक या बच्चे की कहानियां इस समय
लुइस मेंडू

1
@mazzy मेरा मतलब था कि प्रश्न के पाठ में एक नया परीक्षण मामला जोड़ना स्टैक एक्सचेंज मोबाइल ऐप के सीमित यूआई का उपयोग करके एक मुश्किल काम था ...
चार्ली

जवाबों:


6

जावास्क्रिप्ट (ईएस 6), 199 बाइट्स

0

a=>(m=g=(c,t,f,x,y,F=f||a.find(r=>r.some((a,i)=>~(y=i,x=a.indexOf(c)))),r=F[y])=>r&&(c=r[x])&&(r[x]=g,c>'z'?m=m<t?m:t:!f|c<1?[0,-1,0,1].map((d,i)=>g(0,-~t,F,x+d,y+~-i%2)):+c&&g(c,t+2),r[x]=c))('E')|m

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

कैसे?

पुनरावर्ती फ़ंक्शन जी () इनपुट के रूप में लेता है:

  • सी : यदि हम सिर्फ एक मंजिल छोड़ चुके हैं या हम इस प्रक्रिया की शुरुआत में हैं तो प्रवेश बिंदु का चरित्र; 0 अन्यथा
  • टी : चाल की कुल संख्या अब तक (शुरू में अपरिभाषित )
  • एफ , एक्स , वाई : वर्तमान मंजिल के लिए एक संकेतक और इस मंजिल में वर्तमान निर्देशांक; यदि हम एक नई मंजिल की तलाश कर रहे हैं तो वे सभी अपरिभाषित हैं

यदि एफ को परिभाषित किया गया है, तो हम इसे वर्तमान मंजिल एफ पर कॉपी करते हैं । अन्यथा, हमें नई मंजिल और प्रत्येक मंजिल पर पुनरावृत्ति करके नए निर्देशांक देखने की जरूरत है, जब तक कि हमें प्रविष्टि c नहीं मिल जाती है :

F = f || a.find(r => r.some((a, i) => ~(y = i, x = a.indexOf(c))))

हम वर्तमान मंजिल में वर्तमान पंक्ति के रूप में r को परिभाषित करते हैं:

r = F[Y]

अगले कदम के लिए यह सुनिश्चित करें कि वर्तमान सेल बनाने के लिए है में (एक्स, वाई) परिभाषित किया गया है:

r && (c = r[x]) && ...

यदि यह है, तो हम इसे g पर सेट करके आए हुए मान के रूप में चिह्नित करते हैं , एक मान जो आगामी परीक्षणों में से किसी को ट्रिगर नहीं करता है:

r[x] = g

यदि सी एक मुक्त पार्किंग स्थान है, तो हम पुनरावृत्ति को रोकते हैं। और अगर चाल की कुल संख्या हमारे पिछले सर्वश्रेष्ठ स्कोर की तुलना में कम है, तो हम अद्यतन मीटर के हिसाब से:

c > 'z' ? m = m < t ? m : t : ...

हम सिर्फ (एक नई मंजिल पर पहुंच गए हैं है अपरिभाषित ) या एक जगह नहीं है, हम प्रत्येक आसपास के सेल के लिए एक पुनरावर्ती कॉल की प्रक्रिया:

!f | c < 1 ?
  [0, -1, 0, 1].map((d, i) =>
    g(0, -~t, F, x + d, y + ~-i % 2)
  )
:
  ...

अन्यथा, यदि एक रैंप मार्कर है (यानी एक गैर-शून्य अंक), तो हम नई मंजिल तक पहुंचने के लिए एक पुनरावर्ती कॉल की प्रक्रिया करते हैं:

+c && g(c, t + 2)

अंत में, हम वर्तमान सेल को उसके प्रारंभिक मूल्य पर पुनर्स्थापित करते हैं ताकि इसे अन्य पुनरावर्तन पथों में फिर से देखा जा सके:

r[x] = c

3

कोटलिन , 768 बाइट्स

इस्तेमाल किया अवधि। के बजाय ·। काश मैं अरनुलद के जवाब को समझता क्योंकि 500 ​​बाइट हारना अच्छा होता।

fun s(l:List<List<CharArray>>)={val b=listOf(l.size-1,l[0].size-1,l[0][0].size-1)
val e=Int.MAX_VALUE
var r=e
var t=listOf(e,e,e)
val d=Array(b[0]+1){Array(b[1]+1){Array(b[2]+1){e}}}
val f={c:Char,n:List<Int>->var a=t
(0..b[0]).map{f->(0..b[1]).map{r->(0..b[2]).map{var s=listOf(f,r,it)
if(l[f][r][it]==c&&!s.equals(n))a=s}}}
a}
fun m(p:List<Int>,c:Int){if(p[0]in 0..b[0]&&p[1]in 0..b[1]&&p[2]in 0..b[2]&&d[p[0]][p[1]][p[2]]>c){d[p[0]][p[1]][p[2]]=c
val h=l[p[0]][p[1]][p[2]]
when(h){' ','E'->(-1..1 step 2).map{m(listOf(p[0],p[1]+it,p[2]),c+1)
m(listOf(p[0],p[1],p[2]+it),c+1)}
'.'->if(r>c)r=c
in '1'..'9'->{val n=f(h,p)
d[n[0]][n[1]][n[2]]=c+2
(-1..1 step 2).map{m(listOf(n[0],n[1]+it,n[2]),c+3)
m(listOf(n[0],n[1],n[2]+it),c+3)}}}}}
m(f('E',t),0)
if(r<e)r
else-1}()

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


2

पॉवर्सशेल, 299 292 बाइट्स

यह माना जाता है कि मानचित्र आयत है

इसके xबजाय उपयोग करता है ·। प्राप्त करने के लिए ·, आपको एएससीआईआई (यूटीएफ -8 नहीं) के रूप में स्क्रिप्ट को बचाने और बदलने की आवश्यकता xहै ·

filter f{$l=($_-split"
")[0].length
$p,$d,$e='x','\d',' '|%{"$_(?=E)|(?<=E)$_|$_(?=[\s\S]{$l}E)|(?<=E[\s\S]{$l})$_"}
for($r=1;$_-notmatch$p;$r++){$m=$_-replace'F','E'-replace'G','F'-replace'H','G'
if($m-match$d){$m=$m-replace$Matches[0],'H'}$m=$m-replace$e,'E'
if($m-eq$_){return -1}$_=$m}$r}

अधूरा और परीक्षण स्क्रिप्ट:

filter f{
    #Write-Host "`nStep:`n$_" # uncomment this to display each step

    $l = ($_ -split "`n")[0].length
    $p,$d,$e = 'x', '\d', ' '| % {"$_(?=E)|(?<=E)$_|$_(?=[\s\S]{$l}E)|(?<=E[\s\S]{$l})$_"}

    for($r = 1;$_ -notmatch $p;$r++) {
        $m = $_ -replace 'F', 'E' -replace 'G', 'F' -replace 'H', 'G'
        if ($m -match $d) {
            $m = $m -replace $Matches[0], 'H'
        }
        $m = $m -replace $e, 'E'

        if ($m -eq $_) {
            return -1
        }

        $_=$m
    }
    $r
}

@(
    , (2, @"
****
*x E
****
"@)
    , (1, @"
****
* xE
****
"@)
    , (1, @"
****
* x*
* E*
****
"@)
    , (1, @"
****
* E*
* x*
****
"@)
    , (-1, @"
****
2 E1
*  *
****
"@)
    , (28, @"
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*               *
**********E******
*****************
*               2
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               1
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               *
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               3
*****************
"@)
    , (16, @"
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*               *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************
"@)
    , (29, @"
************
*CCCCCCCCC 1
*          *
*CCCCCCCCC E
************
************
*CCCCCCCCC 2
*          *
*CCCCCCCCC 1
************
************
*CCCCCCCCC 3
*          *
*CCCCCCCCC 2
************
************
*xCCCCCCCC 4
*          *
*xxCCCCCCC 3
************
************
*xxxxxxxxC *
*          *
*xxxxxxxCC 4
************
"@
    )
    , (-1, @"
************
*          *
*          *
*         E*
************
"@)
    , (-1, @"
************
* xxxxx    *
*x      ****
* xxxxx * E 
*********   
"@)
) | % {
    $e, $m = $_
    $r = $m|f
    "$($e-eq$r): $r $e"
}

आउटपुट:

True: 2 2
True: 1 1
True: 1 1
True: 1 1
True: -1 -1
True: 28 28
True: 16 16
True: 29 29
True: -1 -1
True: -1 -1

16 चरणों के साथ पार्किंग के लिए विस्तारित आउटपुट:

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*               *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*         E     *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*        EEE    *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*       EEEEE   *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*      EEEEEEE  *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*     EEEEEEEEE *
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCC *
*    EEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* ************* *
* CCCCCCCCCCCCCE*
*   EEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCC *
* *************E*
* CCCCCCCCCCCCCE*
*  EEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*               1
* CCCCCCCCCCCCCE*
* *************E*
* CCCCCCCCCCCCCE*
* EEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*              E1
* CCCCCCCCCCCCCE*
* *************E*
* CCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               1
*****************

Step:
*****************
*             EEH
* CCCCCCCCCCCCCE*
* *************E*
*ECCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               H
*****************

Step:
*****************
*            EEEG
* CCCCCCCCCCCCCE*
*E*************E*
*ECCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               G
*****************

Step:
*****************
*           EEEEF
*ECCCCCCCCCCCCCE*
*E*************E*
*ECCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*               F
*****************

Step:
*****************
*E         EEEEEE
*ECCCCCCCCCCCCCE*
*E*************E*
*ECCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxx *
*              EE
*****************

Step:
*****************
*EE       EEEEEEE
*ECCCCCCCCCCCCCE*
*E*************E*
*ECCCCCCCCCCCCCE*
*EEEEEEEEEEEEEEE*
**********E******
*****************
*               *
* CCCCCCCCCCCCC *
* ************* *
* xCCCCCCCCCCCC *
*               3
*****************
*****************
*               3
* xxxxCxxCCCCCC *
* ************* *
* xxxCCCCCCCCCC *
*               2
*****************
*****************
*               2
* xxxxxxCxxxxxx *
* ************* *
* xxCxxxxxxxCxxE*
*             EEE
*****************
True: 16 16

व्याख्या

यह ली पाथफाइंग एल्गोरिथम की तरह है । केवल एक स्मार्ट चीज: रैंप पर 3 कदम एक डमी अवस्था के रूप में महसूस किए जाते हैंH->G->F->E


377 369 बाइट्स एक जीनियस पार्किंग लॉट डिजाइनर के लिए पॉवर्सशेल

पार्किंग डिजाइन एक है 2D string array। मानचित्र के बारे में कोई धारणा नहीं: किसी भी लंबाई के तार, दीवारों के बिना फर्श, एक प्रवेश बिंदु के बिना पार्किंग, बहु-मंजिल और बहु-निकास-रैंप। जीनस लागत + 26% है।

filter f{for($r=1;$_-notmatch$p;$r++){$m=$_-replace'F','E'-replace'G','F'-replace'H','G'
if($m-match$d){$m=$m-replace$Matches[0],'H'}$m=$m-replace$e,'E'
if($m-eq$_){return-1}$_=$m}$r}$g={$l=($args|%{$_|%{$_.length}}|sort)[-1]
$p,$d,$e='x','\d',' '|%{"$_(?=E)|(?<=E)$_|$_(?=[\s\S]{$l}E)|(?<=E[\s\S]{$l})$_"}
(($args|%{$_.PadRight($l,'*')-join"
"})-join"
"+'-'*$l+"
")|f}

अधूरा और परीक्षण स्क्रिप्ट:

filter f{
    #Write-Host "`nStep:`n$_" # uncomment this to display each step

    for($r = 1;$_ -notmatch $p;$r++) {
        $m = $_ -replace 'F', 'E' -replace 'G', 'F' -replace 'H', 'G'
        if ($m -match $d) {
            $m = $m -replace $Matches[0], 'H'
        }
        $m = $m -replace $e, 'E'

        if ($m -eq $_) {
            return -1
        }

        $_=$m
    }
    $r
}

$g = {

    $l = ($args| % {$_| % {$_.length}}|sort)[-1]
    $p,$d,$e = 'x', '\d', ' '| % {"$_(?=E)|(?<=E)$_|$_(?=[\s\S]{$l}E)|(?<=E[\s\S]{$l})$_"}
    (($args| % {$_.PadRight($l, '*') -join "`n"}) -join "`n"+'-' * $l+"`n")|f

}


@(
    , (2, @(, (
                "****",
                "*x E",
                "****"
            )))
    , (1, @(, (
                "****",
                "* xE",
                "****"
            )))
    , (1, @(, (
                "****",
                "* x*",
                "* E*",
                "****"
            )))
    , (1, @(, (
                "****",
                "* E*",
                "* x*",
                "****"
            )))
    , (-1, @(, (
                "****",
                "2 E1",
                "*  *",
                "****"
            )))
    , (28, @(, (
                "*****************",
                "*               1",
                "* CCCCCCCCCCCCC *",
                "* ************* *",
                "* CCCCCCCCCCCCC *",
                "*               *",
                "**********E******"
            ), (
                "*****************",
                "*               2",
                "* CCCCCCCCCCCCC *",
                "* ************* *",
                "* xCCCCCCCCCCCC *",
                "*               1",
                "*****************"
            ), @(
                "*****************",
                "*               3",
                "* xxxxCxxCCCCCC *",
                "* ************* *",
                "* xxxCCCCCCCCCC *",
                "*               2",
                "*****************"
            ), @(
                "*****************",
                "*               *",
                "* xxxxxxCxxxxxx *",
                "* ************* *",
                "* xxCxxxxxxxCxx *",
                "*               3",
                "*****************"
            )))
    , (16, @(, (
                "*****************",
                "*               1",
                "* CCCCCCCCCCCCC *",
                "* ************* *",
                "* CCCCCCCCCCCCC *",
                "*               *",
                "**********E******"
            ), @(
                "*****************",
                "*               *",
                "* CCCCCCCCCCCCC *",
                "* ************* *",
                "* xCCCCCCCCCCCC *",
                "*               3",
                "*****************"
            ), @(
                "*****************",
                "*               3",
                "* xxxxCxxCCCCCC *",
                "* ************* *",
                "* xxxCCCCCCCCCC *",
                "*               2",
                "*****************"
            ), @(
                "*****************",
                "*               2",
                "* xxxxxxCxxxxxx *",
                "* ************* *",
                "* xxCxxxxxxxCxx *",
                "*               1",
                "*****************"
            )))
    , (29, @(, (
                "************",
                "*CCCCCCCCC 1",
                "*          *",
                "*CCCCCCCCC E",
                "************"
            ), @(
                "************",
                "*CCCCCCCCC 2",
                "*          *",
                "*CCCCCCCCC 1",
                "************"
            ), @(
                "************",
                "*CCCCCCCCC 3",
                "*          *",
                "*CCCCCCCCC 2",
                "************"
            ), @(
                "************",
                "*xCCCCCCCC 4",
                "*          *",
                "*xxCCCCCCC 3",
                "************"
            ), @(
                "************",
                "*xxxxxxxxC *",
                "*          *",
                "*xxxxxxxCC 4",
                "************"
            )))
    , (-1, @(, (
                "************",
                "*          *",
                "*          *",
                "*         E*",
                "************"
            )))
    , (-1, @(, (
                "************",
                "* xxxxx    *",
                "*x      ****",
                "* xxxxx * E",
                "*********"
            )))
) | % {
    $e, $m = $_
    $r = &$g @m
    "$($e-eq$r): $r $e"
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.