ত্রি-মাত্রিক দাবা


26

কারও হতবাক সিদ্ধান্তকে রক্ষার জন্য লোকেরা প্রায়শই বলে যে সেই ব্যক্তি সবার মাথার উপর দিয়ে “ত্রিমাত্রিক দাবা” খেলছে। এখন ত্রিমাত্রিক দাবা খেলার সুযোগ!

বিধি

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

টুকরো মুভমেন্ট

(কম্পাসের দিকনির্দেশগুলি এমন গতিবেগকে নির্দেশ করে যা একটি স্ট্যান্ডার্ড দাবাবোর্ডে ঘটে থাকে, উপরে এবং ডাউন 3 ডি দাবা বোর্ডে উল্লম্বভাবে চলতে বোঝায়)।

  • কিং - এর 26 টি স্কোয়ার রয়েছে যা এটি প্রদত্ত টার্নে যেতে পারে: N, NE, E, SE, S, SW, W, NW; পাশাপাশি উপরে, নীচে এবং উপরে / ডাউন + কম্পাস দিকনির্দেশগুলির মধ্যে একটি।
  • রাণী - রাজার মতো একই দিকে অগ্রসর হতে পারে তবে যতদূর সে সেই দিকগুলিতে চায়।
  • রুক - 6 টি দিকে যেতে পারে: এন, ই, এস, ডাব্লু, আপ এবং ডাউন,
  • বিশপ - এর ভ্রমণের 8 টি ত্রিভুজিক দিক রয়েছে: এনই + আপ / ডাউন, এসই + আপ / ডাউন, এসডাব্লু + আপ / ডাউন, এনডাব্লু + আপ / ডাউন
  • নাইট - 2 স্পেস এক অক্ষ অক্ষরে সরায়, তারপরে 1 স্পেসে অন্য স্থানে চলে। ঠিক নিয়মিত দাবায়ের মতো, নাইটই একমাত্র টুকরা যা অন্য টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো রয়েছে।

পিস টেস্টার

বিভিন্ন টুকরা 3 ডি বোর্ডে কীভাবে সরানো হয় তা দেখতে এই স্নিপেটটি ব্যবহার করুন ( টিপ : *Testকোনও বর্গটি বৈধ পদক্ষেপের ভিত্তিতে কেবল তার সম্পূর্ণ দূরত্বের ভিত্তিতে কোনও বর্গক্ষেত্র বৈধ পদক্ষেপ কিনা তা নির্ধারণ করার জন্য দ্রুত উপায়গুলির জন্য জেএসে ফাংশনগুলি পরীক্ষা করে দেখুন )):

const color = "Black";
const pieces = ["N","B","R","Q","K"];
const urls = ["https://image.ibb.co/gyS9Cx/Black_N.png","https://image.ibb.co/dknnzc/Black_B.png","https://image.ibb.co/kb3hXx/Black_R.png","https://image.ibb.co/hGO5kH/Black_Q.png","https://image.ibb.co/jApd5H/Black_K.png"];
var dragPiece;
var size = 3;
var index = 0;
function start() {
Array.prototype.add = function(a) {return [this[0]+a[0],this[1]+a[1],this[2]+a[2]]};

document.getElementById("n").onchange=function() {
	size = parseInt(this.value);
	var s = document.getElementsByClassName("selected");
	var pos;
	if(s.length > 0) {
		pos = s[0].pos;
	}
	document.body.removeChild(document.body.firstChild);
	createBoards();
	if(pos != null && valid(...pos)) {
	cellAt(...pos).click();
	}
};
createBoards();
}

function createBoards() {
var boards = document.createElement("div");
boards.style.counterReset = "board-count "+(size+1);
boards.name=size;
for(var x = 0;x<size;x++) {
var t = document.createElement("table");
for(var i = 0;i<size;i++) {
  var row = document.createElement("tr");
  row.className="row";
  for(var j = 0;j<size;j++) {
  	var cell = document.createElement("td");
    cell.className = (size+i+j)%2 == 1 ? "black" : "white";
    var im = document.createElement("img");
    im.draggable = true;
    im.ondragstart = function(e) {dragPiece = this;e.dataTransfer.setData("piece",this.parentElement.name);
    this.parentElement.classList.add("start");
    this.classList.add("dragged");
    };
    im.ondragend = function(e) {this.parentElement.classList.remove("start");this.classList.remove("dragged");};
    im.hidden = true;
    cell.appendChild(im);
    cell.pos = [j,i,x];
    cell.ondragover = function(e) {e.preventDefault();};
    cell.ondragenter = function(e) {this.classList.add("drag");};
    cell.ondragleave = function(e) {this.classList.remove("drag");};
    cell.ondrop = function(e) { e.preventDefault();this.classList.remove("drag");
    if(this != dragPiece.parentElement && this.firstChild.hidden ){
    dragPiece.hidden=true;
    setPiece(this,e.dataTransfer.getData("piece"));
    }
    
    };
    cell.onclick = function() {
    if(this.firstChild.hidden == false && this.classList.contains("selected")) {
		index++;
    	if(index == pieces.length) index = 0;
    }
     	setPiece(this,pieces[index]);
    };
  
    
    row.appendChild(cell);
  }
  t.appendChild(row);
  }
  boards.appendChild(t);
  }
  document.body.insertBefore(boards,document.body.firstChild);
}



function clearHighlighted() {
	var sel =  document.getElementsByClassName("highlighted");
     while(sel.length > 0) {
     	sel[0].classList.remove("highlighted");
     }
}

function setPiece(cell,piece) {
var s=document.getElementsByClassName("selected");
if(s.length > 0){ s[0].firstChild.hidden=true;s[0].classList.remove("selected");}
cell.classList.add("selected");
cell.firstChild.hidden = false;
cell.name = piece;
     	cell.firstChild.src = urls[index];
     clearHighlighted();
     	showMoves(cell,piece);
}

function showMoves(cell,piece) {
	if(piece=="K") selector(cell,kingTest)
	else if(piece=="N") selector(cell,knightTest);
	else if(piece=="Q") selector(cell,queenTest);
	else if(piece=="R") selector(cell,rookTest);
	else if(piece=="B") selector(cell,bishopTest);
}

function cellAt(col,row,board) {
	return document.body.firstChild.children[board].children[row].children[col];
}

function valid(col,row,board) {
	return 0<=col && col<size && 0<=row && row<size && 0<=board && board<size;
}

function select(cell) {
if(cell != null && cell.firstChild.hidden) cell.classList.add("highlighted");
}



function rookTest(dist) {
	var d = [].concat(dist).sort();
	return d[0] == 0 && d[1] == 0;
}

function knightTest(dist) {
	var d = [].concat(dist).sort();
	return d[0] == 0 && d[1] == 1 && d[2] == 2;
}

function kingTest(dist) {
	return dist[0] <= 1 && dist[1] <= 1 && dist[2] <= 1;
}

function bishopTest(dist) {
	return dist[0]==dist[1] && dist[1]==dist[2];
}

function queenTest(dist) {
	var d = [].concat(dist).sort();
	return rookTest(dist) || bishopTest(dist) || (d[0]==0 && d[1]==d[2]) ;
}

function dist(cell,x,y,z) {
	return [Math.abs(cell.pos[0]-x),Math.abs(cell.pos[1]-y),Math.abs(cell.pos[2]-z)];
}

function selector(cell,test) {
	for(var i = 0;i<size;i++) {
		for(var j = 0;j<size;j++) {
			for(var k = 0;k<size;k++) {
			if(test(dist(cell,k,j,i))) {
				var c = cellAt(k,j,i);
				if(c != cell) select(c);
			}
			}
			}
			}
	
}
table
{
	padding: 10px;
  display:inline-block;
}

table:after
{
  counter-increment: board-count -1;
  content: "("counter(board-count,upper-roman)")";
  float:right;
}

td
{
  width:28px;
  height:28px;
  border: 1px solid;
  cursor: pointer;
}

.black
{
  background-color: rgba(127,127,127,0.6);
}

.white
{
  background-color: white;
}


.start {
background-color: rgba(0,204,0,0.6);
}

.highlighted {
background-color: rgba(0,255,0,0.6);
}

.drag
{
background-color: rgba(0,204,255,0.6);
}


.selected {
background-color: green;
cursor: grab;
}

.selected img
{
  display:block;
}

.dragged {
  cursor: grabbing;
}
<body data-size=3 onload="start()"
<label for="n">Size: </label><select id="n">
<option>2</option>
<option selected>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<div>Click or drag to place the piece. Click on the piece to change its type.</div>
</body>

চ্যালেঞ্জ

একটি এন x এন এক্স এন বোর্ড দেওয়া, সাদা রাজা চেকমেটে আছে কিনা তা নির্ধারণ করুন।

ইনপুট

  • ( Ptionচ্ছিক ) n ≥ 2 - বোর্ডের আকার
  • গেম বোর্ড
    • 1d- 2d- বা 3d- অ্যারে আকারে বা অন্যান্য অনুরূপ ফর্ম্যাট হতে পারে। স্বীকৃতি যে কোনও সাধারণ বিন্যাসে হতে পারে। উদাহরণস্বরূপ, খালি কিউবের জন্য # সহ কে কিউআরবিএন (সাদা) এবং কিকিআরবিএন (কালো)। অথবা, বিভিন্ন মানের জন্য সংখ্যা ব্যবহার করুন।
    • একে অপরের শীর্ষে একাধিক বোর্ড স্তুপীকৃত এবং উপরে থেকে নীচে তালিকাভুক্ত হিসাবে 3D দাবা বোর্ডের কথা ভাবেন। তারপরে, প্রতিটি পৃথক বোর্ড বাম থেকে ডানে, সামনে থেকে পিছনে (কালো দিক থেকে সাদা পাশে) স্বাক্ষরিত হয়।
    • 3 ডি অ্যারে হিসাবে দেওয়া এই 2x2x2 কেসটি কল্পনা করুন:
 [
[[বি কিউ] [##]]
[[বাংলা ভাষায়] [KQ]]
]

"শীর্ষ" বোর্ড: এখানে চিত্র বর্ণনা লিখুন"নীচে" বোর্ড:এখানে চিত্র বর্ণনা লিখুন

আউটপুট

  • বুলিয়ান (সত্যবাদী / মিথ্যা মান) - সত্য যদি সাদা রাজা চেকমেটে থাকে, অন্যথায় মিথ্যা।

কিস্তিমাত

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

সবিস্তার বিবরণী

  • আপনাকে এমন বোর্ড দেওয়া হবে না যেখানে কৃষ্ণ রাজা সাদা বাদশাহকে "চেক" করার চেষ্টা করছেন বা এমন একটি বোর্ড দেওয়া হবে যেখানে উভয় রাজা চেক করে আছেন (অসম্ভব পরিস্থিতি)।

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

  1. এন = 3, [###,n##,#rr],[#b#,###,###],[###,###,bRK]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

    আউটপুট: সত্য

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

    1. সি 2 (আই) - বি 3 (II) এ বিশপ দ্বারা রক্ষিত
    2. বি 2 (আই) - এ 2 এ নাইট দ্বারা রক্ষিত (III)
    3. সি 1 (II) - সি 1 (III) এ রুক দ্বারা রক্ষিত
    4. বি 1 (II) - বি 1 (III) এ রুক দ্বারা রক্ষিত
    5. সি 2 (II) - এ 2 এ নাইট দ্বারা সুরক্ষিত (III)
    6. b2 (II) - a1 (I) এ বিশপ দ্বারা রক্ষিত

রাজা যেহেতু চেক থেকে বাঁচতে পারবেন না, এটি চেকমেট!

  1. এন = 3, [b#b,###,###],[###,###,RNR],[#q#,###,#K#]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

    আউটপুট: মিথ্যা ব্যাখ্যা: রাজা রানীর কাছ থেকে একটি চেক পেয়েছেন, তার সাথে পালাতে বা অবরুদ্ধ করার কোনও পদক্ষেপ নেই। যাইহোক, নাইট রানী ক্যাপচার করতে পারেন।

  2. এন = 3, [#q#,#b#,###],[n##,###,###],[#k#,###,#KB]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইটের হুমকী রানী ধরার বা তার বাদশাহকে সুরক্ষায় সরিয়ে দেওয়ার কোনও উপায় নেই। তবে, তাঁর বিশপকে বি 2 (II) এ সরিয়ে দিয়ে হোয়াইট রানির হুমকি ব্লক করতে পারে।

  1. এন = 4, [####,####,r###,####],[####,#q##,####,####],[##r#,###b,####,BRnn],[####,####,#N##,#KQ#]

    এখানে চিত্র বর্ণনা লিখুন(চতুর্থ) এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

    আউটপুট: সত্য ব্যাখ্যা: এক্ষেত্রে রাজা একজন নাইট এবং একটি রানির কাছ থেকে একটি চেক পেয়ে যাচ্ছেন। যদিও হোয়াইট চেকিং-এর কোনও অংশ ক্যাপচার / ব্লক করতে পারে, তবুও সে দুটিই ক্যাপচার / ব্লক করতে পারে না। অতএব, হোয়াইটকে অবশ্যই তাঁর রাজাকে সরিয়ে নেওয়ার চেষ্টা করতে হবে, তবে তার কোনও বিকল্প নেই।

  2. এন = 3, [###,##b,r#r],[###,###,###],[#k#,###,#K#]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইট চেক করা হয় না, তবে চেক না হয়ে চলার কোনও উপায় নেই। অতএব, এটি অচলাবস্থা, তবে চেকমেট নয়।

  1. এন = 3, [##k,###,r#K],[###,n##,#N#],[###,###,#Q#]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

আউটপুট: সত্য ব্যাখ্যা: হোয়াইট তার রাণীকে রক্ষা করতে তার রানীর সাথে ঝাঁপিয়ে পড়তে চাইবে, তবে তার নাইট পথটি বাধা দিচ্ছে।

  1. এন = 3, [###,###,##q],[###,###,###],[#k#,###,rNK]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

আউটপুট: প্রকৃত ব্যাখ্যা: হোয়াইট রানিকে তার নাইটের সাথে নিতে পারে না, কারণ তখন সেই পলক হোয়াইটের রাজাটিকে পরীক্ষা করবে।

  1. এন = 2, [#q,##],[##,K#]

    এখানে চিত্র বর্ণনা লিখুন(দ্বিতীয়) এখানে চিত্র বর্ণনা লিখুন(আই)

আউটপুট: মিথ্যা ব্যাখ্যা: হোয়াইট তার রাজার সাথে রানীকে বন্দী করতে পারে।

  1. এন = 2, [rq,##],[##,K#]

    এখানে চিত্র বর্ণনা লিখুন(দ্বিতীয়) এখানে চিত্র বর্ণনা লিখুন(আই)

আউটপুট: আসল ব্যাখ্যা: এবার রুক পাহারা দিচ্ছে, তাই রাজা রানীকে ধরতে পারছেন না।

  1. এন = 3, [###,###,#q#],[###,###,###],[#k#,###,BKn]

    এখানে চিত্র বর্ণনা লিখুন(III) এখানে চিত্র বর্ণনা লিখুন(II) এখানে চিত্র বর্ণনা লিখুন(I)

আউটপুট: মিথ্যা ব্যাখ্যা: সাদা রাজা নাইটকে ধরে ফেলে পালাতে পারেন।


কেবল একটি বিশদ, তবে cell.className = (i + j)%2 == 0 ? "black" : "white"স্নিপেটে আরও ভাল হবে না ?
আর্নল্ড

@ আরনাউল্ড লোল, সর্বাধিক সুস্পষ্ট জিনিস ঠিক করতে ভুলে গেছেন।
জিওকাভেল

আমাদের সমর্থনের জন্য সবচেয়ে বড় বোর্ডের আকারটি কী?
ওয়েইজুন চিউ

1
@ ওয়েইজুনঝৌ মূলত আপনার কোডটি কার্যকর হয় কিনা তা দেখার জন্য আপনার যুক্তিসঙ্গত সময় হিসাবে পরীক্ষার কেসগুলি করতে সক্ষম হওয়া উচিত। বৃহত সংখ্যার জন্য এটি কেবল তাত্ত্বিকভাবে অসীম সময় এবং মেমরির দ্বারা কাজ করা প্রয়োজন।
জিওকাভেল

উত্তর:


5

রুবি , 412 413 বাইট

->b,w=2{n=b=~/\n/
g=->h{h[0]-~n*(h[1]-~n*h[2])} 
r=1
(n**6).times{|i|a=b*1     
m=[]
9.times{|j|m<<(j<6?i/n**j%n:m[j-6]-m[j-3])}
x,y,z=v=m[6,3].map{|j|j*j}
d=v.max
e=x+y+z
q=95&o=(t=a[p=g[m[3,3]]]).ord
k=a[s=g[m]].ord
o/32==w&&(o^k>31||k==75)&&((q%8==2&&q%9*d==e||q==81&&x%d+y%d+z%d<1)&&((1...c=d**0.5).map{|j|a[p+g[m[6,3]]/c*j]}+[?#]).max<?A||q==78&&e==5||q==75&&e<4)&&(a[p]=?0;a[s]=t;r&&=w>2?a=~/K/:!f[a,3])}
r}

এটি অনলাইন চেষ্টা করুন! এখন সব পরীক্ষার কেস পরীক্ষা করে দেখুন। 5 কেস (অচলিত কেস।) এ বাগটি ঠিক করতে কোডটি 1 বাইট বাড়িয়েছে

নীচে প্রদর্শিত বিন্যাসে স্ট্রিং হিসাবে ইনপুট প্রয়োজন ল্ল্যাম্বদা ফাংশন। একটি alচ্ছিক দ্বিতীয় প্যারামিটার দেওয়া যেতে পারে, 32 টি এএসসিআইআই কোডের কোন গ্রুপটি পরবর্তী পদক্ষেপের জন্য বিবেচনা করা হবে তা নির্দেশ করে (ডিফল্টরূপে এটি 2 বড় হাতের / সাদা বর্ণের সাথে সম্পর্কিত, তবে ফাংশনটি নিজেকে পুনরাবৃত্তভাবে কল করে 3 ছোট হাতের অক্ষর / কালো অক্ষরের সাথে মিলিয়ে ডাকে। )

পুনরাবৃত্তি স্তর 1: সাদা (সমস্ত কিউব যে কোনও ঘনক) এর জন্য সমস্ত সম্ভাব্য পদক্ষেপ এবং সমস্ত আইনী পদক্ষেপের মাধ্যমে পদক্ষেপের চেষ্টা করে। পুনরাবৃত্তি স্তর 2: প্রতিটি ক্ষেত্রেই এটি কালোদের জন্য সমস্ত সম্ভাব্য পদক্ষেপের মধ্য দিয়ে নিজেকে পদক্ষেপে ডেকে আনে। যদি সাদা রাজা সমস্ত সম্ভাব্য কালো চাল থেকে বেঁচে থাকে তবে এটি সত্য হয়ে যায়। পুনরাবৃত্তি স্তর 1: যদি সমস্ত সম্ভাব্য সাদা পদক্ষেপ এমন পরিস্থিতিতে পরিচালিত করে যেখানে সাদা রাজা সমস্ত সম্ভাব্য কালো চাল থেকে বেঁচে না থাকে, তবে সত্যে ফিরে আসুন (অন্যথায় মিথ্যা।)

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

নিম্নলিখিত পরীক্ষাগুলি প্রতিটি টুকরা জন্য একটি পদক্ষেপ বৈধ কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। x,y,zপ্রতিটি অক্ষের মধ্যে যে দূরত্বের স্কোয়ারগুলি ভ্রমণ করা হয় তা কি। eএর যোগফল (তাই ইউক্যালিডিয়ান দূরত্বের বর্গ) এবং dএটি সর্বোচ্চ। ছোট আকারের ASCII মানগুলিকে বড় হাতের মধ্যে রূপান্তর করতে 95 টুকরো টুকরো টাইপটি Anded করা হয়।

Bishop and Rook (ASCII 66 and 82) For the rook e=1*d. For the bishop e=3*d. 
The same code is used for both with q%9 giving 1 and 3 respectively.

Queen (ASCII 81) x%d+y%d+z%d<1 Each axis must be 0 or d, so this sum must be 0.

For the above pieces, any cubes crossed must be checked to ensure they are empty.

Knight (ASCII 78) e=5

King (ASCII 75) e<4

মন্তব্য করা কোড

->b,w=2{                                                        #board, colour to move (default upcase/white)
  n=b=~/\n/                                                     #n=board size (index of first newline.)
  g=->h{h[0]-~n*(h[1]-~n*h[2])}                                 #Function to calculate position in string based on array of 3d coordinates.
  r=1                                                           #Return value = truthy.
  (n**6).times{|i|                                              #Iterate through n**6 moves (n**3 start cubes and n**3 end cubes.)
    a=b*1      
    m=[]                                                        #Make an empty array for coordinates.                                             
    9.times{|j|m<<(j<6?i/n**j%n:m[j-6]-m[j-3])}                 #Split i into six base n digits for the start and end coordinates. also derive 3 relative move distances.
    x,y,z=v=m[6,3].map{|j|j*j}                                  #v=array of relative distances squared. x,y,z are the 3 individual relative distances squared.
    d=v.max                                                     #Max of x,y,z                                     
    e=x+y+z                                                     #Square of euclidean distance
    q=95&o=(t=a[p=g[m[3,3]]]).ord                               #t=contents of cube to move from. o=ascii value, q=uppercase of o.
    k=a[s=g[m]].ord                                             #k=ascii value of contents of cube to move to.
    o/32==w&&(o^k>31||k==75)&&                                  #If o is in the right 32 byte range (uppercase or lowercase) AND the destination contains the white king or a character not in the same 32 byte range AND...
      ((q%8==2&&q%9*d==e||q==81&&x%d+y%d+z%d<1)&&               #the piece is a rook, bishop or queen with a valid move (as described in the text) AND..
      ((1...c=d**0.5).map{|j|a[p+g[m[6,3]]/c*j]}+[?#]).max<?A|| #the intervening squares are all empty, OR..
      q==78&&e==5||                                             #the piece is a knight and the move has euclidean distance sqrt(5) OR..
      q==75&&e<4)&&                                             #the piece is a king and the move has euclidean distance <4 THEN
      (a[p]=?0;a[s]=t;r&&=w>2?a=~/K/:!f[a,3])                   #put a 0 in the start cube and put the piece in the end cube. If moved piece is black, is the white king still there? AND with return value.
  }                                                             #If moved piece is white, recursively call the f to carry out the black moves. Does the white king NOT survive some black moves? AND with return value.
r}

আপনি 1-অঙ্কের আসকি মান ব্যবহার করে এটি গল্ফ করতে পারেন না? এছাড়াও, আপনার অর্থ কি তৃতীয় অনুচ্ছেদে "অচলাবস্থায় চেকমেট নয়"?
জিওকাভেল

@ জোকাভেল রুবিতে একক ascii মানের সংক্ষিপ্ত প্রতিনিধিত্ব ?A(কোডে একটি উদাহরণ রয়েছে) তাই এটি এখনও 2 বাইট। প্রয়োজনীয় কিছু ভাষার চেয়ে এখনও ভাল "A"। কিছু হেরফেরগুলি ছিল যা অক্ষরগুলির চেয়ে ASCII মানগুলির সাথে আরও ভাল হয়েছিল (বিশেষত o^k>31যা নিশ্চিত করে যে কোনও টুকরোটি একটি বাকী স্কোয়ারে যেতে পারে বা বন্ধুত্বপূর্ণ টুকরো দ্বারা দখল করা একটি তবে শত্রু নয়।)
স্তর নদী সেন্ট

মানে চেকমেট অচল নয়। অচলাবস্থা হ'ল প্লেয়ার চললে রাজা হুমকির মুখোমুখি হন। চেকমেট হ'ল এমন পরিস্থিতি যেখানে খেলোয়াড়টি চললে রাজা হুমকির মুখোমুখি হন এবং তিনি না চালালেও।
লেভেল নদী সেন্ট

আপনি যদি ascii মানগুলির পরিবর্তে int মানগুলি ব্যবহার করেন (অর্থাত্ স্ট্রিংয়ের পরিবর্তে ints এর অ্যারে)?
জিওকাভেল

@ জোকাভেল ইনটগুলি সম্ভবত সংক্ষিপ্ত হবে এবং আমি পরে এটি সংশোধন করতে পারি কারণ এটি নির্দিষ্টভাবে অনুমানের দ্বারা অনুমোদিত। তবে আমি আংশিকভাবে নির্বাচিত ফর্ম্যাটটি নিয়েছিলাম কারণ এটি আরও বেশি মানব পাঠযোগ্য (বিকাশমান সহজ) এবং আংশিক কারণ আমার এই উত্তরটি দ্বারা অনুপ্রাণিত হয়েছিল যা আমার চিন্তাভাবনাটিকে ব্যাপকভাবে প্রভাবিত করেছিল: কোডগল্ফ.স্ট্যাকেক্সেঞ্জের.com
স্তর নদী সেন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.