ค้นหาพื้นที่จอดรถฟรีหลายระดับ


14

คำนำที่เกี่ยวข้องกับเด็ก ๆ

เมื่อใดก็ตามที่ฉันพาลูก ๆ ไปที่สวนสนุกเด็ก ๆ จะรู้สึกประหม่ามากขึ้นเมื่อเราอยู่ใกล้กับสวนสาธารณะด้วยจุดสูงสุดของเส้นประสาทเมื่อเราอยู่ในลานจอดรถและไม่พบที่จอด ดังนั้นฉันจึงตัดสินใจว่าฉันต้องการวิธีในการหาพื้นที่จอดรถที่ใกล้ที่สุดเพื่อลดเวลาที่จอดรถให้น้อยที่สุด

คำแนะนำทางเทคนิค

ลองนึกภาพการเป็นตัวแทนของที่จอดรถแบบนี้:

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

ในการเป็นตัวแทนนี้หมาย*ถึงกำแพงที่·จอดรถฟรีEจุดเข้าและCรถที่จอดอยู่แล้ว ทุกช่องว่างเป็นตำแหน่งที่จอดรถสามารถใช้เพื่อเคลื่อนที่ไปรอบ ๆ ลานจอดรถ ตอนนี้เราจะขยายแนวคิดนี้เป็น 3D เพื่อสร้างที่จอดรถหลายระดับ:

    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ตำแหน่งในชั้นที่สอง

ท้าทาย

ให้รูปแบบของที่จอดรถเหมือนที่แสดงไว้ก่อนหน้านี้เขียนโปรแกรมที่สั้นที่สุดที่คำนวณระยะทางไปยังพื้นที่จอดรถฟรีที่ใกล้ที่สุดดังต่อไปนี้

กฎระเบียบ

  • อินพุตจะเป็นอาร์เรย์ถ่าน 3D หรืออาร์เรย์สตริง 2D หรือเทียบเท่าและเอาต์พุตจะเป็นจำนวนเต็มเดียวที่แสดงถึงจำนวนขั้นตอนที่รถต้องดำเนินการเพื่อไปยังที่จอดรถฟรีที่ใกล้ที่สุด หากคุณได้รับอาร์เรย์ 3D ถ่านดัชนีแรกอาจแสดงถึงจำนวนชั้นและดัชนีที่สองและสามตำแหน่ง (x, y) สำหรับแต่ละชั้น แต่สิ่งนี้ขึ้นอยู่กับคุณ
  • จะไม่มีมากกว่า 9 [1-9]ลาดแสดงโดย
  • รถเริ่มจากEตำแหน่ง (จะมีเพียงหนึ่งจุดเข้าต่อแผนที่) และเคลื่อนที่ไปรอบ ๆ โดยใช้ช่องว่างในหนึ่งในสี่ทิศทางในแต่ละครั้ง: ขึ้นลงซ้ายซ้ายขวา รถยังสามารถก้าวเข้าสู่·ตำแหน่งและ[1-9]ตำแหน่ง
  • การเปลี่ยนตำแหน่ง (ขั้นตอน) ทุกครั้งจะนับเป็น 1 และทุกครั้งที่รถไปจากชั้นหนึ่งไปยังอีกชั้นหนึ่งนับเป็น 3 เนื่องจากรถจะต้องใช้ทางลาด ในกรณีนี้การเคลื่อนไหวจากช่องว่างข้าง a 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)

ทางเลือก

  • คุณสามารถใช้อักขระใดก็ได้ที่คุณต้องการเป็นตัวแทนแผนที่ที่จอดรถเพียงระบุคำตอบของคุณซึ่งเป็นตัวละครที่คุณเลือกและความหมายของมัน

นี่คือดังนั้นโปรแกรม / วิธีการ / แลมบ์ดาที่สั้นที่สุด / ทุก ๆ ภาษาจะชนะ!

หากคุณต้องการความช่วยเหลือเกี่ยวกับขั้นตอนวิธีการโปรดตรวจสอบของฉัน (ungolfed) การดำเนินการใน C #


ที่เกี่ยวข้อง
Charlie

เนื่องจากเรากำลังติดต่อกับนักออกแบบลานจอดรถที่บ้าคลั่งอาจมีทางลาดโดยตรงจากชั้น 1 ถึงชั้น 3? ฉันคิดว่าคุณควรเพิ่มกรณีทดสอบ (ซึ่งอาจสนุกดี) หรืออธิบายว่ามันจะไม่เกิดขึ้น
Arnauld

2
@Arnauld เพิ่ม งานที่ยากจากแอพมือถือ ...
Charlie

1
-1 ไม่มีบล็อคที่มีสีสันหรือเรื่องราวของเด็กในครั้งนี้
Luis Mendo

1
@mazzy ฉันหมายถึงว่าการเพิ่มกรณีทดสอบใหม่กับข้อความของคำถามเป็นงานที่ยากใช้ UI ที่ จำกัด ของ app มือถือ Stack แลกเปลี่ยน ...
ชาร์ลี

คำตอบ:


6

JavaScript (ES6), 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

ลองออนไลน์!

อย่างไร?

ฟังก์ชันเรียกซ้ำg ()ใช้เป็นอินพุต:

  • c : ตัวละครของจุดเริ่มต้นที่เรากำลังมองหาถ้าเราเพิ่งออกจากพื้นหรือเราอยู่ที่จุดเริ่มต้นของกระบวนการ; 0มิฉะนั้น
  • t : จำนวนการเคลื่อนไหวทั้งหมดจนถึงตอนนี้ ( ไม่ได้กำหนดไว้ในขั้นต้น)
  • f , x , y : ตัวชี้ไปที่พื้นปัจจุบันและพิกัดปัจจุบันในชั้นนี้; พวกเขาทั้งหมดไม่ได้กำหนดถ้าเรากำลังมองหาพื้นใหม่

หากถูกกำหนดเราก็คัดลอกไปยังชั้นปัจจุบันF มิฉะนั้นเราต้องมองหาพื้นใหม่และพิกัดใหม่โดยวนซ้ำในแต่ละชั้นและข้ามแต่ละแถวจนกว่าเราจะพบจุดเข้าc :

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

เรากำหนดrเป็นแถวปัจจุบันในชั้นปัจจุบัน:

r = F[Y]

ขั้นตอนต่อไปคือตรวจสอบให้แน่ใจว่ามีการกำหนดเซลล์cที่(x, y)ปัจจุบัน:

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

หากเป็นเช่นนั้นเราจะทำเครื่องหมายว่าเป็นการเข้าชมโดยตั้งค่าเป็นgซึ่งเป็นค่าที่ไม่เรียกใช้การทดสอบที่กำลังจะมาถึง:

r[x] = g

หากcเป็นพื้นที่จอดรถฟรีเราจะหยุดการสอบถามซ้ำ และหากจำนวนการเคลื่อนไหวทั้งหมดต่ำกว่าคะแนนที่ดีที่สุดของเราก่อนหน้านี้เราจะทำการอัพเดตmตามนั้น:

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

ถ้าเราเพิ่งมาถึงพื้นใหม่ ( จะไม่ได้กำหนด ) หรือเป็นพื้นที่ที่เราดำเนินการโทร recursive สำหรับเซลล์รอบแต่ละ

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

มิฉะนั้นถ้าcเป็นเครื่องหมายทางลาด (เช่นตัวเลขที่ไม่ใช่ศูนย์) เราจะดำเนินการเรียกซ้ำแบบซ้ำเพื่อไปยังชั้นใหม่:

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

สุดท้ายเราคืนค่าเซลล์ปัจจุบันเป็นค่าเริ่มต้นเพื่อให้สามารถเข้าชมได้อีกครั้งในเส้นทางการเรียกซ้ำอื่น ๆ :

r[x] = c

3

Kotlin , 768 ไบต์

ใช้ระยะเวลา แทน ·. หวังว่าฉันจะเข้าใจคำตอบของ Arnauld เพราะการสูญเสีย 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

Powershell, 299 292 ไบต์

สันนิษฐานว่าเป็น แผนที่เป็นรูปสี่เหลี่ยมผืนผ้า

มันใช้แทนx ·ที่จะได้รับ·คุณจะต้องบันทึกสคริปต์เป็น ASCII (ไม่ UTF-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

คำอธิบาย

เป็นชนิดของขั้นตอนวิธี pathfinding ลี เพียงสิ่งเดียวที่ชาญฉลาด: 3 ขั้นตอนบนทางลาดจะรับรู้ว่าเป็นรัฐจำลองH->G->F->E


PowerShell สำหรับนักออกแบบลานจอดรถอัจฉริยะขนาด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"
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.