मारगॉल्फ ने लैंग्टन के एंथिल की मदद की


9
This is Markov.
Markov's golf ball rolls around randomly.
Markov's ball will hole however he strikes it.
Markov is smart.
Be like Markov.

और यह:
यहां छवि विवरण दर्ज करें लैंग्टन के पिछवाड़े में एक एंथिल है।
एंथिल मार्कोव की गोल्फबॉल, मार्गोल्फ को पकड़ने के लिए काफी बड़ा है। हालांकि, एंथिल चलता है और आसपास के इलाके के आधार पर दिशा बदलता है।

काम

10x20 फ़ील्ड का इनपुट लें:

  • * MarGolf
  • O लैंटन का एंथिल
  • , एंथिल 90 डिग्री दक्षिणावर्त बदल जाता है
  • . एंथिल 90 डिग्री वामावर्त बदल जाता है
  • 0 लैंग्टन के एंथिल में मार्गोल्फ

एक फ़ील्ड इस तरह दिखता है:

,...,.,,..,...,.,,..
..,.,,,..,...,..,.,.
.,,*.,....,.,,,.,,,.
,.,,.,...,,.,.,,,,,.
.,..,....,,.....,,.,
,.,.,...,..,.,,,,..,
....,,,,,,,,,.......
........,,.,...,...,
,,,,,,,,,,,,....,O.,
,.,.,.,.....,,.,,,,,

खेल के नियम:
इनपुट फ़ील्ड के कॉन्फ़िगरेशन को टिक 0. कहा जाता है। आपके प्रोग्राम को अगले टिक के कॉन्फ़िगरेशन का मूल्यांकन और प्रिंट करने की आवश्यकता होती है, जिसमें मार्गोल्फ और लैंग्टन के एंथिल दोनों एक और सेल में चले जाएंगे। वर्तमान सेल में आइटम लक्ष्य सेल में वर्तमान में आइटम बन जाएगा। यदि मार्कोल्फ और एंथिल दोनों अगले टिक में एक ही सेल में चले जाते हैं, तो खेल समाप्त हो जाता है।

आंदोलन के नियम:

  • MarGolf बेतरतीब ढंग से चलता है। मारगॉल्फ के आसपास के 3x3 क्षेत्र में सभी नौ कोशिकाओं को चुने जाने की समान संभावना है। यह क्षेत्र के एक किनारे पर 6 कोशिकाओं और एक कोने में 4 कोशिकाओं के बीच एक विकल्प बन जाता है।
  • लैंग्टन के एंथिल को ऊपर, नीचे, बाएं या दाएं (NSEW या जो भी समतुल्य हो) की अपनी गति को याद रखने की आवश्यकता है। यह प्रत्येक दिशा में एक-एक कोशिका को घुमाता है और कोशिका की मूल सामग्री अपनी दिशा को दक्षिणावर्त या विरोधी-दक्षिणावर्त बदलती है, जैसा कि ऊपर निर्दिष्ट किया गया है। टिक 0 पर प्रारंभिक दिशा यादृच्छिक है, प्रत्येक दिशा में प्रारंभिक होने की समान संभावना है।

टिप्पणियाँ

  • खेल समाप्त होने तक कार्यक्रम को प्रत्येक टिक के कॉन्फ़िगरेशन को प्रिंट करने की आवश्यकता होती है।
  • टिक संख्या प्रत्येक टिक के क्षेत्र विन्यास से पहले होती है।
  • आप मान सकते हैं कि इनपुट हमेशा मान्य है।
  • सबसे छोटा कार्यक्रम बाइट्स जीत है।

अद्यतन: यदि यह अन्यथा क्षेत्र से बाहर चला जाएगा तो आगे बढ़ने से पहले एंथिल उलट दिशा का उल्लेख करना भूल गया। याद दिलाने के लिए user81655 को क्रेडिट।


किसी को भी, जहां "जैसा हो सकता है <सम्मिलित नाम यहां> मेमे उत्पन्न हुआ?
गर्व हैकरेल

@proudhaskeller मुझे बी लाइक बिल फेसबुक पेज से लगता है, विकिपीडिया पर एक लेख है जिसे आप पढ़ना चाहते हैं। en.wikipedia.org/wiki/Be_like_Bill
Busukxuan


2
@ डोरकोनब यदि मैं चुनौती को सही ढंग से समझता हूं, तो उनके नीचे कोई टाइल नहीं है। जब आप उनमें से एक को स्थानांतरित करते हैं तो यह उस टाइल के साथ स्वैप हो जाता है जिस पर वे चलते हैं, और यह टाइल अगले चरण के Oलिए एस दिशा निर्धारित करती है ।
मार्टिन एंडर

1
@MartinButtner हाँ जो ज्यादातर सही है। मैंने एक कोने के मामले के लिए "स्वैप" शब्द से परहेज किया, लेकिन यह शब्द अन्यथा सत्य है।
बुसुकुआन

जवाबों:


3

जावा 10, 611 609 607 593 591 बाइट्स

m->{int x=0,y=0,X=0,Y=0,r=10,c,d=4,e;for(d*=Math.random();r-->0;)for(c=20;c-->0;){if(m[r][c]<43){x=r;y=c;}if(m[r][c]>48){X=r;Y=c;}}for(;;d=m[r][c]<45?d<2?d+2:d<3?1:0:d>1?d-2:d>0?2:3){p(m);for(e=4;e==4;e*=Math.random())e=9;m[r=x][c=y]=m[x+=e/3<1?x>0?-1:1:e/3>1?x<9?1:-1:0][y+=e%3<1?y>0?-1:1:e%3>1?y<19?1:-1:0];if(m[x][y]>48){m[x][y]=48;m[r][c]=0;p(m);e/=0;}m[x][y]=42;m[r=X][c=Y]=m[X+=d<1?X<9?1:-1:d==1?X>0?-1:1:0][Y+=d==2?Y<19?1:-1:d>2?Y>0?-1:1:0];if(m[X][Y]<43){m[r][c]=48;m[X][Y]=0;p(m);e/=0;}m[X][Y]=79;}}void p(char[][]m){var p="";for(var a:m)p+=p.valueOf(a)+"\n";System.out.println(p);}

-4 बाइट्स @ceilingcat की बदौलत

के अंतिम स्वैप को मान लेता है *और Oवह सेल खाली कर देगा जहां *से आ रही है।

स्पष्टीकरण:

इसे ऑनलाइन आज़माएं।

m->{                        // Method with character-matrix parameter and no return-type
  int x=0,y=0,              //  [x,y] coordinates of MarGolf
      X=0,Y=0,              //  [X,Y] coordinates of Langton's Anthill
      r=10,c,               //  Temp [x,y] coordinates
      d=4,                  //  Direction Langton's Anthill
      e;                    //  Direction MarGolf
  for(d*=Math.random();     //  Set the direction Langton's Anthill randomly [0,3]
      r-->0;)               //  Loop over the rows:
    for(c=20;c-->0;){       //   Inner loop over the columns:
      if(m[r][c]<43){       //    If '*' is found:
        x=r;y=c;}           //     Set MarGolf's [x,y] coordinates
      if(m[r][c]>48){       //    If 'O' is found:
        X=r;Y=c;}}          //     Set Langton's Anthill's [X,Y] coordinates
  for(;                     //  Loop indefinitely:
       ;                    //    After every iteration:
        d=                  //     Change the direction of Langton's Anthill:
          m[r][c]<45?       //      If the swapped cell contained a comma:
           d<2?d+2:d<3?1:0  //       Change the direction clockwise
          :                 //      Else (the swapped cell contained a dot):
           d>1?d-2:d>0?2:3){//       Change the direction counterclockwise
  p(m);                     //  Pretty-print the matrix
  for(e=4;e==4;e*=Math.random())e=9;
                            //  Change direction MarGolf randomly [0-9] (excluding 4)
  m[r=x][c=y]               //  Save the current MarGolf coordinates
   =m[x+=e/3<1?x>0?-1:1:e/3>1?x<9?1:-1:0]
     [y+=e%3<1?y>0?-1:1:e%3>1?y<19?1:-1:0];
                            //  And change that cell to the content in direction `e`
                            //  0 to 9 (excl. 4) is NW,N,NE,W,n/a,E,SW,S,SE respectively
                            //  If `e` would go out of bounds, it moves opposite instead
  if(m[x][y]>48){           //  If MarGolf reached Langton's Anthill:
    m[x][y]=48;             //   Set that cell to '0'
    m[r][c]=0;              //   And empty the swapped cell
    p(m);                   //   Print the final status of the matrix
    e/=0;}                  //   And stop the loop with an error to exit the program
  m[x][y]=42;               //  Change the cell in the new coordinate to '*'
  m[r=X][c=Y]               //  Save the current Langton's Anthill coordinates
   =m[X+=d<1?X<9?1:-1:d==1?X>0?-1:1:0]
      [Y+=d==2?Y<19?1:-1:d>2?Y>0?-1:1:0];
                            //  And change that cell to the content in direction `d`
                            //  0 to 3 is E,W,S,N respectively
                            //  If `d` would be out of bounds, it moves opposite instead
  if(m[X][Y]<43){           //  If MarGolf reached Langton's Anthill:
    m[r][c]=48;             //   Set that cell to '0'
    m[X][Y]=0;              //   And empty the swapped cell
    p(m);                   //   Print the final status of the matrix
    e/=0;}                  //   And stop the loop with an error to exit the method
  m[X][Y]=79;}}             //  Change the cell in the new coordinate to 'O'

void p(char[][]m){          // Separated method to print the given matrix
  var p="";                 //  String to print, starting empty
  for(var a:m){             //  Loop over the rows:
    p+=p.valueOf(a)         //   Convert the character-array to a String line and append,
                     +"\n"; //   including a trailing newline
  System.out.println(p);}   //  Print the String with trailing newline as separator
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.