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


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.