체스 기사를위한 최단 경로


12

프로그램은 체스 기사 가 체스 보드의 각 광장에 도달 하는 데 필요한 이동 횟수를 계산해야 합니다. 입력은 시작 사각형의 좌표를 나타내는 두 개의 공백으로 구분 된 정수입니다 (수평과 수직 좌표, 각각 0-7 포함). 프로그램은 체스 기사가 각 사각형에 도달하기 위해 필요한 최소 이동 횟수를 포함하는 숫자 그리드를 출력해야합니다.

입력

0 0

산출

03232345
34123434
21432345
32323434
23234345
34343454
43434545
54545456

입력

3 1

산출

21232123
32303232
21232123
34121432
23232323
32323234
43434343
34343434

가장 짧은 코드가 승리합니다.

답변:


4

루비 1.9, 146 151

g=(?9*8+".
")*8
r=->x,a=0{x<0||a<g[x].to_i&&(g[x]=a.to_s;[21,19,12,8].map{|i|r[x+i,a+1];r[x-i,a+1]})}
r[eval gets.split*?++"*10"]
puts g.tr(?.,"")

4

하스켈 , 255 236 231 229 바이트

import Data.List
k x y=unlines[[toEnum$findIndices(elem(i,j))(scanl(\s _->filter(\(z,w)->z`elem`n&&w`elem`n)$(\(a,b)->[(a+c,b+d)|(c,d)<-zip[1,1,-1,-1,-2,-2,2,2][2,-2,2,-2,1,-1,1,-1]])=<<s)[(x,y)]n)!!0+48|j<-n]|i<-n]where n=[0..7]

디:

이것은 골프를 처음 시도한 것입니다. Haskell에게는 다소 새로운 것입니다.

테스트 스위트 :

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let readArgs = map read args
    let out = k (readArgs !! 0) (readArgs !! 1)
    putStr out

2
사이트에 오신 것을 환영합니다! 좋은 첫 골프. Haskell golfing에 대한 추가 아이디어가 필요하면 codegolf.stackexchange.com/questions/19255/…를
isaacg

map(\(c,d)->...)$zip ...로 단축 할 수 있습니다 zipWith(\c d->...)....
Laikoni

2

Windows PowerShell, 178 183 188

filter f($n){if($d[($p=$_)]-gt$n){$d[$p]=$n
12,8,21,19|%{$p+$_
$p-$_}|f($n+1)}}$d=,0*20+(0..7|%{,9*8+0,0})+,0*20
$x,$y=-split$input
20+"$y$x"|f 0
2..9|%{-join$d[(10*$_).."$_`7"]}

두 테스트 사례 모두를 통과합니다.


1

자바 스크립트, 426408 바이트

for(a=[],i=0;i<8;i++){a[i]=[];for(j=0;j<8;j++)a[i][j]=99}m=[[2,1],[2,-1],
[-2,1],[-2,-1],[1,2],[-1,2],[1,-2],[-1,-2]];function s(f,g,e,b){b&&(a[f][g]=0);
for(var b=[],c=0;c<m.length;c++){var d=[f+m[c][0],g+m[c][1]];a[d[0]]&&
a[d[0]][d[1]]&&a[d[0]][d[1]]>e&&(a[d[0]][d[1]]=e,b.push(d))}for(c=0;c<b.length;c++)
s(b[c][0],b[c][1],e+1)}function _(f,g){s(g,f,1,1);for(e="",b=0;b<8;b++)e+=
a[b].join("")+"\n";return e}

JavaScript는 가장 간결한 언어는 아니지만 내 코딩 스타일도 조금 장황합니다.

사용법 : _(0, 0)


그 모든 것들을 꺼내고 var많은 공간을 절약하십시오.
Ry-

@ minitech : 재귀 함수이므로 모든 것을 망칠 var수 있습니다 ... 하지만 일부 는 제거 할 수 있습니다. 감사합니다.
pimvdb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.