একটি বিদ্যমান ফ্রেমওয়ার্ক ব্যবহার করে একটি 2048 এআই প্রোগ্রাম করুন


17

সম্পাদনা: সম্প্রতি, আমার প্রশ্নটি 2048 বট চ্যালেঞ্জের সদৃশ হিসাবে প্রস্তাব করা হয়েছে । আমি জোর দিয়ে বলতে চাই যে এই প্রশ্নটি এই প্রশ্নটি থেকে আলাদা এবং এ প্রশ্নের চেয়ে আলাদাভাবে চিন্তা করার উত্তরগুলির প্রয়োজন হবে। 2048 বট চ্যালেঞ্জ ব্যবহারকারীকে একটি বট তৈরি করতে বলেছিল এবং এটি এক ঘন্টার জন্য চালানো হবে, যেখানে সর্বোচ্চ স্কোর ব্যবহারকারীর স্কোর। অতিরিক্তভাবে, এটির 555 বাইটের সীমা ছিল। আমার চ্যালেঞ্জটি কোডটি খুব কম ঘন ঘন সঞ্চালিত হয়, মাত্র 3 বার। আপনার স্কোরটি সেই তিন বারের গড় স্কোর ব্যবহার করে এবং আপনার গল্ফ কোডের চরিত্রের দৈর্ঘ্যের দ্বারা ভাগ করে গণনা করা হয়। আমার প্রশ্ন এন্ট্রিগুলিকে "চৌকস" হতে উত্সাহিত করে, এবং চেষ্টা না করে এবং নিষ্ঠুর শক্তি দ্বারা সর্বোচ্চ স্কোর অর্জন করতে।

-

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

সম্প্রতি, আমি একটি সাইট তৈরি করেছি যা জনপ্রিয় গেমটি 2048 জাভাস্ক্রিপ্ট ব্যবহার করে নিয়ন্ত্রণ করতে দেয়। আমার সাইটটি এখানে লিঙ্কযুক্ত:

http://thatcoolidea.com/2048

কিভাবে:

একটি এসের সম্পাদক বোর্ডের উপরে অবস্থিত। আপনি এতে কোড রেখেছেন যা প্রতি 250 এমএসে একবার প্রতি চালানো হয়, বা প্রতি সেকেন্ডে 4 বার। একে চক্র বলা হয়।

বোর্ড নিয়ন্ত্রণ করতে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন। আপনি তীর কীগুলি ব্যবহার করতে পারবেন না।

up();            //move up
down();          //move down
left();          //move left
right();         //move right

move(integer);   //integer is a direction. 0:up,1:right,2:down,3:left

getTile(y,x);        //gets the value of the tile in position y,x on the board. See diagram

পাওয়ার পদ্ধতির জন্য বোর্ডের মানচিত্র।

নিম্নলিখিত ভেরিয়েবলগুলি আপনার সুবিধার জন্য সংজ্ঞায়িত করা হয়েছে:

eother        //boolean, alternates every cycle
frozen        //integer, counts how many cycles the board has remained stationary
lastDir       //integer, indicates the last direction that was tried to move in
              //uses same format as the move method above.
startup       //boolean, will always be true when the game first starts
              //you can change it as you wish
a
b             //a b and c are all persistant variables, they do not change each cycle
c             //any other variables defined in the cycle will be reset every time

নিয়মাবলী:

  • কোনও র্যান্ডমনেস নেই, আপনার অবশ্যই যুক্তি ব্যবহার করা উচিত। (হ্যাঁ, আমি জানি কোড কোডটি এলোমেলোভাবে ব্যবহার করে))
  • গেমের ক্রিয়াকলাপগুলিতে কোনও ঝুঁকি বা অন্য উপায়ে প্রতারণা নেই
  • সাধারণত, চক্র প্রতি কেবল একটি সরানো পদ্ধতি কল করার চেষ্টা করুন। আপনি যদি আরও বেশি ব্যবহার করেন তবে এটি ঠিক আছে, তবে এটি অ্যানিমেশন দিয়ে স্ক্রু করে
  • বোর্ডটি অবশ্যই একটি এলোমেলো অবস্থায় শুরু করতে হবে, প্রাক-গেমের রাজ্যের কোনও পরিবর্তন নয়
  • আপনাকে অবশ্যই আপনার পোস্টে কোডটির দুটি সঙ্কুচিত এবং গল্ফযুক্ত সংস্করণ সরবরাহ করতে হবে।
  • আপনাকে অবশ্যই এমন একটি লিঙ্ক সরবরাহ করতে হবে যা ইতিমধ্যে পেস্টবিনের মাধ্যমে পরিবেশন করা আপনার কোডের সঙ্কুচিত সংস্করণটি লোড করে (উদাহরণস্বরূপ, ... thatcoolidea.com/2048?i=pH18GWtu উদাহরণ কোডটি লোড করে))

স্কোরিং:

  • আপনার কোড আমার দ্বারা স্কোর করা হবে।
  • আপনার স্কোরের পার্ট এ হ'ল গোলের নিচে কোডের গড় 3 রান।
  • আপনার স্কোরের পার্ট বি হ'ল আপনার গল্ফ কোডের চরিত্রের দৈর্ঘ্য।
  • আপনার চূড়ান্ত স্কোর পার্ট বি পার্ট বি দ্বারা বিভক্ত

বিজয়ী তাদের কোডটি সাইটের উদাহরণ কোড হিসাবে অমর করে দেবে, যদি তারা চয়ন করে এবং কোডটিতে একটি মন্তব্যে স্বীকৃত হয়।

শুভকামনা! আশা করি আপনি চ্যালেঞ্জটি উপভোগ করবেন।

বর্তমানের উচ্চ স্কোর 225.22 - ফ্রিজার - ব্যবহারকারী3217109


10
আপনি 2048 এর জন্য একটি কাঠামো লিখেছেন তা এই ধরণের চ্যালেঞ্জের জন্য দুর্দান্ত ভয়ঙ্কর এবং খুব সুবিধাজনক তবে আমি দেখতে পাচ্ছি না যে এটি আমাদের বিদ্যমান 2048 এআই চ্যালেঞ্জটিতে ইতিমধ্যে পাওয়া কৌশলগুলিতে কীভাবে প্রভাবিত করে।
মার্টিন এন্ডার

3
ভাল আমি বলতে চাই যে খনিটি আলাদা, কেবলমাত্র আপনাকে একটি কোড বেস ব্যবহার করা প্রয়োজন যা প্রতিটি সম্পাদন কার্যকর হবে। এটি অনেক বেশি ব্যবহারকারী বান্ধব এবং আমার মনে হয় না এটি একটি সদৃশ হবে।
স্যাম ওয়েভার 0

2
অন্য প্রশ্নটি বেশ মৃত দেখাচ্ছে। এখানে কেবলমাত্র চারটি উত্তর এবং এক ঘন্টার সময়সীমা ছিল, তাই আমি উত্তর দিতে যাচ্ছি কারণ এটি সত্যিই দুর্দান্ত দেখাচ্ছে।
krs013

@ সাম্যউইভার আপনার প্রশ্নের শীর্ষে একটি নোট যুক্ত করুন যাতে অন্য প্রশ্নের উত্তরগুলি আপনার প্রশ্নের জন্য বৈধ / প্রতিযোগিতামূলক হবে না এবং তা যাচাইয়ের জন্য একটি মেটা পোস্ট তৈরি করবে explain
rdans

যদি আপনি এটি না করতে পারেন তবে আপনার পুনরায় খোলার জন্য আপনার চ্যালেঞ্জটি পরিবর্তন করতে হবে যেমন নিয়ম / স্কোরিং / বিধিনিষেধ
rdans

উত্তর:


6

সিঙ্কার / শেকার, 65 বাইট

এই আমার । এটি যতটা অন্ধ এবং সহজ তারা আসবে।

if(startup){startup=false;a=0}b=(a++)%4;move(frozen>2?0:b==0?2:b)

Uncompressed (পর) ...

if(startup){startup=false;a=0;}
b=(a++)%4;
move(frozen>2?0:b==0?2:b)

এটি কেবল নীচে, ডান, নীচে, বাম ইত্যাদি পুনরাবৃত্তি করে এবং আটকে গেলে একবার হিট করে gets এটি সর্বদা খুব ভাল করে না, তবে এটি মাঝে মধ্যে 512 সেকেন্ড পাবেন। পরীক্ষার সময় আমার উচ্চ স্কোর ছিল 7520।


আমি এখন স্কোরিং প্রক্রিয়া শুরু করছি! প্রথম প্রবেশের জন্য ধন্যবাদ!
স্যাম ওয়েভার

চূড়ান্ত স্কোর: 67.6! রান 1: 3980 রান 2: 4080 রান 3: 5128 আমি সত্যিই এটি পছন্দ করেছি, আমি ভাবিনি যে আপনি এত ছোট বট দিয়ে এত উচ্চতর স্কোর পেতে পারেন।
স্যাম ওয়েভার

এটি স্থাপনের জন্য ধন্যবাদ! আমি মনে করি এটি দুর্দান্ত। দুঃখের বিষয় যে মানুষ এখনও পর্যন্ত এইভাবে প্রতিক্রিয়া জানিয়েছে। সাধারণত ব্যবহারকারীরা ডুপ্লিকেট প্রশ্নগুলির প্রতি খুব নেতিবাচক হয়ে থাকে, সাধারণত ভাল কারণে।
krs013

ধন্যবাদ কেন! আমি সমর্থন প্রশংসা করি! এই প্রকল্পটির সূচনা তখন থেকেই হয়েছিল যখন এক বন্ধু এবং আমি একরাত রাতে কাজ করে থাকতাম এবং দেখতে চেয়েছিলাম কে আরও ভাল বট করতে পারে। আমি কোডটি দিয়ে অনুসন্ধান করেছি, তবে এটির ভাল করার কোনও উপায় আমি খুঁজে পেলাম না। আমি এটিকে এত সহজ করে তুলতে সহায়তার পদ্ধতি দিয়ে এটি তৈরি করেছি!
স্যাম ওয়েভার

3

ট্র্যাফিক লাইট - 23 21 বাইট

move(frozen&2|eother)

এই লিঙ্কটি।

এটি সর্বশেষে এবং ডানদিকে অগ্রসর হবে, কেবলমাত্র বোর্ড শেষ দুটি পদক্ষেপের জন্য স্থির থাকে, তবে এই ক্ষেত্রে এটি যথাক্রমে নীচে এবং বামে চলে যাবে except

আমার আসল, কার্যত সমতুল্য জমাটি ছিল 23 বাইট দীর্ঘ এবং স্কোর 182.72:

move((frozen&2)+eother)

বোর্ডের দিকে না তাকিয়ে আমি যখন খুব দ্রুত খেলি তখন এটি আমি একই জিনিস করি।
আমি এবং আমার বিড়াল

চমৎকার কাজ. রান 1: 2208 রান 2: 1216 রান 3: 2336 23 বাইট চূড়ান্ত স্কোর: 182.72
স্যাম ওয়েভার

2

ঘূর্ণি - 37 21 17 বাইট - স্কোর: 211.22

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

a=a|0;move(a++%4)

অপ্টিমাইজার aএর সূচনা সংক্ষিপ্ত করতে সাহায্য করেছে ।

স্যাম aএর প্রারম্ভিককরণটি ছোট করতে সহায়তা করেছে , সরানো হয়েছে var

Ungolfed?

var a=a|0;
a++;
move(a%4);

এই এআই সহ আমার শীর্ষ স্কোর 5120।

ফ্রিজার - 12 বাইট - স্কোর: 225.22

এই বটটির অগ্রাধিকার রয়েছে। এটি উপরে যাওয়ার চেষ্টা করে। যদি এটি 'উপরে যেতে পারে তবে ডানদিকে যায়। যদি এটি সঠিকভাবে যেতে না পারে তবে এটি ডাউন হয়ে যায়। এটি নীচে যেতে না পারলে এটি বামে যায়।

move(frozen)

জেমস বন্ড ব্যাখ্যা

এনক্রিপ্ট করা কোডটি ডিক্রিপ্ট করে:

HTMLActuator.prototype.updateScore=function (score) {score*=9989800000;
  this.clearContainer(this.scoreContainer);

  var difference = score - this.score;
  this.score = score;

  this.scoreContainer.textContent = this.score;

  if (difference > 0) {
    var addition = document.createElement("div");
    addition.classList.add("score-addition");
    addition.textContent = "+" + difference;

    this.scoreContainer.appendChild(addition);
  }
}

অপ্টিমাইজারের উচিত তার ডিক্রিপ্টেড কোডটি গল্ফ করা উচিত। এটি # অপটিমাইজ করা যেতে পারে।


আপনি আসলে aখুব সংজ্ঞা দিতে হবে। যাতে কোড দৈর্ঘ্যে যুক্ত করা উচিত।
অপটিমাইজার

দুর্ভাগ্যক্রমে, ব্যাকএন্ডটি পুনরায় সেটগুলির মাধ্যমে ভেরিয়েবলগুলি সংরক্ষণ করে, তাই আপনি aএকবার সংজ্ঞা / আরম্ভ করতে পারেন এবং এটি সম্পর্কে ভুলে যেতে পারেন, তবে আপনি যদি ট্যাব / উইন্ডোটি বন্ধ করেন এবং এটিতে ফিরে আসেন, আমি মনে করি না এটি আর কাজ করবে। এজন্য আমাকে আমার উপর (স্টার্টআপ) বিট যুক্ত করতে হয়েছিল।
krs013

1
আপনি ব্যবহার করতে পারেন var a=a|0;move(a++%4)- 21 বাইট
অপ্টিমাইজার

ধন্যবাদ! আমি এর আগে জাভাস্ক্রিপ্ট কখনও ব্যবহার করি নি, তাই আমি এর মতো ভুল করব ...
জিলভিজ

আসলে, এটিকে সংজ্ঞায়িত করার দরকার নেই। এটিকে ব্যাকএন্ডে সংজ্ঞায়িত করা হয়েছে, সুতরাং আপনি aএটি না করেই এটি ব্যবহার করে উল্লেখ করতে পারেনvar a
স্যাম ওয়েভার

1

হ্যাঙ্গার - 20 বাইট

অফিসিয়াল স্কোর: 224.87 - 0.35 পয়েন্ট দ্বারা দ্বিতীয় স্থান

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

b=b|0;move(b++%4||2)
OR
move(startup++%4||2)

@ অপ্টিমাইজারকে সূচনা প্যাটার্ন ধন্যবাদ thanks

আমার 3 টি টেস্ট রানগুলিতে এটি 4956 গড়ে গড়ে 4284, 6352 এবং 4232 স্কোর করেছে। সরকারী পরীক্ষাটি চালানো হলে আমি আপডেট করব।


বিকল্প সংস্করণ যা হ্যাংগুলি থেকে বাইরে (27 বাইট):

b=b|0;move(b++%4||b%997&&2)

একটি হ্যাং ছেড়ে যাওয়ার দরকার নেই, স্কোরটি কেবল সেখানে শেষ করা হবে যেমন খেলা শেষ হয়েছে।
স্যাম ওয়েভার

কিভাবে শেষটি ঝুলন্ত থেকে বেরিয়ে আসে?
krs013

@ krs013 শেষটি প্রতি 4 * 997 চক্রের উপরে একবার উঠে যাবে, সুতরাং যদি চলাচলের একমাত্র উপায় হয় তবে এটি উপরে চলে যাবে।
isaacg

Gotcha। আমি ভাবলাম যদি এমন কিছু হয়; আমি অনুমান করি যে আমি যথেষ্ট দীর্ঘ অপেক্ষা করিনি।
krs013

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