एक ग्लाइडर रखें!


17

इस:

यहाँ छवि विवरण दर्ज करें

एक ग्लाइडर है

कॉनवे के गेम ऑफ लाइफ में, ग्लाइडर एक प्रसिद्ध पैटर्न है जो तेजी से पूरे बोर्ड में फैलता है। आज की चुनौती के लिए, हम एक ASCII कला गेम ऑफ लाइफ बोर्ड बनाने जा रहे हैं, और उस पर एक ग्लाइडर रखें।

हम जिस बोर्ड से शुरुआत कर रहे हैं वह यह है:

|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

यह बोर्ड पूरी तरह से पाइप |और अंडरस्कोर से बना है _, और 10x10 है। आपको एक प्रोग्राम या फ़ंक्शन लिखना होगा जो दो पूर्णांकों में होता है, 'x' और 'y', और उन निर्देशांक पर ग्लाइडर के साथ इसी बोर्ड को आउटपुट करता है। उदाहरण के लिए, यदि आपके पास स्थिति (1, 1)(0-अनुक्रमित) पर एक ग्लाइडर था, तो आपको निम्नलिखित का उत्पादन करना होगा:

|_|_|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|_|_|_|*|_|_|_|_|_|_|
|_|*|*|*|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

आप मान सकते हैं कि ग्लाइडर को कभी भी सीमा से बाहर नहीं रखा जाएगा, इसलिए एक्स और वाई दोनों हमेशा [0-7]सीमा में रहेंगे । आप 1-अनुक्रमित निर्देशांक लेने के लिए भी चुन सकते हैं, लेकिन आपको अपने उत्तर में इसे निर्दिष्ट करना होगा। इस मामले में, इनपुट हमेशा [1-8]सीमा में होंगे। यहां कुछ उदाहरण दिए गए हैं (सभी 0-अनुक्रमित):

0, 0:
|_|*|_|_|_|_|_|_|_|_|
|_|_|*|_|_|_|_|_|_|_|
|*|*|*|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

7, 7:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|

7, 4:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|*|_|
|_|_|_|_|_|_|_|_|_|*|
|_|_|_|_|_|_|_|*|*|*|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

5, 2:
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|*|_|_|_|
|_|_|_|_|_|_|_|*|_|_|
|_|_|_|_|_|*|*|*|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|

हमेशा की तरह, आप अपने आईओ को किसी भी उचित प्रारूप में ले सकते हैं। इसमें शामिल है, लेकिन नई लाइनों के साथ एक स्ट्रिंग तक सीमित नहीं है, तार की एक सरणी, तार का 2d सरणी, या फ़ाइल / STDOUT पर लिखना। आप यह भी चुन सकते हैं कि x को किस क्रम में लेना है और y है।

चूंकि यह , मानक खामियों पर प्रतिबंध लगाया जाता है, और सबसे छोटा कोड बनाते हैं जो आप कर सकते हैं!


क्या हम बदल सकते हैं कि कौन सा कोना ग्लाइडर की स्थिति को पहचानता है?
स्टीफन

@StephenS नहीं, निर्देशांक को यह पहचानना चाहिए कि ग्लाइडर के ऊपरी बाएं कोने की शुरुआत कहां से होती है।
DJMcMayhem


2
the glider is a famous pattern that slowly traverses across the boar.। धीरे से? यह गोएल में सबसे तेज तिरछी चलने वाली वस्तु है। यह प्रकाश की गति के 1/4 तक पहुंचता है।
क्रिस्टोफ

1
@Christoph, अच्छा बिंदु, हम देख सकते हैं कि यह लंबाई यात्रा की दिशा में अनुबंध करने के लिए प्रकट नहीं होती है, लेकिन मैं इसे मापने के किसी भी तरीके को नहीं जानता कि यह सापेक्ष गति पर द्रव्यमान है।
वंसनामे

जवाबों:



5

वी , 31 , 30 बाइट्स

10O±°_|ÀGjjÀ|3r*kr*kh.Í*ü_/|&

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

Hexdump:

00000000: 3130 4fb1 b05f 7c1b c047 6a6a c07c 3372  10O.._|..Gjj.|3r
00000010: 2a6b 722a 6b68 2ecd 2afc 5f2f 7c26       *kr*kh..*._/|&

यह प्रोग्राम तर्कों और 1-अनुक्रमित के रूप में इनपुट लेता है।

स्पष्टीकरण:

10O                         " On the following 10 lines, insert:
   ±°_                      "   10 '_' characters
      |                     "   And a '|'
       <esc>                " Return to normal mode
            ÀG              " Go to the a'th line
              jj            " Move down two lines
                À|          " Go to the b'th column
                  3r*       " and replace the next 3 characters with asterisks
                     k      " Move up a line
                      r*    " And replace this char with an asterisk
                        kh  " Move up a line and to the left
                          . " And repeat the last change we performed (replace with asterisk)
                            "
Í                           " On every line, substitute:
 *                          "   An asterisk
  ü                         "   OR
   _                        "   An underscore
    /                       " With:
     |&                     "   A bar followed by the matched pattern

दो सवाल: क्या? और कैसे?
प्यूरफेरट

1
@Pureferret दो उत्तर: गोल्फ भाषाएँ, विज्ञान (या उन्होंने V XD लिखा)
क्रिस्टोफर

1
@Pureferret मैंने एक स्पष्टीकरण जोड़ा है।
DJMcMayhem

2

जेली , 37 35 बाइट्स

ȷ2b1
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”

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

यह काम किस प्रकार करता है

ȷ2b1                             - the literal [1,1,1,1,...,1,1,1] with 100 elements
Ḍ+“£Æßæç‘Ṭ+¢s⁵j3;0$€Fṭ0ị“_*¶|”   - input (x,y)
Ḍ                                - convert (x,y) to 10*x+y
 +                               - add, to get the five "*" positions,
  “£Æßæç‘                        - the literal [2,13,21,22,23]
         Ṭ                       - return an array with those positions as truthy elements
          +¢                    - Now we format: pad to length 100 with the above literal
            s⁵j3                 - add newlines (represented by 3) to each set of 10
                ;0$€F            - add pipes (represented by 0) to each
                     ṭ0          - add a 0 to the beginning
                       ị“_*¶|”   - index into the string “_*¶|”

1
आप अपने प्रोग्राम कैसे टाइप / जनरेट करते हैं?
रोबॉटकालेब

1
@RobotCaleb: आमतौर पर जेली कोडपेज से कॉपी-पेस्ट करना । जब मैं अपने मुख्य मशीन पर नहीं, और मेरे मुख्य कंप्यूटर पर जेली रिपॉजिटरी का क्लोन होता है, तो मैं उन्हें TIO सांठगांठ पर चलाता हूं ।
फायरफ्लेम 241

2

अजगर २ , 151 बाइट्स

ज्यादा गोल्फ करेंगे।

def f(x,y):r,x=[list('|_'*10+'|')for i in[1]*10],x*2;r[y][x+3]=r[y+1][x+5]=r[y+2][x+1]=r[y+2][x+3]=r[y+2][x+5]='*';print'\n'.join(''.join(i)for i in r)

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


यदि आप पायथन 3 पर जाने के इच्छुक हैं, तो आप कॉल के [*'|_'*10+'|']बजाय 3 बाइट्स बचा सकते list()हैं।
L3viathan

2

पर्ल 6 , 88 बाइट्स

->\x,\y{(^10 »*»i X+ ^10).map:{<|* |_>[$_!=
(1-2i|2-i|0|1|2)+x+y*i+2i]~"|
"x(.re==9)}}
  • निर्देशांक का प्रतिनिधित्व करने के लिए जटिल संख्या का उपयोग किया जाता है।

  • ^10 »*» i X+ ^10 शून्य से पूर्णांक घटकों के साथ सभी जटिल संख्याओं की ग्रिड को नौ के माध्यम से उत्पन्न करता है।

  • स्ट्रिंग्स की एक सूची देता है, प्रत्येक एक पंक्ति को पकड़े हुए।


दिलचस्प है, मुझे नहीं पता था कि पर्ल गैर-एएससीआईआई का उपयोग करता है। क्या करता »है? यह कैसे एन्कोडेड है?
DJMcMayhem

1
यह यूनिकोड -8 में एनकोडेड यूनिकोड के राइट प्वाइंटिंग गिल्ट, U + 00BB है। पर्ल 6 में यह सिर्फ दो कोण कोष्ठक के रूप में लिखा जा सकता है >>, लेकिन यह गुलेट के रूप में बाइट की समान संख्या है इसलिए गोल्फिंग के लिए मैं बाद वाले को पसंद करता हूं क्योंकि यह थोड़ा क्लासी आईएमएचओ दिखता है। जैसा कि यह करता है, यह उस ऑपरेटर को रूपांतरित करता है, जो एक "हाइपरोपेटर" के रूप में होता है, जो दोनों ओर की सूचियों या मानों पर युग्मक लागू करता है। यहाँ, यह सीमा के प्रत्येक तत्व को गुणा 0-9करके i, देता है 0, i, 2i, ..., 9i
सीन

1

हास्केल , 96 बाइट्स

r=[0..9]
x#y=['|':(r>>=(\i->[last$'_':['*'|elem(i-x,j-y)$zip[1,2,0,1,2][0,1,2,2,2]],'|']))|j<-r]

दो पूर्णांकों ( xऔर y) में ले जाता है और Strings की सूची लौटाता है , अर्थात टाइप की 2D सूची [[Char]]


परीक्षण सूट:

import System.Environment

main :: IO ()
main = do
    args <- getArgs
    let (x, y) = (read $ args !! 0, read $ args !! 1)
    mapM_ putStrLn (x#y)


1

गणितज्ञ, ११५ ११३ बाइट्स

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});""<>Riffle[#<>"|"&/@a,"\n"])

कहाँ पे

इसमें इनपुट लिया जाता है {row, col} प्रारूप , और 1-अनुक्रमित है, लेकिन बाइट्स को जोड़े बिना 0-अनुक्रमित में बदल दिया जा सकता है।

कुछ नोट:

  1. \n एक नया चरित्र है, 1 बाइट लेता है।
  2. है \[Function], 3 बाइट्स लेता है।
  3. है \[Transpose], 3 बाइट्स लेता है।

ध्यान दें कि "स्ट्रिंग ऑफ़ स्ट्रिंग" की अनुमति है, इसलिए मैं बस निकाल सकता हूं Riffle, देता है

गणितज्ञ, 98 97 बाइट्स

x(a="|_"~Table~10~Table~10;(a[[##]]="|*")&@@(#+x)&/@({{0,1,2,2,2},{1,2,0,1,2}});#<>"|"&/@a)

1

जावा 8, 165 144 बाइट्स

x->y->{String r="";for(int i=0,j;++i<11;r+="\n")for(r+="|",j=0;++j<11;)r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?"*|":"_|";return r;}

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

x->y->{                  // Method with two integer parameters and String return-type
  String r="";           //  Result-String
  for(int i=0,j;++i<11;  //  Loop (1) over the rows
     r+="\n|")           //    And after each iteration add a new-line to the result-String
    for(r+="|",          //   Start by appending "|" at the start of the line
      j=0;++j<11;        //   Loop (2) over the columns
      r+=(i==x&j==y+1)|(i==x+1&j==y+2)|(i==x+2&j>=y&j<y+3)?
                         //    If this coordinate should contain a '*'
        "*|"             //     Append "*|"
       :                 //    Else:
        "_|"             //     Append "_|"
    );                   //   End of loop (2)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-String
}                        // End of method

1
स्पष्टीकरण में आपके उत्तर से अलग कोड है? आर को पहले असाइनमेंट को देखें।
Computronium

@Computronium उफ़, नोटिंग के लिए धन्यवाद, निश्चित। उप-गिनती सही थी, स्पष्टीकरण सही था, टीआईओ-लिंक सही था, लेकिन वास्तविक उत्तर अभी भी पुराना गलत था ..
केविन क्रूज़सेन

1

जावास्क्रिप्ट (ईएस 6), 99 बाइट्स

x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

करी के माध्यम से इनपुट लेता है: f(5)(2) x = 5, y = 2 के लिए। निर्देशांक शून्य-अनुक्रमित हैं।

टेस्ट स्निपेट

f=
x=>y=>eval('for(i=0,o="";i<101;o+=((d=i-x-y*10)==1|d==12|d>19&d<23?"|*":"|_")+(++i%10?"":`|\n`))o')

xi.oninput=yi.oninput=_=>O.innerHTML=f(xi.value)(yi.value)
O.innerHTML=f(xi.value=5)(yi.value=2)
<style>*{font-family:Consolas;}input{width:2.5em;}</style>
x: <input id="xi" type="number" min="0" max="7">,
y: <input id="yi" type="number" min="0" max="7">
<pre id="O">


0

एसओजीएल , 23 बाइट्स

LIΖ|_ΟL∙.«."¾'┼ΞΧ⌠²‘5nž

नोट: यह इनपुट 1-अनुक्रमित होने की उम्मीद करता है

स्पष्टीकरण:

LI                       push 11
  Ζ|_                    push "|" and "_"
     Ο                   make an altrenates string [with 11 separators, which are "|" and parts "_"]
      L∙                 get an array of 10 of those
        .«               take input and multiply by 2 (x pos)
          .              take input (y pos)
           "¾'┼ΞΧ⌠²‘     push "_|*|__|_|**|*|*" - the glider in the map
                    5n   split into an array with items of length 5
                      ž  replace in the 1st [grid] array at positions [inp1*2, inp2] to 2nd array [glider]


0

चारकोल , 28 बाइट्स

UO²¹χ|_J×N²N“ "}IyE%%mLBMφ/”

इसे ऑनलाइन आज़माएं! विवरण के लिए क्रिया मोड से लिंक करें।


मैं निराश हूँ कि चारकोल, ठीक नहीं है ... ASCII-only;)
बीटा डेक

संपीड़ित बाइट को बचाने |_के \nलिए आप पहले हटा सकते हैं । (मैंने ग्लाइडर को छापने के कई अलग-अलग तरीकों की कोशिश की लेकिन किसी ने भी कोई बाइट नहीं बचाई।)
नील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.