দাবা নাইটের সবচেয়ে সংক্ষিপ্ত পথ


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]

ডি:

গল্ফ করার এটাই আমার প্রথম চেষ্টা। হাস্কেলের কাছেও কিছুটা নতুন।

পরীক্ষা স্যুট:

import System.Environment

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

2
সাইটে স্বাগতম! ভাল প্রথম গল্ফ। আপনি যদি হাস্কেল গল্ফিংয়ের জন্য কিছু অতিরিক্ত ধারণা চান, কোডগল্ফ.স্ট্যাকেক্সেঞ্জার
— প্রশ্নগুলি /

map(\(c,d)->...)$zip ...সংক্ষিপ্ত করা যেতে পারে zipWith(\c d->...)...।
— লাইকোনি

2

উইন্ডোজ পাওয়ারশেল, 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ধন্যবাদ যদিও অপসারণ করা যায়।
— pimvdb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.