টিক টাক টরাস এর সর্বোত্তম গেমস


31

এই চ্যালেঞ্জটি টিক ট্যাক টো খেলাটি সম্পর্কে, তবে এটি একটি টরাস উপর খেলে।

কিভাবে খেলতে হবে

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

টিক টাক টরাস

টর্স টিকি টো এর নিয়মগুলি নিয়মিত টিক ট টের মতো। প্রতিটি প্লেয়ার এক্স এবং ওএসকে একসাথে রাখে। একটি সারিতে 3 টি একই চিহ্ন সহ প্রথমটি, একটি কলাম বা একটি তির্যক জয়যুক্ত।

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

খেলোয়াড় 1 (এক্স) জিতেছে কারণ একটি ভাঙ্গা তিরুটিতে 3 এক্স রয়েছে

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

অনুকূল গেমস

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

অনুকূল কৌশলটি সত্যিই সহজ:

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

প্রতিটি অনুকূল গেমটি হ'ল 7 টি চাল নিয়ে গঠিত হয় এবং এই চালগুলি নিম্নলিখিত উপায়ে বর্ণনা করা যায়:

  1. প্লেয়ার বোর্ডে যে কোনও জায়গায় একটি এক্স রাখে (9 টি পছন্দ)
  2. প্লেয়ার 2 বোর্ডের যে কোনও জায়গায় একটি O রাখে (8 টি পছন্দ)
  3. প্লেয়ার বোর্ডে যে কোনও জায়গায় একটি এক্স রাখে (7 টি পছন্দ)
  4. প্লেয়ার 2 এর পদক্ষেপ জোর করা হতে পারে (1 পছন্দ), যদি না হয় তবে তিনি ওকে যে কোনও জায়গায় রাখেন (6 টি পছন্দ)
  5. প্লেয়ার 1 এর পদক্ষেপ জোর করা হয়েছে (1 পছন্দ)
  6. প্লেয়ার 2 একটি কাঁটাচামচে ধরা পড়েছে (প্লেয়ার 1 দুটি ভিন্ন উপায়ে জিততে পারে), সুতরাং প্লেয়ার 2 প্লেয়ারকে এক উপায়ে ব্লক করতে হবে (2 টি পছন্দ)
  7. প্লেয়ার 1 তার সর্বশেষ পদক্ষেপ রাখে এবং জিতবে (1 টি পছন্দ)

আমাদের প্রস্তাবিত বোর্ডে 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 টি বিভিন্ন অনুকূল গেম রয়েছে। এখানে আপনি একটি সাধারণ অনুকূল খেলা দেখতে পারেন:

একটি অনুকূল গেমের উদাহরণ

আমরা যদি বোর্ডের প্রতিটি কক্ষকে অঙ্কগুলি সহ লেবেল করি তবে আমরা 0-8এই গেমটি অঙ্কগুলি দ্বারা বর্ণনা করতে পারি 3518207। প্রথমে একটি এক্স 5 টি ঘরে (মাঝারি সারি, বাম কলাম) কোষের 1 (মাঝারি সারি, ডান কলাম) এর চেয়ে সেল 1 (উপরের সারি, মাঝের কলাম) এর চেয়ে এক্সের চেয়ে বেশি স্থান রয়েছে ...

এই অঙ্কের স্বরলিপিটি ব্যবহার করে আমরা স্বয়ংক্রিয়ভাবে একটি অর্ডার তৈরি করেছি। এখন আমরা 1728 এর সর্বোত্তম গেমগুলিকে বাছাই করতে পারি এবং আমরা তালিকাটি পাই:

Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
   ...
Game 0674: 3518207
   ...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
   ...
Game 1726: 8765034
Game 1727: 8765043

চ্যালেঞ্জ

এই তালিকাটি আপনার কাজের অংশ। আপনি k0 এবং 1727 এর মধ্যে একটি নম্বর পাবেন এবং আপনাকে kসেই বাছাই করা তালিকার অঙ্কের স্বরলিপিতে গেমটি ফিরিয়ে দিতে হবে ।

একটি ফাংশন বা একটি প্রোগ্রাম লিখুন, যা নম্বরটি k(পূর্ণসংখ্যা) সংবাদদাতা গেমের গণনা করে। আপনি এসটিডিআইএন, কমান্ড-লাইন আর্গুমেন্ট, প্রম্পট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুটটি পড়তে পারেন এবং ফলাফল (7 ডিজিট) একটি পাঠযোগ্য বিন্যাসে (যেমন 0123845বা [0, 1, 2, 3, 8, 4, 5]) মুদ্রণ করতে পারেন বা স্ট্রিং (হিউম্যান রিডেবল ফরম্যাট) বা একটি পূর্ণসংখ্যার (সমস্তটি সম্বলিত) ব্যবহার করে এটি ফিরে আসতে পারেন বেস 10) বা কোনও অ্যারে / তালিকার বিন্যাসে অঙ্কগুলি।

চ্যালেঞ্জের ধরণটি কোড-গল্ফ। অতএব সংক্ষিপ্ততম কোড জিতেছে।


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

@ রানার 1212 সর্বোত্তম কৌশলটি অনেক সরলীকৃত করেছেন। এখনই একমাত্র নিয়ম আপনার প্রতিপক্ষকে অবরুদ্ধ করা যদি আপনি পারেন তবে অন্যথায় যা চান তা করুন।
জাকুব

7
কেবলমাত্র একটি পার্শ্বের মন্তব্য: আসলে এখানে খুব কম অনন্য গেমগুলি সম্ভব। অনুবাদমূলক প্রতিসাম্য প্রথম পদক্ষেপের অবস্থানকে অপ্রাসঙ্গিক করে তোলে (কারণ আপনি সর্বদা আপনার দৃষ্টিভঙ্গিটি কেন্দ্রীভূত করতে পারেন), সুতরাং 9 দ্বারা বিভাজন করুন ... এবং বোর্ডের ঘূর্ণনটি কেবল 2 টি ভিন্ন দ্বিতীয় চাল (তির্যক বা সংলগ্ন বর্গ) তৈরি করে ... সুতরাং সর্বাধিক 48 স্বতন্ত্র গেমস। আপনি যদি প্রতিবিম্বের প্রতিসাম্যকে বিবেচনা করেন তবে এটি আরও নীচে চলে যায়। এই টরাস ভার্সনটি নিয়মিত সংস্করণের চেয়ে অনেক বেশি বিরক্তিকর। গল্ফ দূরে।
orion

@ ওরিওন আসলে টরাসটি মোড় নেয়, আমাদের '0' কে টরাসাস বোর্ডে 'প্রথম' রেকর্ড হিসাবে ভাবতে এবং সাধারণভাবে সমস্ত নয়টি ক্ষেত্রকে আলাদা করতে নিষেধ করে না ... তবুও আমরা গ্রিনউইচে "মেরিডিয়ান 0" থাকার বিষয়ে একমত , পৃথিবীর বিপরীতে আমরা বৃহস্পতিবার যেখানে স্থানে এক পা থাকতে পারি, বুধবার (স্থানীয় সময়ের 24 ঘন্টা পার্থক্য!) জায়গায় এক পা রাখতে পারে - এবং সমস্ত কিছু সত্ত্বেও পৃথিবীটি বৃত্তাকার এবং তার অস্তিত্ব নেই একটি "শুরুর পয়েন্ট" ...
pawel.boczarski

@ রডনি নোপ, এটি একটি, সাত নয়। এটি গণনা করার চেষ্টা করুন।
জাকুবে

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6), 266 308 317 334 341

একটি ফাংশন একটি স্ট্রিং ফিরে। সম্পাদনা ফাংশন এম এর জন্য একটি গাণিতিক সমাধান খুঁজে পেয়েছে (শেষ অবধি!)

F=(n,x=[],M=(a,b,t=-a-b)=>(a-b)%3?a<3&b<3?3+t:a>5&b>5?21+t:12+t:9+t+a%3*3)=>
[for(a of z='012345678')for(b of z)for(c of z)for(d of z) 
a-b&&c-a&&c-b&&(b-(y=M(a,c))?d==y:d-a&&d-b&&d-c)&&(
f=M(c,e=M(b,d)),g=M(a,e),g<f?[f,g]=[g,f]:0,r=a+b+c+d+e,x.push(r+f+g,r+g+f))]
&&x[n]

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

আরও পঠনযোগ্য

F=(n,x=[],
  M=(a,b,t=-a-b)=>(a-b)%3? 
     a<3&b<3?
       3+t // first row
       :a>5&b>5?
          21+t // last row
          :12+t // middle row and diags
     :9+t+a%3*3 // columns
  )=>
  [for(a of z='012345678') // enumerate the first 4 moves
     for(b of z)
       for(c of z)
         for(d of z) 
           a-b&&c-a&&c-b // avoid duplicates
           &&(b-(y=M(a,c))?d==y:d-a&&d-b&&d-c) // and check if d must block a-c or it's free
           &&(
             e=M(b,d), // forced to block b-d
             f=M(c,e),g=M(a,e),g<f?[f,g]=[g,f]:0, // f and g could be in the wrong order
             r=a+b+c+d+e, // start building a return string
             x.push(r+f+g,r+g+f) // store all values in x
  )]&&x[n] // return value at requested position

3

অক্টাভা, 467 369 363 309 297 টি অক্ষর

297:

global t=0*(1:9)m=dec2bin([15;113;897;1170;1316;1608;2370;2216;2580])-48 a;
function g(s,p)global a t m;
if nnz(s)<8&&any((t==1)*m>2)a=[a;s];return;end;q=t==3-p;
(r=sort(~q.*(1:9)*m(:,find([3 1]*([q;t==p]*m)==6)')))||(r=find(~t));
for i=r t(i)=p;g([s i+47],3-p);t(i)=0;end;end;g('',1);f=@(n)a(n+1,:);

একমাত্র প্রাসঙ্গিক পরিবর্তনটি হ'ল আমরা কখনই বর্তমান প্লেয়ারটি জিততে পারি কিনা তা যাচাই করি না, কেবল পরের বারটি জয়ের প্রতিপক্ষের সম্ভাবনা পরীক্ষা করে দেখি । হিসাবে একমাত্র খেলোয়াড় 1 ঘুরিয়ে জিততে পারে ঘুরিয়ে 7 , এই একমাত্র জায়গা যখন অ্যালগরিদম খেলা যে অনুকূল নয় উত্পাদন করবে, কিন্তু এটা যেমন একটি অবস্থা ফিল্টার আউট খুব সহজ। আমরা খেলোয়াড় 1 দ্বারা জিতলে প্রতিটি উত্পন্ন গেমটি কেবল তা যাচাই করে দেখি - যদি তা না হয় তবে 7 এর পরিবর্তনটি ভুল ছিল, তাই আমরা এই গেমটিকে সর্বোত্তম গেমস টেবিলটিতে যুক্ত করি না।

(এই নিয়মের দ্বারা উত্পন্ন গেমগুলি অর্ধেক গেমগুলি মিথ্যা ম turn ম প্লেয়ারে প্লেয়ার 1 এর সর্বদা দুটি খেলোয়াড়কে ব্লক করার দুটি সম্ভাবনা থাকে তবে কেবল একজনই তত্ক্ষণাত তাকে জয়ী করে তুলবে)।

ব্যবহার করুন:

$ octave
octave:1>> source script.m
octave:2>> f(634)
ans = 3270148

অবরুদ্ধ কোডটি দেখতে দেখতে:

 global t=0*(1:9);
 global m=dec2bin([15;113;897;1170;1316;1608;2370;2216;2580])-48;
 global allgames;
 allgames=[];

 function r=canbewon(by)
  global t m
  q=[t==by;t==(3-by)]*m;
  g=(find([3 1]*q==6))';
  r=sort((~(t==by).*(1:9)) * m(:,g));
 end

 function games_starting_with(s)
 global allgames t;
 if 7==numel(s) && any((t==1)*m==3) # it's 7th move and first player won
  allgames=[allgames;s];
  return;
 end;
 poss=(find(~t));                  # for now all free slots are possible
 player=1+mod(numel(s),2);
 moves = canbewon(3-player);
 if numel(moves) poss=moves; end;  # ... no, we must block the other player
 for i=poss
  t(i)=player;
  games_starting_with([s char(i+47)]);
  t(i)=0;
 end
end

games_starting_with('');
f=@(n)(allgames(n+1,:));

1
ছোট ইঙ্গিত: আপনি পুরানো সংস্করণগুলি কাটাতে পারেন যদি তারা একই যুক্তি ব্যবহার করেন যেহেতু এগুলি সম্পাদনা ইতিহাসে সঞ্চিত থাকে তবে সেগুলি এখনও পাওয়া যায়
এক্স 244
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.