शतरंज के शूरवीर के लिए सबसे छोटा रास्ता


12

आपके कार्यक्रम को शतरंज बोर्ड के प्रत्येक वर्ग तक पहुंचने के लिए शतरंज शूरवीर चालों की संख्या की गणना करनी चाहिए । इनपुट दो अंतरिक्ष-पृथक पूर्णांक होंगे जो शुरुआती वर्ग के निर्देशांक का प्रतिनिधित्व करते हैं (क्षैतिज फिर ऊर्ध्वाधर समन्वय, प्रत्येक में 0-4 समावेशी)। आपके कार्यक्रम को एक संख्या ग्रिड का उत्पादन करना चाहिए जिसमें प्रत्येक वर्ग तक पहुंचने के लिए शतरंज की नाइट चालों की न्यूनतम संख्या होती है।

उदाहरण

इनपुट

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]

डी:

यह गोल्फ में मेरा पहला प्रयास है। हास्केल के लिए भी कुछ नया।

परीक्षण सूट:

import System.Environment

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

2
साइट पर आपका स्वागत है! अच्छा पहला गोल्फ। यदि आप हास्केल गोल्फ के लिए कुछ अतिरिक्त विचार चाहते हैं, तो codegolf.stackexchange.com/questions/19255/… पर देखें
isaacg

map(\(c,d)->...)$zip ...को छोटा किया जा सकता है zipWith(\c d->...)...
लकोनी

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

जावास्क्रिप्ट, 426 408 बाइट्स

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}

जावास्क्रिप्ट वहाँ पर सबसे संक्षिप्त भाषा नहीं है ... लेकिन मेरी कोडिंग शैली थोड़ी क्रियात्मक भी है।

उपयोग: _(0, 0)आदि


उन सभी को बाहर निकालो varऔर अपने आप को अंतरिक्ष के टन बचाओ ...
Ry-

@ मिनिटेक: यह एक पुनरावर्ती कार्य है ताकि सब कुछ गड़बड़ varहो जाए ... कुछ को हालांकि हटाया जा सकता है, धन्यवाद।
pimvdb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.