Powershell、299 292バイト
マップは長方形であると想定されます。
x
代わりに使用します·
。取得するには·
、スクリプトをASCII(UTF-8ではない)として保存し、x
on を置き換える必要があります·
。
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
天才の駐車場設計者のための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"
}