लीपिंग कंगारू


36

पृष्ठभूमि की कहानी

अस्वीकरण: कंगारूओं के बारे में जानकारी बना सकता है।

कंगारुओं ने विकास के कई चरणों को पार किया। जैसे-जैसे वे बड़े और मजबूत होते जाते हैं, वे ऊंची और लंबी छलांग लगा सकते हैं, और वे भूख लगने से पहले अधिक बार कूद सकते हैं।

चरण 1 में , कंगारू बहुत कम है और बिल्कुल भी नहीं कूद सकता है। इसके बावजूद, लगातार पोषण की आवश्यकता होती है। हम इस तरह से एक चरण 1 कंगारू के गतिविधि पैटर्न का प्रतिनिधित्व कर सकते हैं ।

o

चरण 2 में , कंगारू छोटी छलांग लगा सकता है, लेकिन भूख लगने से पहले 2 से अधिक नहीं । हम इस तरह एक चरण 2 कंगारू के गतिविधि पैटर्न का प्रतिनिधित्व कर सकते हैं ।

 o o
o o o

स्टेज 2 के बाद कंगारू जल्दी ठीक हो जाता है। प्रत्येक बाद की अवस्था में, कंगारू थोड़ा अधिक (ग्राफिकल प्रतिनिधित्व में 1 इकाई) और दो बार कई बार कूद सकता है। उदाहरण के लिए, एक चरण 3 कंगारू का गतिविधि पैटर्न इस तरह दिखता है।

  o   o   o   o
 o o o o o o o o
o   o   o   o   o

चरण n के लिए , गतिविधि पैटर्न में ऊँचाई n के 2 n-1 V-आकार के जंप होते हैं ।

उदाहरण के लिए, चरण 4 के लिए , ऊँचाई 4 की 8 छलांग होती हैं ।

   o     o     o     o     o     o     o     o
  o o   o o   o o   o o   o o   o o   o o   o o
 o   o o   o o   o o   o o   o o   o o   o o   o
o     o     o     o     o     o     o     o     o

कार्य

एक पूर्ण प्रोग्राम या एक फ़ंक्शन लिखें जो एक सकारात्मक पूर्णांक n को इनपुट और प्रिंट के रूप में लेता है या एक चरण n कंगारू के गतिविधि पैटर्न के ASCII कला प्रतिनिधित्व को लौटाता है ।

आसपास के व्हाट्सएप और ANSI एस्केप कोड की अनुमति है, जब तक कि पैटर्न बिल्कुल ऊपर जैसा दिखता है।

यदि आप एक ऐसा फ़ंक्शन चुनते हैं जो आउटपुट लौटाता है, तो इसे एक एकल स्ट्रिंग या वर्ण सरणी वापस करना होगा जो मुद्रित होने पर उचित आउटपुट प्रदर्शित करता है। स्ट्रिंग की एक सरणी वापस करने की अनुमति नहीं है।

आप किसी भी मुद्रण योग्य, गैर-व्हाट्सएप चरित्र का उपयोग कर सकते हैं o, जब तक कि यह आपके उत्तर में गतिविधि पैटर्न के भीतर और सभी पैटर्न के अनुरूप हो।

यह ; बाइट्स जीतने में सबसे छोटा जवाब हो सकता है!


मुझे कुछ स्पष्टीकरण चाहिए। आपने कहा कि आप किसी भी चरित्र का प्रतिनिधित्व कर सकते हैं o। क्या आप रिक्त स्थान का प्रतिनिधित्व करने के लिए किसी भी वर्ण का उपयोग कर सकते हैं (जब तक वे अलग हैं?)
कोडोस जॉनसन

1
रिक्त स्थान रिक्त होना चाहिए। आप वास्तविक स्थान का उपयोग कर सकते हैं या कर्सर को इधर-उधर करने के लिए नियंत्रण कोड का उपयोग कर सकते हैं, लेकिन आप मुद्रण योग्य गैर-स्थान वर्णों का उपयोग नहीं कर सकते।
डेनिस

जवाबों:


8

05AB1E , 12 10 बाइट्स

Îj¹FÐvû},À

स्पष्टीकरण:

Î              # Push zero and input
 j             # Prepend input - 1 spaces
  ¹F           # Input times do..
    Ð          #   Triplicate the string
     v }       #   Length times do..
      û        #     Palindromize
        ,      #   Pop and print with a newline
         À     #   Rotate the string on to the right

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


1
दिलचस्प है, ज़िप से अधिक चालाक।
मैजिक ऑक्टोपस Urn

14

MATLAB, 92 90 86 84 बाइट्स

n=input('');p=eye(n)+32;A=repmat([fliplr(p),p,''],1,2^n/2);A(:,n+1:n:end)=[];disp(A)

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

eyeएक पहचान मैट्रिक्स बनाता है। यदि हम इसे पलटाते हैं और मूल को बदलते हैं, [fliplr(p),p]तो हम प्राप्त करते हैं (के लिए n=3):

0 0 1 1 0 0
0 1 0 0 1 0
1 0 0 0 0 1

साथ repmat(...,1,2^n/2)हम इस दोहराने 2^(n-1)बार और प्राप्त

0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 ...
1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1

इसमें से हम अनावश्यक कॉलम को हटा देते हैं A(:,n+1:n:end)=[];


8
20k पर बधाई !!
लुइस मेंडो

आपका धन्यवाद !
flawr

9

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

NλP^×λoF⁻λ¹‖O→

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

व्याख्या

Nλमें एक पूर्णांक इनपुट λP^एक बहुआयामी प्रिंट (एसई और एसडब्ल्यू) ×λo(स्ट्रिंग गुणन के λसाथ o) है। फिर F⁻λ¹लूप के λ - 1समय के लिए चलता है , जिसमें ‖O→ओवरलैप के साथ दाईं ओर पूरी चीज को दर्शाता है।


" P^एक बहुआयामी प्रिंट (एसई और एसडब्ल्यू) है " कूल, यह कुछ ऐसा है जिसे आप प्रोग्रामिंग भाषाओं में अक्सर नहीं देखते हैं!
केविन क्रूज़सेन


7

पायथन 2 , 87 बाइट्स

n=input()
for i in range(n):print''.join(' o'[abs(j%(2*n)-n)==i]for j in range(1,n<<n))

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

निर्देशांक के लिए एक सूत्र का उपयोग करता (i,j)है जिसमें एक चक्र होता है, फिर ग्रिड से जुड़ता है और प्रिंट करता है। यहाँ बहुत अधिक गोल्फ गंध है - ''.joinदो नेस्टेड रेंज, forओवर exec, इसलिए इसमें सुधार होने की संभावना है।


7

पायथन 2, 83 81 बाइट्स

n=input()
i=0
exec"s=' '*n+'o'+' '*i;i+=1;print(s[i:-1]+s[:i:-1])*2**~-n+s[i];"*n

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


3
PPCG में आपका स्वागत है! अच्छी पहली पोस्ट!
R

3
यह एक तरह की समझ है; अजगर में एक्सगॉर्फ़िंग एक्सनोर कोई छोटी उपलब्धि नहीं है। मुझे सुधार के लिए कुछ जगह दिखाई देती है। कुछ समय पाश एक बाइट को बचाने चाहिए और चाल कुछ और बचा सकता है। exec
डेनिस

5

Befunge, 98 91 बाइट्स

यह एक का उपयोग करता है ,के स्थान पर o, के बाद से है कि बाइट्स के एक जोड़े को बचाने के लिए हमें सक्षम बनाता है।

&::1>\1-:v
+\:v^*2\<_$\1-2*::!+00p*1
:-1_@v0\-g01:%g00:-1<:\p01
 ,:^ >0g10g--*!3g,:#^_$\55+

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

व्याख्या

चरण संख्या, n को देखते हुए , हम पैटर्न के निम्नलिखित तीन मापदंडों की गणना करके शुरू करते हैं:

jump_count = 2 ^ (n - 1)
jump_len   = (n - 1) * 2
width      = (jump_len * jump_count) + 1

Jump_len इसके साथ एक मंच 1 कंगारू के लिए शून्य किया जा रहा से बचने के लिए सामान्यीकृत है:

jump_len += !jumplen    

फिर हम आउटपुट क्षेत्र के x और y निर्देशांक पर पुनरावृति करके जंप पैटर्न को आउटपुट कर सकते हैं, और प्रत्येक स्थान के लिए आउटपुट के लिए उपयुक्त चार्जर की गणना कर सकते हैं। Y से नीचे की गिनती के समन्वय n - 1 0 करने के लिए, और एक्स मायने रखता समन्वय नीचे से चौड़ाई - 1 0 पर हम यह निर्धारित एक बिंदु की जरूरत निम्न सूत्र के साथ दिखाया जा सकता है या नहीं:

jump_off = x % jump_len
show_dot = (jump_off == y) or (jump_off == (jump_len-y))

Show_dot बूलियन प्रत्येक स्थान पर उत्पादन के लिए वास्तविक चरित्र निर्धारित करने के लिए एक मेज सूचकांक के रूप में प्रयोग किया जाता है। अंतरिक्ष को बचाने के लिए, हम उस तालिका के रूप में स्रोत की अंतिम पंक्ति की शुरुआत का उपयोग करते हैं, यही कारण है कि हमारा oचरित्र समाप्त हो रहा है ,


5

जे , 28 25 बाइट्स

' o'{~]_&(](|.,}.)"1)=@i.

सहेजे गए 3 बाइट @ कॉनर ओ'ब्रायन का धन्यवाद ।

यह @ मैडीफ़िश के घोल से पैलिंड्रोम ट्रिक पर आधारित है ।

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

व्याख्या

' o'{~]_&(](|.,}.)"1)=@i.  Input: integer n
                       i.  Form the range [0, 1, ..., n-1]
                     =@    Equality table with itself.
                           Creates an identity matrix of order n
      ]                    Get n
       _&(          )      Repeat n times on x = identity matrix
           (     )"1         For each row
            |.                 Make a reversed copy
               }.              Get a copy with the head removed
              ,                Append them
          ]                  Use that as the new value of x
' o'{~                     Index into the char array

31 बाइट्स के लिए एक वैकल्पिक दृष्टिकोण ' o'{~3 :'(}."1,.~|."1)^:y=i.y':। काश मैं उस स्पष्ट क्रिया को हटाने का एक तरीका खोज पाता ... डारन ^:
कॉनर ओ'ब्रायन

@ ConorO'Brien धन्यवाद, कि मदद करता है, मुझे लगता है कि यह कम हो जाएगा अगर tacit
मील

@ ConorO'Brien मैंने इसे tacit बनाया है, यह वास्तव में छोटा है!
मील

बहुत बढ़िया! यह बहुत बढ़िया है। मैं - u&vअच्छा के dyadic उपयोग भूल जाते हैं ।
कॉनर ओ'ब्रायन


4

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

k 1="o"
k n|n<-n-1,m<-n*2=unlines[[last$' ':['o'|mod c m`elem`[m-r,r]]|c<-[0..m*2^n]]|r<-[n,n-1..0]]

इसे ऑनलाइन आज़माएं! उपयोग: k 3

स्पष्टीकरण:

एक पंक्ति को देखते हुए r, एक स्तंभ cऔर m = 2(n-1)एक oसेट है यदि c mod mबराबर rया m-r। सबसे बाहरी सूची समझ की सीमा सेट rसे n-1करने के लिए 0, अगले एक सेट की सीमा cसे 0करने के लिए m*2^(n-1)और अंतरतम लौटने सशर्त रूप में कार्य करता 'o'है, तो उपरोक्त सूत्र को पूरा किया और है ' 'अन्यथा। यह स्ट्रिंग्स की एक सूची तैयार करता है जिसे एक सिंगल न्यूलाइन अलग स्ट्रिंग में बदल दिया जाता है unlinesn=1फ़ंक्शन के लिए एक विभाजन-दर-शून्य त्रुटि पैदा करता है, इसलिए यह मामला पहली पंक्ति में स्पष्ट रूप से नियंत्रित किया जाता है।


मुझे वास्तव में ['o'|mod c m`elem`[m-r,r]]भाग पसंद है !
दोष

4

सी #, 180, 173 171 बाइट्स

यह जीत नहीं है, अन्य सी # प्रतियोगियों के लिए पोस्टिंग के रूप में कुछ वे हरा सकते हैं।

n=>{var s=new string[n];for(int a=-1,j=0,i,m=n-1,x=m;j<=m*(Math.Pow(2,n)*n+1);){i=j++%n;s[i]+=x==i?"o":"_";if(i==m&n>1){x+=a;a*=x%m==0?-1:1;}}return string.Join("\n",s);};

पूरा कार्यक्रम:

using System;
public class P
{
    public static void Main()
    {
        Func<int, string> _ = n =>
        {
            var s = new string[n];
            for (int a = -1, j = 0, i, m = n - 1, x = m; j <= m * (Math.Pow(2, n) * n + 1);)
            {
                i = j++ % n;
                s[i] += x‌​ == i ? "o" : "_";
                if (i == m & n > 1)
                {
                    x += a;
                    a *= x % m == 0 ? -1 : 1;
                }
            }
            return string.Join("\n", s);
        };

        Console.Write(_(4));
        Console.ReadKey();
    }
}

संपादित करें: -7 बाइट्स @KevinCruijssen के लिए धन्यवाद

संपादित करें: -2 बाइट्स, यदि सरलीकृत हो


1
+1 कुछ चीजें गोल्फ के लिए: इनट्स को लूप के अंदर रखा जा सकता है, और आप जोड़ भी सकते हैं ,i; यदि आप जाँच iके n-1बाद पुनः उपयोग कर सकते हैं ; ||हो सकता है |; j++हटाया जा सकता है और ++इसमें जोड़ा जा सकता है j। तो कुल मिलाकर: (n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};( 173 बाइट्स )
केविन क्रूज़सेन

@ केविनक्रूजसेन अच्छा कैच! मैं एक बार काम से वापस आऊंगा।
सीएसआरपी

@KevinCruijssen मैं allready बाहर golfed ||और &&लेकिन पूरा कार्यक्रम में तो रखा।
CSharpie

3

पायथ , 30 बाइट्स

jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^

एक प्रोग्राम जो एक पूर्णांक का इनपुट लेता है और परिणाम को प्रिंट करता है। के "बजाय एक उद्धरण चिह्न का उपयोग करता है o

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

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

jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^    Program. Input: Q
jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^QQ  Implicit input fill
      ]                           Yield a one-element list, A
        *dtQ                      cotaining Q-1 spaces
       +    N                     appended with a quote mark.
             h*tQ^2Q              Yield 1+(Q-1)*2^Q
     *                            Repeat A that many times, giving B
                       UQ         Yield [0, 1, 2, ..., Q-1]
                      J           (Store that in J)
                     +   tP_J     Append the reverse of J, discarding the first and last
                                  elements
                    *        ^QQ  Repeat the above Q^Q times, giving C
    V                             Vectorised map. For each pair [a,b] from B and C:
  .<                               Cyclically rotate a left by b characters
 C                                Transpose
j                                 Join on newlines
                                  Implicitly print

3

अजगर 2 , 115 113 108 98 बाइट्स

lambda n:'\n'.join(map(''.join,zip(*[' '*abs(i)+'o'+~-n*' 'for i in range(-n+1,n-1)*2**~-n])))+'o'

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

range(-n+1,n-1)नीचे और oउत्पन्न करने के बीच रिक्त स्थान की पूर्ण संख्या बनाने के लिए उपयोग करना

  o
 o
o
 o

और फिर अधिक प्रतियों को जोड़ते हुए, 90 and सबकुछ घुमाते हुए और oनीचे दाईं ओर अंतिम जोड़ दिया


3

जे , 58 47 बाइट्स

' o'{&:>~[:(,.}."1)&.>/(2^<:)#<@(|.,.}."1)@=@i.

@ दोष के समाधान से पहचान मैट्रिक्स विचार का उपयोग करके 11 बाइट्स सहेजे गए

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

परिभाषा का एक सीधा आवेदन।

व्याख्या

के लिए n = 3, आदेश n की पहचान मैट्रिक्स बनाता है ।

1 0 0
0 1 0
0 0 1

फिर इसे बनाने के लिए मिरर करें

0 0 1 0 0
0 1 0 1 0
1 0 0 0 1

उस 2 एन -1 बार दोहराएं और डुप्लिकेट पर प्रत्येक पंक्ति के सिर को छोड़ दें

0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1

उन मानों का उपयोग चार्ट में सरणी के रूप में [' ', 'o']2d चार सरणी के आउटपुट के लिए करें

  o   o   o   o  
 o o o o o o o o 
o   o   o   o   o


3

जेली , 11 बाइट्स

ŒḄ¡ḶUz1Ṛa⁶Y

TryItOnline!

कैसे?

उपयोग किए जाने योग्य मुद्रण योग्य वर्ण है 0

कंगारुओं के विषय पर डेनिस के अपने पिछले प्रश्न के उत्तर की विधि पर आधारित है ।

ŒḄ¡ḶUz1Ṛa⁶Y - Main link: n                      e.g. 3
ŒḄ          - bounce, initial implicit range(n) e.g. [1,2,3,2,1]
  ¡         - repeat n times                    e.g. [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1]
                  i.e. [1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1]
   Ḷ        - lowered range (vectorises)        e.g. [[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0]]
    U       - upend (vectorises)                e.g. [[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0]]
     z1     - transpose with filler 1
       Ṛ    - ...and reverse                    e.g. [[1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1],
                                                      [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
                                                      [0,1,2,1,0,1,2,1,0,1,2,1,0,1,2,1,0]]
        a⁶  - logical and with space character (all non-zeros become spaces)
          Y - join with line feeds              e.g.    0   0   0   0  
                                                       0 0 0 0 0 0 0 0 
                                                      0   0   0   0   0

2
अच्छा लगा। मेरे संदर्भ समाधान के साथ इस संबंध ŒḄ¡Ṭ€z0o⁶ṚY
डेनिस



2

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

->\n{my @a;@a[$_;$++]="o" for [...] |(n-1,0,n-1)xx 2**n/2;say .join for @a».&{$_//" "}}

oएक 2 डी सरणी में सम्मिलित करता है , और फिर इसे प्रिंट करता है।



1

जावा 8, 254 बाइट्स

golfed:

n->{if(n==1)return"o";int k,x,y,m=n+n-2;char[][]p=new char[n][m];for(y=0;y<n;++y)for(x=0;x<m;)p[y][x++]=' ';for(k=0;k<m;++k)p[k<n?n-k-1:k-n+1][k]='o';String s="";for(y=0;y<n;++y){for(k=0;k<1<<(n-1);++k)for(x=0;x<m;)s+=p[y][x++];if(y==n-1)s+='o';s+='\n';}

Ungolfed:

import java.util.function.*;

public class LeapingKangaroos {

  public static void main(final String[] args) {
    for (int i = 1; i <= 4; ++i) {
      System.out.println(toString(n -> {
        if (n == 1) {
          return "o";
        }
        int k, x, y, m = (n + n) - 2;
        char[][] p = new char[n][m];
        for (y = 0; y < n; ++y) {
          for (x = 0; x < m;) {
            p[y][x++] = ' ';
          }
        }
        for (k = 0; k < m; ++k) {
          p[k < n ? n - k - 1 : (k - n) + 1][k] = 'o';
        }
        String s = "";
        for (y = 0; y < n; ++y) {
          for (k = 0; k < (1 << (n - 1)); ++k) {
            for (x = 0; x < m;) {
              s += p[y][x++];
            }
          }
          if (y == (n - 1)) {
            s += 'o';
          }
          s += '\n';
        }
        return s;
      } , i));
      System.out.println();
      System.out.println();
    }
  }

  private static String toString(final IntFunction<String> func, final int level) {
    return func.apply(level);
  }

}

कार्यक्रम का उत्पादन:

o

 o o
o o o


  o   o   o   o 
 o o o o o o o o
o   o   o   o   o


   o     o     o     o     o     o     o     o  
  o o   o o   o o   o o   o o   o o   o o   o o 
 o   o o   o o   o o   o o   o o   o o   o o   o
o     o     o     o     o     o     o     o     o

0

PHP, 157 बाइट्स

for($i=$n=$argv[1],$r=str_repeat;$i>0;)echo$r($r(' ',$i-1).'o'.$r(' ',2*$n-2*$i-1).($i==$n|$i==1?'':'o').$r(' ',$i-2),2**($n-1)).($i--==1&$n!=1?'o':'')."\n";

Ungolfed:

for($i=$n=$argv[1];$i>0;) {

    // Spacing from beginning of pattern to first 'o'   
    $o  = str_repeat(' ',$i-1); 

    // First 'o' for the ascent
    $o .= 'o'; 

    // Spacing between ascent and descent
    $o .= str_repeat(' ',2*$n-2*$i-1); 

    // Second 'o' for the descent, unless we are at the apex or the bottom
    $o .= ($i==$n|$i==1?'':'o'); 

    // Spacing to the end of the pattern
    $o .= str_repeat(' ',$i-2); 

    // Repeat the pattern 2^(n-1) times
    echo str_repeat($o, 2**($n-1)); 

    // Output final 'o' if we are at the bottom in the last pattern
    echo $i--==1&$n!=1?'o':''; 

    // End of line 
    echo "\n"; 

}

आप हर जगह ले सकता है 'o'के साथ 1और हर ''के साथ 0। आशा है कि काम करता है, इसके अलावा, रिक्त स्थान द्वारा प्रतिस्थापित किया जा सकता है Oया 9। नियम के अनुसार, पैटर्न महत्वपूर्ण है। लेकिन पहले सत्यापित करें
इस्माइल मिगुएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.