চাল আমাকে বলুন


28

জ্যাক এবং জেন খুব অল্প সময়ের জন্য দাবা খেলা খেলতে সিদ্ধান্ত নিয়েছে। দুর্ভাগ্যক্রমে, জ্যাক ভিজ্যুয়ালাইজেশনের বদলে খারাপ। তিনি অবশ্যই প্যাড ছাড়া অন্য প্রদত্ত টুকরোটির পক্ষে চালগুলি সম্ভব বলে মনে করেন!

আপনার চ্যালেঞ্জটি হ'ল জ্যাককে প্রদত্ত টুকরার জন্য সম্ভাব্য বিকল্পগুলি খুঁজে পাওয়ার জন্য সহায়তা করা (একটি গিরি ছাড়া অন্য)।

যদি কেউ ভুলে যায় তবে বিভিন্ন টুকরা দ্বারা চিহ্নিত করা হয়:

  • কে: কিং
  • প্রশ্ন: রানী
  • এন: নাইট
  • বি: বিশপ
  • আর: রুক

উদাহরণস্বরূপ, নিম্নোক্ত ইমেজ অনুযায়ী নাইট এ অবস্থিত d4এবং স্থানান্তর করতে পারেন c2, b3, b5, c6, e6, f5, f3, e2। প্রদত্ত ইনপুটটির জন্য:

Nd4

আপনি উত্পাদন করতে হবে:

Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2

এখানে চিত্র বর্ণনা লিখুন

নিয়মাবলী:

  • যতক্ষণ সম্ভব সমস্ত সম্ভাব্য পদক্ষেপ তালিকাভুক্ত হয় আউটপুট ক্রম ততক্ষণ গুরুত্বপূর্ণ নয়
  • সম্ভাব্য পদক্ষেপগুলি হোয়াইটস্পেস, নিউলাইনস বা অন্য কোনও ডিলিমিটার দ্বারা পৃথক করা যায়
  • ইনপুটটি পরামিতি হিসাবে বা মাধ্যমে প্রোগ্রামে যেতে পারে STDIN
  • প্রোগ্রামের সাদা স্থান গণনা করা হবে, সুতরাং এটি সর্বোত্তম ব্যবহার করুন

এটি কোড গল্ফ। (দয়া করে বিশেষভাবে উদ্দেশ্যে তৈরি করা কোনও সরঞ্জাম / ইউটিলিটি ব্যবহার করা এড়াতে দয়া করে)) স্বল্পতম উত্তরটি জেতে!


1
আমি বিশ্বাস করি এটি একটি কোড গল্ফ হিসাবে ঠিক কাজ করবে
জন ডিভোরাক

3
কোড গল্ফ আরও ভাল পছন্দ। স্পষ্টত সর্বদা ভুলে যায়: আমি বুঝতে পারি যে আমরা কোনও ফাংশন বা একটি প্রোগ্রাম জমা দিতে পারি এবং সেই ইনপুট / আউটপুটটি স্টিডিন / স্টাউট বা পরামিতি / রিটার্ন মান হতে পারে। আমি ভাবছি পুনরাবৃত্তি রানির জন্য এখানে দরকারী হতে পারে: f(x)... case "Q": {f("B");f("R")}যদি ফাংশনটির কোনও # অন্তর্ভুক্ত থাকে তবে এগুলি বাইট গণনার অংশ হওয়া উচিত।
স্তর নদী সেন্ট

4
সেই গ্রাফিকের ফন্ট। এক্সডি
সিজেফায়ার

1
সম্ভাব্য পদক্ষেপগুলি কি ফাঁক দিয়ে আলাদা করতে হবে বা নিউলাইনগুলিও ঠিক আছে?
ডেনিস

1
কোন মনোরম জন্য আইনী পদক্ষেপগুলি অন্য যে কোনও অংশের চেয়ে বেশি সংশ্লেষিত হয় (এন পাসেন্ট, তির্যক ক্যাপচারিং এবং 2-বর্গের প্রাথমিক পদক্ষেপ)। সুতরাং আমি ধরে নিই জ্যাকেরও কাস্টলিংয়ের নিয়ম মুখস্থ হয়েছে?
আর্দ্নেউ

উত্তর:


7

গল্ফস্ক্রিপ্ট, 94 93 টি অক্ষর

আমার প্রথম গল্ফস্ক্রিপ্ট প্রোগ্রাম! আমি কী করছিলাম তা না জেনে আমার প্রায় ঘন্টাখানেক ভ্রান্ত হয়ে পড়েছিল, তবে আমি জেদ করেছিলাম এবং আমি মনে করি যে আমি ভাষাটির বেসিকগুলি শিখতে পেরেছি এবং এটি মোটামুটি ভালভাবে গল্ফ করতে পেরেছি।

সম্পূর্ণ গল্ফড :

{}/8,{97+.3$-.*:>8,{49+.4$-.*:^2$+.[3<>^*4=>^=>^*!.2$|]"KNBRQ"8$?=*{[5$3$@]""+p}{;}if}/;;}/];

মন্তব্য করা এবং ভাল উত্স :

{}/              # tIn fIn rIn
8,{97+           #             fTst
  .3$-.*:>       #                  fDif^2 : >
  8,{49+         #                         rTst 
    .4$-.*:^     #                              rDif^2 : ^
    2$+.         #                                     ^>+
    [3<          # These    #                              [validK
     >^*4=       # checks   #                                      validN
     >^=         # do not   #                                             validB
     >^*!        # account  #                                                    validR
     .2$|]       # for null #                                                           validQ]
    "KNBRQ"8$?=  # move;    #                          valid
    *            # * does.  #                          validNotNull
    {[5$3$@]""+p}{;}if  # print? #  fDif^2
  }/;;           #        rIn
}/];

এটি ক্লডিউয়ের উত্তরটির মতো দেখতে পারে, কারণ এটি তৈরি করার সময় আমি তার উত্তরটি, পাশাপাশি আমার (সাবস্ক্রিত) সি সমাধানটি উল্লেখ করেছি। তিনি একটি (তুলনামূলক) জটিল, কার্যকরী গল্ফস্ক্রিপ্ট প্রোগ্রামের একটি ভাল নমুনা সরবরাহ করেছিলেন এবং এটি আমাকে ভাষা সম্পর্কে অনেক কিছু শিখতে সহায়তা করে। তাই ধন্যবাদ, ক্লডিউ!

গল্ফস্ক্রিপ্টে এখনও নতুন হওয়া, আপনার যদি লোকেরা কোনও প্রতিক্রিয়া জানায়, আমি এটি শুনে প্রশংসা করব!


অসাধারণ! ভাল কাজ =)। আপনি আমার চেয়ে 40 অক্ষর আরও কম কীভাবে পেয়েছেন তা দেখতে আমাকে আরও পরে এটি দেখতে হবে have গল্ফস্ক্রিপ্ট মজা না?
ক্লাদিউ

12

পাইথন, 217 212 220 217 213 টি অক্ষর

213-বাইট ম্যাথমেটিকা ​​সমাধান বেঁধেছেন

R=range(8)
def f((p,x,y)):
 for a in R:
    for b in R:
     A,B=abs(a-ord(x)+97),abs(b-ord(y)+49);C=max(A,B);r=(A+B==3and C<3,C<2,A*B<1,A==B,0)
     if(r['NKRBQ'.index(p)],any(r[1:]))[p=='Q']*C:print p+chr(a+97)+chr(b+49)

আমি সমস্ত বৈধ পদক্ষেপ জেনারেট করে শুরু করেছিলাম তবে এটি খুব বেশি বেড়েছে তাই অ্যাথ্রোথটি ম্যাথমেটিকের সাথে বেশ মিল।

>>> f("Nd4")
Nb3
Nb5
Nc2
Nc6
Ne2
Ne6
Nf3
Nf5
>>> f("Qa1")
Qa2
Qa3
Qa4
Qa5
Qa6
Qa7
Qa8
Qb1
Qb2
Qc1
Qc3
Qd1
Qd4
Qe1
Qe5
Qf1
Qf6
Qg1
Qg7
Qh1
Qh8

এই আর্গুমেন্ট টিপল সহ স্ট্রিং চরগুলি থেকে চমৎকার নিষ্কাশন। খুব খারাপ এটি পাইথন 3 এ আর কাজ করে না।
ইভপোক

10

গণিত, 278 272 264 260 215 213 টি অক্ষর

f=(FromCharacterCode@Flatten[Table[c=Abs[#2-x];d=Abs[#3-y];b=c==d;r=#2==x||#3==y;If[Switch[#-75,0,c~Max~d<2,-9,b,7,r,6,b||r,3,!r&&c+d==3],{p,x,y},##&[]],{x,97,104},{y,49,56}]&@@ToCharacterCode@#,1]~DeleteCases~#)&

অবরুদ্ধ সংস্করণ:

f[pos_] := (
  {piece, u, v} = ToCharacterCode@pos;
  board = Flatten[Table[{piece, i + 96, j + 48}, {i, 8}, {j, 8}], 1];
  DeleteCases[
    FromCharacterCode[
      Cases[board, {_, x_, y_} /; Switch[p,
        75, (* K *)
        ChessboardDistance[{x, y}, {u, v}] < 2,
        66, (* B *)
        Abs[u - x] == Abs[v - y],
        82, (* R *)
        u == x || v == y,
        81, (* Q *)
        Abs[u - x] == Abs[v - y] || u == x || v == y,
        78, (* N *)
        u != x && v != y && ManhattanDistance[{x, y}, {u, v}] == 3
        ]
      ]
    ], 
    pos (* remove the input position *)
  ]
)&

ব্যবহারের উদাহরণ:

f["Nd4"]
> {"Nb3", "Nb5", "Nc2", "Nc6", "Ne2", "Ne6", "Nf3", "Nf5"}

অরগোল্ফড সংস্করণ একটি সম্পূর্ণ বোর্ড তৈরি করে এবং এর সাথে সঠিক অবস্থানগুলি নির্বাচন করে Cases, যেখানে গল্ফযুক্ত সংস্করণটি Tableজারি করে অবিলম্বে কমান্ডের অবৈধ পদক্ষেপগুলি ড্রপ করে ##&[], যা কেবল অদৃশ্য হয়ে যায়।


ইনপুট সম্পর্কে শুধু কৌতূহল, তাই না N4d? Nd4পরিবর্তে এটি করা উচিত নয় ?
ডিভনুল

@ ডিভনুল নিশ্চিত, এটি একটি টাইপো। হওয়া উচিত Nd4
মার্টিন ইন্ডার

আজ একটি ChessboardDistance
জ্ঞাত

গাণিতিক / ওল্ফ্রাম ভাষার ডকুমেন্টেশন অনুসারে, "চেসবোর্ড দূরত্ব [u, v] সর্বোচ্চ [আবস [ইউভি]] এর সমতুল্য" " সম্ভবত আপনি পরবর্তী রূপটি ব্যবহার করে অক্ষরগুলি সংরক্ষণ করতে পারেন, বিশেষত যদি আপনি Abs [uv] কে | uv | এর সাথে প্রতিস্থাপন করেন।
মাইকেল স্টারন

@ মিশেলস্টারন ঠিক এটিই আমি গল্ফযুক্ত সংস্করণে করছি;)। এবং দুর্ভাগ্যক্রমে উল্লম্ব বারগুলি Absম্যাথমেটিকাতে কাজ করে না , কারণ তারা বিকল্পকে একটি নিদর্শন হিসাবে চিহ্নিত করে।
মার্টিন ইন্ডার

10

হাস্কেল 225 220 208 205 200 182

f=fromEnum
m[p,a,b]=[[p,c,r]|c<-"abcdefgh",r<-"12345678",let{s=abs$f a-f c;t=abs$f b-f r;g"K"=s<2&&t<2;g"Q"=g"B"||g"R";g"N"=s+t==3&&(s-t)^2<2;g"B"=s==t;g"R"=s<1||t<1}in s+t>0&&g[p]]

ম্যাথামেটিকাকে স্পর্শ করা শক্ত হয়ে উঠবে যখন এতে দাবা চালানো হয়েছে: রোলসেস: (ভাল খেলেছে এম। বেটনার) আমি এগুলি সব ফিরিয়ে নিই। ম্যাথমেটিকাকে ৩১ বলে হারিয়ে!

সর্বশেষ সম্পাদনা: একটি ফাংশন সহ কেস প্রতিস্থাপিত, অনুভূতি ইনলাইন ফিল্টার, আর এন্ট্রি পরাজিত করতে;)

ব্যবহার:

ghci> m "Nd4"
["Nb3","Nb5","Nc2","Nc6","Ne2","Ne6","Nf3","Nf5"]

অগল্ফড ('ইউ' ইনলাইন হওয়ার আগে 208 চর সংস্করণের সাথে মিল রয়েছে):

f=fromEnum -- fromEnum is 'ord' but for all enum types,
           -- and it's in the prelude, so you don't need an extra import.
u piece dx dy= -- piece is the character eg 'K', dx/dy are absolute so >=0.
  dx+dy > 0 && -- the piece must move.
  case piece of
    'K'->dx<2&&dy<2         -- '<2' works because we already checked dx+dy>0
    'Q'->dx<1||dy<1||dx==dy -- rook or bishop move. see below.
    'N'->dx+dy == 3 &&      -- either 2+1 or 3+0. Exclude the other...
         (dx-dy)^2 < 2      -- 1^2 or 3^2, so valid move is '<2', ie '==1'
    'B'->dx==dy             -- if dx==dy, dx/=0 - we checked that. 
                            -- other moves with dx==dy are along diagonal
    _->dx<1||dy<1           -- use _ not 'R' to save space, default case is
                            -- the rook. '<1' saves chars over '==0'.
                            -- Again, dx==dy==0 edge case is excluded.
m[piece,file,rank]=       -- the move for a piece. 'parse' by pattern match.
 filter(                    -- filter...
  \[_,newfile,newrank]->    -- ...each possible move...
    u piece                 -- ...by, as everyone noticed, converting char..
      (abs$f file-f newfile) -- differences to absolute dx, dy differences,..
      (abs$f rank-f newrank)) -- and then using special routines per piece.
    [[piece,newfile, newrank] -- the output format requires these 3 things.
      |newfile<-"abcdefgh",newrank<-"12345678"] -- and this just generates moves.

আপনি কি একটি নিরবচ্ছিন্ন সংস্করণ পোস্ট করতে পারেন? (আপনি অবশ্যই কেউ থাকেন)
ফিটফাট

@ স্যুইশ আমি না করি তবে তা লিখতে আমার আপত্তি নেই।
বাজরঘ

@ সুইশ সম্পন্ন হয়েছে আশা করি আরও বোধগম্য হয়। আপনার কিছু পরিষ্কার করার দরকার আছে কিনা তা জিজ্ঞাসা করুন।
বাজরঘ

দারূন কাজ! প্যাটার্ন ম্যাচিংয়ে এটি ব্যবহার না করা হলে আপনি কিছু অক্ষর সংরক্ষণ করতে পারবেন কেন আপনার pieceতালিকায় যুক্ত হওয়া দরকার [piece,newfile, newrank]?
ফিটফাট

এটি আউটপুট জন্য আছে। আপনি দেখতে পাবেন যে আমি এতে ... 'প্রতিটি সম্ভাব্য পদক্ষেপে ...' তে প্যাটার্ন মেলে না। মূলত আমার এটি ছিল না - দাবা চালগুলি এর প্রয়োজন হয় না - তবে আমি লক্ষ্য করেছি যে প্রশ্নটি এটি চেয়েছিল, এবং অন্য সবাই এটি করেছে, সুতরাং এটি কেবল ন্যায্য।
বাজরঘ

8

বাশ, 238

B={19..133..19}\ {21..147..21};K=1\ {19..21};N='18 22 39 41';R={1..7}\ {2..14..2}0;Q=$B\ $R
a=${1%??};b=$[20#${1:1}-200];c=`eval{,} echo '$'$a`;d=({a..h})
for i in $c -${c// / -};do echo $a${d[$[(i+=b)/20]]}$[i%20];done|grep '[a-h][1-8]$'

কিভাবে এটা কাজ করে

  • ধারণা, একটি সাংখ্যিক মান দ্বারা বোর্ডে প্রতিটি ক্ষেত্রে প্রতিনিধিত্ব করার একটি বেস-20 নম্বর হিসাবে তার স্থানাঙ্ক গ্রহণ এবং 200. বিয়োগ এই উপায় a1হয়ে 20 * 10 + 1 - 200 = 1, h8হয়ে 20 * 17 + 8 - 200 = 148, ইত্যাদি

    এখন, বিশপের সম্ভাব্য পদক্ষেপগুলি (ধনাত্মক বা নেতিবাচক) 19 এর গুণক দ্বারা প্রতিনিধিত্ব করা যেতে পারে - সমান পরিমাণ পদক্ষেপ (+20) এবং বামে (-1) - বা 21 - একই পরিমাণে পদক্ষেপ (+20) ) এবং ডানদিকে (+1)।

    সরানোর পরে চিত্রটির স্থান নির্ধারণ করা কেবল তার আসল অবস্থান এবং গতিবিধির যোগফল। এই নম্বরগুলি যুক্ত করার পরে, আমাদের তাদের বোর্ডের কোনও বৈধ ক্ষেত্রের সাথে মিল রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে।

    যেহেতু বেস (20) সর্বোচ্চ সম্ভাব্য সংখ্যার (8) এর চেয়ে দ্বিগুণের বেশি, তাই যোগফল বোর্ডের চারপাশে মোড়াতে পারে না, উদাহরণস্বরূপ, ভি 1 কে সাতটি ধাপ ডান এবং উপরে সরিয়ে নেওয়া একটি অবৈধ বোর্ডের পজিশনে পরিণত হবে।

  • লাইন

    B={19..133..19}\ {21..147..21};K=1\ {19..21};N='18 22 39 41';R={1..7}\ {2..14..2}0;Q=$B\ $R
    

    ইতিবাচক সংখ্যা দ্বারা প্রতিনিধিত্ব করা টুকরাগুলির সমস্ত সম্ভাব্য পদক্ষেপগুলি গণনা করে।

  • আদেশগুলি

    a=${1%??};b=$[20#${1:1}-200];c=`eval{,} echo '$'$a`;d=({a..h})
    

    দোকানে পরিবর্তনশীল মধ্যে টুকরা শনাক্তকারী একটি , মূল অবস্থান এর সাংখ্যিক উপস্থাপনা ও অক্ষর একটি থেকে অ্যারের মধ্যে

    ধনুর্বন্ধনী প্রসারণের পরে, (দ্বিগুণ মন্দ) eval{,} echo '$'$aহয়ে যায় eval eval echo '$'$a, যা মূল্যায়ন করে, যেমন eval echo $K, যা মূল্যায়ন করে echo 1 19 20 21

  • for i in $c -${c// / -};do …; done সমস্ত সম্ভাব্য আন্দোলন এবং তাদের নেতিবাচক অংশগুলির উপর লুপ করে।

  • echo $a${d[$[(i+=b)/20]]}$[i%20] আন্দোলনের পরে চূড়ান্ত অবস্থান দেয়।

  • grep '[a-h][1-8]$' আমাদের বৈধ বোর্ড অবস্থান আছে তা নিশ্চিত করে।


7

গল্ফস্ক্রিপ্ট, 144 135 টি অক্ষর

আমার পাইথন সমাধানটি গল্ফ করার চেষ্টা চালিয়ে যাওয়ার পরিবর্তে আমি এটিকে গল্ফস্ক্রিপ্টে অনুবাদ করেছি:

{}/49-:y;97-:x;:N;8,{.x-abs:A
8,{.y-abs:B@[\]$1=:C[B
A+3=\3<&2C>B
A*1<B
A=]81N={(;{|}*}{"NKRB"N?=}if
C*{[N
2$97+@49+]''+p}{;}if
A}/;;}/

খুব গল্ফ না করে সোজা অনুবাদ যাতে এটি সম্ভবত আরও দূরে সরিয়ে দেওয়া যায়। নিউলাইন ছাড়াই স্টিডিন থেকে ইনপুট নেয়, এখানে চেষ্টা করে দেখুন (প্রথম দুটি লাইন স্ট্যান্ডিনের নকল করতে হবে)।


ভাল কাজ মনে হচ্ছে! আমি আশা করি যে কেউ একজন ব্রেইনফ * সি কে সমাধানও নিয়ে আসে।
ডিভনুল

6

সি 634 632 629 625 600 অক্ষর

#define F for(;i<4;i++){
#define B ;}break;
#define O x=X,y=Y,
P,X,Y,c,r,x,y,i=0, N[8][2]={{-2,1},{-1,2},{1,2},{2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}},S[4][2]={{1,0},{0,1},{-1,0},{0,-1}},D[4][2]={{-1,1},{-1,-1},{1,1},{1,-1}};
C(){return((0<=c)&(c<8)&(0<r)&(r<9))?printf("%c%c%d ",P,c+'a',r):0;}
M(int*m){c=m[0]+x,r=m[1]+y;C()?x=c,y=r,M(m):0;}
main(int a,char**v){char*p=v[1];P=*p,X=p[1]-97,Y=p[2]-48; switch(P){case 75:F c=S[i][1]+X,r=S[i][0]+Y,C(),c=D[i][1]+X,r=D[i][0]+Y,C()B case 81:F O M(D[i]),O M(S[i])B case 78:for(;i<8;i++){c=N[i][1]+X,r=N[i][0]+Y,C()B case 66:F O M(D[i])B case 82:F O M(S[i])B}}

এটি কীভাবে উন্নত করা যায় সে সম্পর্কে কোনও পরামর্শ? উত্তর জমা দেওয়ার এটি আমার প্রথমবার।


কোড গল্ফ স্বাগতম! শুরুতে, আপনি আপনার কোডের সাদা অংশটি ছিনিয়ে নিতে পারেন। মনে রাখবেন এটি কোড গল্ফ, যা বোঝায় যে সংক্ষিপ্ততম কোডটি জয়ী। সুতরাং আপনার প্রোগ্রামটির আকার হ্রাস করার চেষ্টা করুন।
ডিভনুল

অক্ষর গণনাও আপডেট করতে ভুলবেন না!
ডিভনুল

@ ডিভনুল কি প্রয়োজনীয় স্থান গণনা করছেন?
ক্যালক্রিপ্টো

1
আরও একটি জিনিস: Cটার্নারি অপারেটরটি ?:ব্যবহার করে এবং এর ফেরতের মান ব্যবহার করে ব্যাপকতর সরল করা যেতে পারে printf। ( printfলিখিত অক্ষরের সংখ্যা ফেরৎ, তাই এই ক্ষেত্রে এটি সবসময় অ শূন্য হয়।) C(P,c,r){return(0<=c)&(c<8)&(0<r)&(r<9)?printf("%c%c%d ",P,c+'a',r):0;}। একটি ছোটখাটো সম্পাদনা: এর Mপরে একটি অতিরিক্ত জায়গা রয়েছে ifযা আপনি মুছে ফেলতে পারেন।
ব্যবহারকারী 12205

1
এখনই, আপনি কোনও নতুন লাইন গণনা করছেন বলে মনে হচ্ছে না। তাদের কিছু অপসারণ করা যেতে পারে, অন্যরা পারে না। প্রয়োজনীয় নতুনলাইনগুলি অবশ্যই বাইট গণনায় অবদান রাখতে হবে।
ডেনিস

3

হাস্কেল, 300 269 ​​অক্ষর

31 অক্ষর হারাতে সহায়তার জন্য বাজরঘকে ধন্যবাদ ...

import Data.Char
f x=filter(x#)[x!!0:y|y<-[v:[w]|v<-"abcdefgh",w<-"12345678"],y/=tail x]
a%b=abs(ord a-ord b)
x#y=let{h=(x!!1)%(y!!1);v=(x!!2)%(y!!2);m=max h v;n=min h v}in case(x!!0)of{'N'->m==2&&n==1;'K'->m==1;'B'->h==v;'R'->n==0;'Q'->('R':tail x)#y||('B':tail x)#y}

ম্যাথমেটিকা ​​সংস্করণ হিসাবে একই অ্যালগরিদম। GCI থেকে নমুনা আউটপুট:

*Main> f "Nd4"
["Nb3","Nb5","Nc2","Nc6","Ne2","Ne6","Nf3","Nf5"]
*Main> f "Ni9"
["Ng8","Nh7"]

(আপনি স্যানিটি পরীক্ষা করার জন্য বলেন নি!)


সিনট্যাকটিক সাদা স্থান থেকে মুক্তি পেতে পারেন। আমার উত্তরটি এখানে দেখুন: কোডগল্ফ.স্ট্যাকেক্সেঞ্জারভিউ / সেকশনস / ১৯২৫৫/২ (আরও সুনির্দিষ্ট বলতে চাইলে আপনি let h = d (x !! 1) (y !! 1); ...})
বাজজার্গ

1

হাস্কেল, 446 অক্ষর

import Data.Char
a=[-2,-1,1,2]
b=[-1,1]
d=[1..8]
e=[-8..8]
g=[-1..1]
h 'N' c r=[(c+x,r+y)|x<-a,y<-a,3==(sum$map abs[x, y])]
h 'B' c r=[(c+x*z,r+y*z)|x<-b,y<-b,z<-d]
h 'R' c r=[(c+x,r)|x<-e]++[(c,r+y)|y<-e]
h 'Q' c r=h 'B' c r++h 'R' c r
h 'K' c r=[(c+x,r+y)|x<-g,y<-g]
l s=ord s-96
m n=chr$n+96
k ch (c,r)=ch:m c:[intToDigit r]
f (x,y)=all(`elem`[1..8])[x, y]
i n c r=map(k n).filter(/=(c,r)).filter f$h n c r
j s=i(s!!0)(l$s!!1)(digitToInt$s!!2)

jফাংশন ব্যবহার করে বলা হয়

j "Nd4"

আমি কয়েকমাসে হাস্কেলের সাথে কাজ করি নি, সুতরাং এটি অন্যান্য সমাধানগুলির মধ্যে সবচেয়ে কম হিসাবে শেষ হয় নি, তবে আমি নিশ্চিত যে তৈরির জন্য কিছু অপ্টিমাইজেশান রয়েছে h। আমি এটি কিছুটা ছোট করতে পারি।


1

প্রশ্নোত্তর [ 311 262 অক্ষর]

আরও কিছু চরিত্র হ্রাস করার সম্ভাবনা রয়েছে। আমি এটি পরবর্তী পুনরাবৃত্তিতে হ্রাস করব।

k)o:{n:#m:&(#x)##y;((),x)[m],'n#y}

k)a:`$"c"$(o/)c:+(97;49)+/:!8

k)r:{{|x@<x}'?,/{o[x]y}'[x](|"c"$c)}
k)k:{"c"$(6h$x)+/:(o/)2 3#-1 0 1}
k)n:{"c"$(6h$x)+/:(|:'t),t:o[-1 1;2 2]}
k)b:{"c"$(6h$x)+/:(n,'n),n,'|n:-8+!17}
k)q:{,/(r;b)@\:x}

d:{(`$("rknbq"!(r;k;n;b;q))[x]y)except`$y}
g:{a inter d[x 0]@1_x}

ব্যবহার

দাড়কাক

g"ra1"
`a2`a3`a4`a5`a6`a7`a8`b1`c1`d1`e1`f1`g1`h1

রাজা

g"ka1"
`a2`b1`b2

নাইট

g"na1"
`b3`c2

বিশপ

g"ba1"
`b2`c3`d4`e5`f6`g7`h8

রাণী

g"qa1"
`a2`a3`a4`a5`a6`a7`a8`b1`b2`c1`c3`d1`d4`e1`e5`f1`f6`g1`g7`h1`h8

0

আর, 203 অক্ষর

f=function(p,x,y){x=which((l=letters)==x);X=rep(1:8,8);Y=rep(1:8,rep(8,8));A=abs(X-x);L=abs(Y-y);B=A==L;R=!A|!L;i=switch(p,N=A+L==3&A&L,R=R,B=B,Q=R|B,K=(R|B)&A<2&L<2)&A+L>0;paste(p,l[X[i]],Y[i],sep="")}

অবরুদ্ধ সংস্করণ:

f = function(p,x,y) {
  x = which(letters == x)  # Gives index between 1 and 8.
  X = rep(1:8, 8)          # 1,2,...,7,8,1,2,.... (8x8).
  Y = rep(1:8, rep(8,8))   # 1,1,...2,2,.....,8,8 (8x8).
  dx = abs(X-x)
  dy = abs(Y-y)
  B = (dx == dy)           # Bishop solutions
  R = (!dx | !dy)          # Rock solutions
  i = switch(p,
             N=dx+dy==3 & dx & dx,  # Sum of dist. is 3, dx and dy must be <> 0.
             R=R, 
             B=B, 
             Q=R|B,                 # Queen is merge of rock and bishop.
             K=(R|B) & dx<2 & dy<2  # King's distance is < 2.
             ) & (dx+dy > 0)        # Exclude start field.

  paste(p, letters[X[i]], Y[i], sep="")
}

ব্যবহার:

> f('N', 'a', 3)
[1] "Nb1" "Nc2" "Nc4" "Nb5"

সমাধান এমনকি ভাল পাঠযোগ্য। তবে আমি আর কোডের সাথে অচেনা পাঠকদের জন্য কিছু বন্ধনী এবং মন্তব্য যুক্ত করেছি (উক্ত সংস্করণে)।


0

হাস্কেল (অনুমানমূলক), 248 টি অক্ষর

import Data.Char
f x=filter(o x)[x!!0:y|y<-[v:[w]|v<-"abcdefgh",w<-"12345678"],y/=tail x]
d a b=abs(ord a-ord b)
h x y=(c*(d(x!!1)(y!!1))-(d(x!!2)(y!!2)))+200*c
 where c=d (x!!0)'A'
o x y=elem(chr(h x y))"ਲ਼ੁߏߚߙÈേെ൅ൄൃ൙൪ൻඌඝථ඿౿౾౽౼౻౺౹ಐಏಠಞರಭೀ಼೐ೋೠ೚೰೩"

দুর্ভাগ্যক্রমে, এখনই আমার হাত পেতে পারি প্রতিটি হাস্কেল সংকলকটিতে ইউনিকোড স্ট্রিং লিটারেলের সমস্যা রয়েছে। প্রকৃতপক্ষে কার্যকর (দীর্ঘতর) সংস্করণটি এখানে রয়েছে:

import Data.Char
f x=filter(o x)[x!!0:y|y<-[v:[w]|v<-"abcdefgh",w<-"12345678"],y/=tail x]
d a b=abs(ord a-ord b)
h x y=(c*(d(x!!1)(y!!1))-(d(x!!2)(y!!2)))+200*c
 where c=d (x!!0)'A'
o x y=elem(chr(h x y))"\2611\2625\1999\2010\2009\200\3399\3398\3397\3396\3395\3394\3393\3417\3434\3451\3468\3485\3502\3519\3199\3198\3197\3196\3195\3194\3193\3216\3215\3232\3230\3248\3245\3264\3260\3280\3275\3296\3290\3312\3305"

সংজ্ঞাটি h x y=...হ্যাশ ফাংশন; বৈধ চলনগুলি 41-অক্ষরের স্ট্রিংয়ের অক্ষর সংখ্যায় হ্যাশ করবে। এটি "কেস" বিবৃতি বা সমমানের প্রয়োজন থেকে মুক্তি পেয়ে যায়।

আমি এখনই এই বিষয়ে আরও কাজ করার পরিকল্পনা করছি না। সংক্ষিপ্ত সমাধানের জন্য কেউ আরও সংক্ষিপ্ত ভাষায় হ্যাশ ফাংশন ব্যবহার করতে পারে কিনা তা দেখার মজা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.