একটি আয়তক্ষেত্রাকার লন কাঁচা


17

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

  
  
  ||||| 
  ||||| 
  ||||| 
 
  

একটি কাঁচা লন একটি অনুরূপ কাঠামো, মূল চরিত্রটি প্রথম চরিত্রের একটি সংক্ষিপ্ত সংস্করণ ব্যতীত।

  
  
  ..... 
  ..... 
  ..... 
 
  

একটি কাটা দুটি লন অক্ষরের চেয়ে পৃথক দুটি পৃথক অক্ষর। =কাঁচের পেছনের অংশ এবং oসামনের অংশ হিসাবে এখানে একটি উদাহরণ রয়েছে :

=o

একটি কাটিয়াটি লনের চারপাশে উল্লম্বভাবে ঘোরাফেরা করবে এবং তার সামনেও ঘোরতে পারে। অ্যানিমেশনের কিছু সময় উপরের কাটিটি নীচের যেকোন মত দেখতে পারে:

=o 
  
o= 
  
o
=
  
=
o

মওয়ারটি নীচের লনে নীচের অবস্থানগুলির যে কোনও সেট থেকে শুরু করতে পারেন। মাওয়াররা oলনের ঘড়ির কাঁটার দিকে গাড়ি চালাত । মাওয়াররা 0ঘড়ির কাঁটার বিপরীতে লনের চারদিকে গাড়ি চালাত।

  =   =
  0   o
=o|||||0=
  ||||| 
=0|||||o=
  o   0
  =   =

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

বাম শীর্ষে মাওয়ার শুরু হওয়ার সাথে সাথে এটি 5x3 লনের প্রাথমিক অগ্রগতিটি দেখায়:

Second 0  Second 1  Second 2  Second 3  Second 4  Second 5  Second 6  Second 7  Second 8  Second 9  Second 10 Second 11 Second 12 Second 13 Second 14 Second 15 Second 16 Second 17 Second 18 Second 19 Second 20 Second 21 Second 22

                                                                  =
=o|||||    =o||||     =o|||     .=o||     ..=o|     ...=o     ....o     ....=     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....     .....
  |||||     |||||     |||||     |||||     |||||     |||||     |||||     ||||o     ||||=     ||||.     ||||.     ||||.     ||||.     ||||.     ||||.     o|||.    =o|||.     =o||.     .=o|.     ..=o.     ...=o     ....=o    .....=o
  |||||     |||||     |||||     |||||     |||||     |||||     |||||     |||||     ||||o     ||||o=    |||o=     ||o=.     |o=..     o=...     o....     =....     .....     .....     .....     .....     .....     .....     .....
                                                                                                                                              =
  

ইনপুট

আপনার ইনপুটটি লনের (দুটি পূর্ণসংখ্যা) মাত্রা হবে।

আউটপুট

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

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

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

যদি সম্ভব হয় তবে একটি ভিজ্যুয়াল সরবরাহ করুন (টিআইও, স্নিপেট, জিআইএফ, ইত্যাদি)

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।


3
দুর্দান্ত চ্যালেঞ্জ! তারের দ্বারা বিরক্ত এমন ব্যক্তির দৃষ্টিকোণ থেকে কথা বলা, আপনি সম্ভবত আপনার তারের উপর দিয়ে
কাটছেন

আমরা কি ধরে নিতে পারি যে আউটপুট উইন্ডোটি লনের সাথে মানানসই আকারের?
অ্যাডম

আপনি যে কোনও কিছুকে মঞ্জুর করতে চাইতে পারেন তা হ'ল সমস্ত উদাহরণের রাজ্যের একটি তালিকা ফিরিয়ে দেওয়া your
অ্যাডম

3
আমরা যদি আমাদের লনটিকে সঠিকভাবে কাঁচা কাটাতে পছন্দ করি? s-media-cache-ak0.pinimg.com/736x/92/5c/7c/…
tuskiomi

3
@ টসকিওমি একই ধারণার উপর ভিত্তি করে আমি কাজগুলিতে আরও একটি চ্যালেঞ্জ পেয়েছি, তবে প্রোগ্রামটি কিভাবে এটি কাটা হয়েছে তার উপর নিয়ন্ত্রণ রাখে :)
স্টিফেন

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6 / নোড.জেএস), 664 525 523 অক্ষর

f=(w,h)=>{Z=require('sleep');c=a=>console.log(a);X=1;Y=2;D='e';N='|';O={'|':[0,-1],'e':[1,0],'s':[0,1],'w':[-1,0]};S=[N,D,'s','w'];q=d=>F[Y+O[d][1]][X+O[d][0]];b=' '.repeat(w+4),U='  ';F=[b,b].concat([...Array(h)].map(x=>U+N.repeat(w)+U)).concat([b,b]).map(x=>x.split``);for(;;){f=F.map(a=>a.concat());f[Y][X]='@';d=O[D];f[Y-d[1]][X-d[0]]='=';c(f.map(x=>x.join``).join`\n`);if(F[Y][X]==N)F[Y][X]='.';d=O[D],f=q(D),R=S[(S.indexOf(D)+1)%4],r=q(R);(r==N)&&((f==' ')||(f=='.'))?D=R:(X+=d[0],Y+=d[1])
Z.msleep(1E3);c('\033[2J')}}

মন্তব্যে সীমাবদ্ধ:

f=(w,h)=>{
  Z = require('sleep');
  c=a=>console.log(a); 
  //mower coordinates
  X = 1;
  Y = 2;
  //mower direction
  D='e'; //n/e/s/w
  N='|';
  //directions with amount of change in [x,y] coordinates
  O = {'|':[0,-1],'e':[1,0],'s':[0,1],'w':[-1,0]};
  //direction short names
  S=[N,D,'s','w'];
  //query for item in specified direction relative to mower
  q=d=>F[Y+O[d][1]][X+O[d][0]];
 //generate field + whitespace
 b=' '.repeat(w+4),U='  ';
 F=[b,b].concat([...Array(h)].map(x=>U+N.repeat(w)+U)).concat([b,b]).map(x=>x.split``);
 for(;;){
    //print the field: 
    //make a copy of the field, so we can paste the mower on top of it
    f=F.map(a=>a.concat());
    //print mower head
    f[Y][X]='@';
    //print mower tail
    d = O[D];
    f[Y-d[1]][X-d[0]]='=';
    c(f.map(x=>x.join``).join`\n`);   
    //-----
    //move the mower
    if(F[Y][X]==N)F[Y][X]='.';//cut the grass if we stand on some
    d=O[D],//how many fields to move forward
        f=q(D),//item in front of mower
        R=S[(S.indexOf(D)+1)%4],//name of direction if we rotate to the right
        r=q(R);//item to right of mower
    //if there is wall in front of me OR cut grass in front of me and uncut on the right, turn right, else go ahead
    (r==N) && ((f==' ') || (f=='.'))?D=R:(X+=d[0],Y+=d[1])
    Z.msleep(1E3);
    c('\033[2J');
};
}
//test script
f(3,3);

দ্রষ্টব্য: আমি মনে করি আমার 'স্লিপ' প্যাকেজটি পাওয়া উচিত এবং নোডেজগুলি স্বাধীন হওয়ার জন্য সেটটাইমআউট দিয়ে পুনর্লিখন করা উচিত


আমি এটি টিআইওতে আটকে দেওয়ার চেষ্টা করেছি (এটি বলছে এটি নোড.জেএস এর জন্য কাজ করে)। কোনও ক্লু কেন এটি কাজ করছে না?
স্টিফেন

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