एक आयताकार लॉन घास काटना


17

एक लॉन को एक आयताकार क्षेत्र के रूप में परिभाषित किया जाता है, जिसमें एक वर्ण दृश्य व्हाट्सएप की दो परतों से घिरा होता है । इसका मतलब है ऊपर की दो लाइनें और नीचे की दो टहनियाँ, और बाईं ओर एक दो स्पेस पैडिंग (दाईं ओर व्हाट्सएप दिखाई देता है, इसलिए आपको इसे शामिल करने की आवश्यकता नहीं है)।

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

एक mowed लॉन एक समान संरचना है, सिवाय इसके कि मुख्य चरित्र पहले चरित्र का छोटा संस्करण है।

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

एक घास काटने की मशीन दो अलग-अलग वर्ण है, दो लॉन वर्णों से अलग है। यहाँ एक उदाहरण है, =घास काटने की मशीन के पीछे और oसामने के रूप में:

=o

एक घास काटने की मशीन लॉन के चारों ओर खड़ी होगी, और इसके मोर्चे पर भी घूम सकती है। उपरोक्त मोवर एनीमेशन में कुछ बिंदु के दौरान नीचे के किसी भी तरह लग सकता है:

=o 
  
o= 
  
o
=
  
=
o

घास काटने की मशीन नीचे लॉन पर नीचे पदों के किसी भी सेट पर शुरू कर सकते हैं। Mowers oलॉन में दक्षिणावर्त चारों ओर ड्राइव करेंगे। मूवर्स 0लॉन के चारों ओर ड्राइव करेंगे।

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

एनीमेशन दूसरे से शुरू होता है। प्रत्येक सेकंड में, घास काटने की मशीन एक स्थान को आगे बढ़ाती है, और उसके सामने घास काटती है। जब घास काटने की मशीन किसी स्थान को खाली करती है, तो वह कट जाती है। जब घास काटने वाला मोर्चा एक लाइन पर अंतिम काटा हुआ सामान तक पहुँच जाता है (और वहाँ अभी भी घास नहीं है), घास काटने की मशीन एक बार घूमती है ताकि चालू मोव जारी रहे (मूल स्थिति के आधार पर दक्षिणावर्त / वामावर्त में रहकर) जब घास काटने की मशीन समाप्त हो जाती है, यह सीधे जारी है (घास काटना पहले से ही है) जब तक यह लॉन से पूरी तरह से बंद नहीं हो जाता।

बाएं शीर्ष पर एक घास काटने की मशीन के साथ, यह 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 सेकंड या दो सेकंड), लेकिन यह ऐसा होना चाहिए कि लॉन घास काटने की मशीन अभी भी स्वाभाविक रूप से चलती दिखाई देती है।

यदि संभव हो, तो एक दृश्य प्रदान करें (TIO, स्निपेट, GIF, आदि)

यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।


3
अच्छी चुनौती! तारों से परेशान व्यक्ति के दृष्टिकोण से बोलते हुए, आप शायद अपने तार को खत्म कर देंगे :)
HyperNeutrino

क्या हम मान सकते हैं कि लॉन फिट करने के लिए आउटपुट विंडो का आकार है?
आदम

आपके द्वारा चलाए जा रहे उदाहरण के समान कुछ और जो आप अनुमति देना चाहते हैं, सभी राज्यों की सूची वापस करना है।
एडम

3
क्या होगा अगर हम अपने लॉन को सही तरीके से घास काटना पसंद करते हैं? s-media-cache-ak0.pinimg.com/736x/92/5c/7c/…
tuskiomi

3
@tuskiomi मुझे एक ही विचार के आधार पर कार्यों में एक और चुनौती मिली है, लेकिन जहां प्रोग्रामर का नियंत्रण है कि यह कैसे मंगाया गया है :)
स्टीफन

जवाबों:


4

जावास्क्रिप्ट (ES6 / Node.js), 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);

नोट: मुझे लगता है कि मुझे 'स्लीप' पैकेज मिलना चाहिए और सेटजाउट के साथ फिर से लिखना चाहिए ताकि नोडज स्वतंत्र हो सकें


मैंने इसे TIO में चिपकाने की कोशिश की (यह कहता है कि यह नोड के लिए काम करता है। js)। कोई सुराग क्यों यह काम नहीं कर रहा है?
स्टीफन

'स्लीप' मॉड्यूल के कारण - मुझे इससे छुटकारा मिल जाएगा
Axarydax
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.