আমার নাইট পদক্ষেপে কাজ করা


16

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

বোর্ডটি তিনটি রঙের সমন্বয়ে গঠিত (যাতে একই রঙটি একটি কিনারা ভাগ না করে), হেক্সাগনগুলির কিনারা খেলোয়াড়দের মুখোমুখি। বোর্ডের কাছে 11 টি ফাইল রয়েছে, যার aমাধ্যমে চিঠিগুলি চিহ্নিত হয় l(চিঠিটি jব্যবহৃত হয় না), এবং 11 টি র‌্যাঙ্ক (যা ফাইলটিতে 60 be বাঁকানো f)। পদমর্যাদার 1মাধ্যমে 6প্রতিটি 11 কোষ রয়েছে, র্যাঙ্ক 79 কোষ আছে, র্যাঙ্ক 87 আছে, এবং তাই। র‌্যাঙ্কে 11ঠিক একটি ঘর রয়েছে: f11 । (যদি এটি সহায়তা করে তবে প্রতিটি স্থানকে খুব প্রশস্ত "ভি" আকৃতি হিসাবে মনে করুন))

বোর্ডের নাইট সহ কেন্দ্রের ঘরে একটি উদাহরণ রয়েছে। বিন্দু দিয়ে চিহ্নিত ঘরগুলি এই নির্দিষ্ট নাইটের আইনী পদক্ষেপ। নাইট একই ধাঁচে "স্বাভাবিক" দাবা, দুই-ডাউন-ও-ওভারে চলে আসে। ষড়ভুজ দাবা পদে, এটি একটি অরথোগোনাল মুভ (একটি প্রান্তের ওপারে), তারপরে একই দিকের একটি তির্যক পদক্ষেপ (একই বর্ণের নিকটতম পদক্ষেপ)। নীচের নাইটের সাথে উদাহরণস্বরূপ, হালকা বাদামীতে একটি অর্থোগোনাল মুভ "আপ" এবং তারপরে নিকটতম হালকা বাদামীতে "উপরে এবং ডান" বা "উপর এবং বাম" একটি তির্যক সরানো থাকে।

গ্লিসস্কির বৈকল্পিক নাইট

Https://commons.wikimedia.org/wiki/File:Glinski_Chess_Knight.svg- এর মাধ্যমে সর্বজনীন ডোমেন থেকে

এই নাইট এফ 6 এ অবস্থিত এবং আইনী পদক্ষেপগুলি এভাবে হয়

c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5

ইনপুট

আমাদের নাইটের প্রারম্ভিক সেলটি দেয় একটি একক ইনপুট। এটি কোনও একক স্ট্রিং "b6"হিসাবে, দুটি স্ট্রিং "b", "6"ইত্যাদির মতো কোনও সুবিধাজনক বিন্যাসে হতে পারে । ইনপুট অক্ষরগুলি বড় হাতের বা ছোট হাতের অক্ষর হতে পারে - আপনার পছন্দ।

আউটপুট

সেই অবস্থানের একটি নাইট তৈরি করতে পারে এমন বৈধ মুভগুলির একটি তালিকা। এটি স্ট্রিংগুলির অ্যারের হিসাবে, একক স্ট্রিং একটি দ্ব্যর্থহীন এবং সামঞ্জস্যপূর্ণ ডিলিমিটার, নিউলাইনগুলি দ্বারা পৃথক স্ট্রিং ইত্যাদি হতে পারে, যা সবচেয়ে সুবিধাজনক। আউটপুটটি অগত্যা বাছাই করা প্রয়োজন হয় না, এবং বড় হাতের বা ছোট হাতের মধ্যে হতে পারে - আপনার পছন্দ।

বিধি

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

উদাহরণ

b6
a3, c4, d5, d9, e7, e8

f6
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5

f11
d8, e8, g8, h8

i1
f2, f3, g4, h4, l2, k3

12
এই সমন্বয় ব্যবস্থাটি শয়তানের কাজ।
মার্টিন এন্ডার

2
@ মার্টিনএেন্ডার পয়েন্টস যদি আপনি হেক্সাগনিতে করেন তবে :)
এরিক আউটগল্ফার

আমি অনুভব করি যে আমি দুটি অক্ষকে অনুভূমিক এবং 60 ডিগ্রী তিরুজের নতুন সংজ্ঞা দিয়ে এইটিকে অন্য ভেক্টর স্পেসে রূপান্তর করতে পেরেছি এবং তারপরে কেবল নিয়মিত চালচলন ব্যবহার করব এবং তারপরে রৈখিক বীজগণিত ব্যবহার করে এটি আবার অনুবাদ করতে পারব, তবে আমি মনে করি যে এটি অতিমাত্রায় জটিল জিনিসগুলি রয়েছে: পি এবং এছাড়াও আমি সম্মত হই যে এই সাইটের চারপাশে আমি স্থানাঙ্কিত সিস্টেমটি সবচেয়ে খারাপ কাজ দেখেছি। : পি
হাইপারনিউটারিনো

উত্তর:


11

জাভাস্ক্রিপ্ট (ES6), 184 বাইট

ফাইলটিকে Fএকটি চরিত্র হিসাবে এবং Rবাক্য গঠন বাক্য গঠনে পূর্ণসংখ্যার হিসাবে র‌্যাঙ্ক নেয় (F)(R)। স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

F=>R=>[...'100124566542'].map((X,i)=>(X-=3-(x=(s='abcdefghikl').search(F)))-7<(Y=('9641001469'[i]||10)-(A=Math.abs)(x-5)+17-2*R)&X+Y>3&X+16>Y&X+Y<27&&s[X]+(22-Y-A(X-5))/2).filter(n=>n)

কিভাবে?

পদক্ষেপ # 1: ফাইল / র‌্যাঙ্ককে কার্তেসিয়ান স্থানাঙ্কে রূপান্তর করুন

আমরা কার্টিজিয়ান স্থানাঙ্ক থেকে ষড়্ভুজাকার দাবা স্থানাঙ্ক রূপান্তর (X, Y) সঙ্গে এক্স মধ্যে [0 .. 10] এবং Y মধ্যে [0 .. 20] :

      00 01 02 03 04 05 06 07 08 09 10
   +----------------------------------
00 |                f11                     F = file (letter)
01 |             e10   g10                  R = rank in [1 .. 11]
02 |          d09   f10   h09               
03 |       c08   e09   g09   i08            F | a b c d e f g h i k l
04 |    b07   d08   f09   h08   k07         --+-----------------------
05 | a06   c07   e08   g08   i07   l06      x | 0 1 2 3 4 5 6 7 8 9 10
06 |    b06   d07   f08   h07   k06         
07 | a05   c06   e07   g07   i06   l05      y = 22 - |x - 5| - 2R
08 |    b05   d06   f07   h06   k05   
09 | a04   c05   e06   g06   i05   l04
10 |    b04   d05   f06   h05   k04   
11 | a03   c04   e05   g05   i04   l03
12 |    b03   d04   f05   h04   k03   
13 | a02   c03   e04   g04   i03   l02
14 |    b02   d03   f04   h03   k02   
15 | a01   c02   e03   g03   i02   l01
16 |    b01   d02   f03   h02   k01   
17 |       c01   e02   g02   i01      
18 |          d01   f02   h01         
19 |             e01   g01            
20 |                f01               

পদক্ষেপ # 2: সরানো ভেক্টরগুলি প্রয়োগ করুন

নীচে কার্টেসিয়ান সিস্টেমে মুভ ভেক্টরগুলির তালিকা রয়েছে:

(-2, +4), (-1, -5), (+3, +1),
(-3, +1), (+1, -5), (+2, +4),
(-3, -1), (+2, -4), (+1, +5),
(-2, -4), (+3, -1), (-1, +5)

আমরা তাদের প্রত্যেককে উত্স স্থানাঙ্কে (x, y) প্রয়োগ করি এবং লক্ষ্য স্থানাঙ্কের একটি তালিকা (এক্স, ওয়াই) পাই ।

পদক্ষেপ # 3: লক্ষ্য স্থানাঙ্ক পরীক্ষা করুন

আমাদের এখন বোর্ডের অভ্যন্তরে কোন লক্ষ্য স্থানাঙ্কগুলি রয়েছে তা যাচাই করতে হবে। এক্স + ওয়াই এবং এক্স - ওয়াই পরীক্ষা করে এটি করা হয় :

এক্স / ওয়াই

নিম্নলিখিত সকল তুলনা সত্য হলে স্থানাঙ্কগুলি বৈধ:

  • এক্স + ওয়াই> 3
  • এক্স + ওয়াই <27
  • এক্স - ওয়াই <7
  • এক্স - ওয়াই> -17

আমরা যাচাই করা উচিত যে এক্স হয় [0 .. 10] । এই স্পষ্টভাবে কারণ সম্পন্ন করা হয় s[X]করা হয় অনির্দিষ্ট যদি এটা না, যা অবশেষে একটি falsy মান ফিল্টার পরার ফলাফল।

পদক্ষেপ # 4: ষড়ভুজ দাবা স্থানাঙ্কে ফিরে রূপান্তর করুন

অবশেষে বৈধ টার্গেটের স্থানাঙ্কগুলি পদক্ষেপ # 1 এ বর্ণিত সূত্রগুলির বিপরীত ব্যবহার করে ষড়ভুজ দাবা স্থানাঙ্কে ফিরে রূপান্তরিত হয়।

পরীক্ষার মামলা


আহ, ষড়্ভুজাকার স্থানাঙ্ক ব্যবস্থাটি ঘুরে দেখার সত্যিই চতুর উপায়। নিস!
অ্যাডমবর্কবর্ক 21

4

ব্যাচ। 403 বাইট

@echo off
set j=a b c d e f g h i k l
set f=0
for %%f in (%j%)do set/af+=1&if %%f==%1 goto l
:l
set j=j%j: =%
set/a"r=6-f,r*=r>>31,r+=%2
for %%s in ("-3 -2" "-3 -1" "-2 1" "2 -1" "3 1" "3 2")do call:c %%~s
exit/b
:c
call:l %2 %1
:l
set/ag=f+%1,s=r+%2,t=g-s
if %g% geq 1 if %g% leq 11 if %s% geq 1 if %s% leq 11 if %t% geq -5 if %t% leq 5 set/a"t=6-g,s-=t*=t>>31"&call echo %%j:~%g%,1%%%%s%%

সমন্বিত সিস্টেমটি সামঞ্জস্য করে, যদিও @ আরনাউল্ডের উত্তরের ভিন্ন উপায়ে। cসাবরুটিন প্রতিটি পদক্ষেপ আয়না প্রতিফলন চেষ্টা করে প্রতিসাম্য সুবিধা নেয়। (আমিও ঘোরানোর চেষ্টা করেছি তবে এতে অনেক বেশি বাইট লেগেছে))


3

জাভাস্ক্রিপ্ট (ES6), 184 বাইট

(s,t,j=' abcdefghikl',f=j.search(s),r=f<6?t:t+f-6)=>[...'120405..162645'].map((c,i)=>[(i>>1)-3+f,c-3+r]).filter(([f,r])=>f>0&f<12&r>0&r<12&f-r<6&r-f<6).map(([f,r])=>j[f]+(f<6?r:r+6-f))

আমি ভেবেছিলাম যে আমি আমার ব্যাচের সমাধানটি ES6 এর সাথে কীভাবে তুলনা করব তা পোর্ট করব ... আমি আশা করিনি যে এটি এত কাছাকাছি হবে ...


3

সিজেম, 77

1Z2W2Z]_Wf*+2/_Wf%+[r('a-_9>-_6-We>@~+]f.+{_~m5++B,-!},{~1$6-We>-\_8>+'a+\S}/

এটি অনলাইনে চেষ্টা করুন

সংক্ষিপ্ত বিবরণ:

আমি একটি স্থানাঙ্কিত সিস্টেম ব্যবহার করছি যা বাম দিকে a..f এবং ১..6 এর মতো দেখায়, বাঁকানো ছাড়াই প্রসারিত হয়, সংখ্যার সাথে প্রতিস্থাপন করা অক্ষর এবং পরিবর্তিত হয় 0-ভিত্তিক (বি 3 → [1 2], জি 1 → [6 1], কে 3 → [9 6])। এই সিস্টেমে আপেক্ষিক চলনগুলি হ'ল [1 3], [2 -1], [2 3] এবং সেগুলির প্রতিচ্ছবি (নেতিবাচক এবং অদলবদল, যেমন [1 3] → [-1 -3], [3 1], [- 3 -1])। ফলস্বরূপ [xy] অবস্থানটি iff [xyz] valid [0 1 .. 10] যেখানে z = x-y + 5 বৈধ।


মজাদার. সুতরাং আপনি সেই সমন্বিত সিস্টেমে ইনপুটটি অনুবাদ করেন, গণনা সম্পাদন করুন এবং তারপরে ফিরে অনুবাদ করবেন? ঝরঝরে।
অ্যাডমবর্কবার্ক

@ অ্যাডমবার্কবার্ক অনেক বেশি, হ্যাঁ
আদিতসু

1

ডায়ালগ এপিএল, 72 বাইট

(6=|×/t,-/t←↑j[a⍳⊂⍞]-j←⊃,/i,¨¨↓∘i¨i-6)/a←⊃,/(11⍴⎕a~'J'),∘⍕¨¨⍳¨5+i⌊⌽i←⍳11

চেষ্টা

aসমস্ত বৈধ কক্ষের তালিকা তৈরি করে:'A1' 'A2' ... 'L6'

a ইনপুট এবং আউটপুট উভয় জন্য ব্যবহৃত হয়

x অক্ষের পাশাপাশি এবং y এর সাথে থাকা সিস্টেমে jসম্পর্কিত স্থানাঙ্কগুলির একটি তালিকা তৈরি করেaA6-L1F1-F11

একটি কাল্পনিক তৃতীয় স্থানাংক হ'ল প্রথম দুটির পার্থক্য

যদি ইনপুট সেলটি কর্ডগুলিতে অনুবাদ করা হয় তবে 0 0 0একটি নাইট সেই কক্ষে চলে যেতে পারে যাদের কর্ডগুলির উত্পাদন 6 বা -6 হয়


0

পাইথন 3.6, 149

H='abcdefghikl'
lambda f,r:[H[i]+str(j)for i,j in[(H.find(f)+p%4*s,int(r)+p//4)for p in[9,6,-1,-5,-11,-10]for s in(1,-1)]if 0<i<11if 0<j<12-abs(6-i)]

ফাইল এবং র‌্যাঙ্কের জন্য দুটি স্ট্রিং সহ একটি বেনামি ফাংশন বলা হয়; স্ট্রিংগুলির একটি তালিকা প্রদান করে।

Ungolfed:

def h(f,r):
    H='abcdefghikl'

    A = []
    for p in[9,6,-1,-5,-11,-10]:
        for s in(1,-1):
            i = H.find(f) + p%4*s
            j = int(r) + p//4
            A.append(i, j)

    B = []
    for i,j in A:
        if 0 < i < 11 and 0 < j < 12 - abs(6 - i):
            B.append(H[i] + str(j))

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