मेरे बच्चे के लिए एक सीढ़ी का निर्माण करें


25

दूसरे दिन, मेरे बेटे ने मुझे लेगो-ईश ब्लॉक का उपयोग करके उसे एक सीढ़ी बनाने के लिए कहा। और मैं कुछ इस तरह से आया:

सीढ़ी

तब मेरे बच्चे ने मुझसे कम से कम बाइट्स का उपयोग करके एक प्रोग्राम के लिए कहा जिसने कंप्यूटर स्क्रीन में एक समान सीढ़ी उत्पन्न की। मैं में उतना अच्छा नहीं हूं , इसलिए मुझे आपकी मदद की जरूरत है। मुझे एक कार्यक्रम की आवश्यकता है:

  • सीढ़ी के लिए आवश्यक स्तरों की संख्या के साथ एक सकारात्मक पूर्णांक प्राप्त करता है।
  • एक सीढ़ी की एक ड्राइंग आउटपुट करता है, जिस पैटर्न को आप छवि में देखते हैं।

आउटपुट टेक्स्ट फॉर्मेट में होगा लेकिन ईंटों को एक दूसरे से अलग किया जा सकता है। उदाहरण के लिए, आप '█' वर्ण को आधे ब्लॉक के रूप में उपयोग कर सकते हैं और इसे अपने इच्छित रंग में रंग सकते हैं या अपनी पसंद का कोई भी वर्ण चुन सकते हैं।

प्रतिबंध:

  • ब्लॉक को तीन अलग-अलग रंगों का होना चाहिए, जिसका उपयोग यथासंभव लंबे समय तक किया जाएगा (यदि इनपुट 1 या 2 है तो सभी तीन रंगों का उपयोग करने के लिए पर्याप्त ब्लॉक नहीं हैं)। यदि आप चाहें, तो आप उदाहरण के लिए '░▒▓' वर्णों का उपयोग कर सकते हैं, या केवल तीन अलग-अलग वर्णों का चयन कर सकते हैं।
  • एक ही रंग या पैटर्न के दो ब्लॉक एक पंक्ति में एक साथ नहीं हो सकते हैं।

जब तक सीढ़ी खींची जाती है तब तक मेरा बेटा वास्तव में रिक्त स्थान या नई लाइनों की परवाह नहीं करता है।

उदाहरण (पात्रों की खराब पसंद के लिए खेद है):

Input: 1
Output:
██

Input: 2
Output:
██
 ▓▓

Input: 3
Output:
██
 ▓▓
██░░

Input: 5
Output:
██
 ██
██░░
 ██░░
██░░▓▓

17
अपने बच्चे को बताएं कि मज़े का निर्माण / उसे स्वयं प्रोग्रामिंग करना है :-)
लुइस मेंडो

3
साइट पर आपका स्वागत है! एएससीआईआई आर्ट और ग्राफिकल आउटपुट को मिलाकर आमतौर पर दो तरह की चुनौतियों का सामना करना पड़ता है। इसके अलावा, यदि आप ASCII के लिए जाते हैं, तो मैं वास्तविक ASCII वर्णों का उपयोग करने की अनुमति दूंगा (मुझे लगता है कि आप पहले से ही करते हैं, लेकिन शायद अधिक स्पष्ट हो), क्योंकि कुछ भाषाओं में गैर ASCII पात्रों के साथ कठिनाई हो सकती है
लुइस मेंडू

2
FYI करें ब्लॉक को
डुप्लो

10
@cairdcoinheringaahing डुप्लो में गोल बटन नहीं हैं।
क्रिस्टोफ

3
@cairdcoinheringaahing प्रश्न में ब्लॉक डुप्लो नहीं हैं, डुप्ले लेगो संगत हैं , जो लेगो बेबी हैं । वे कर रहे थे मूल रूप से Duplo Primo को फोन किया और काश वे तुलना में एक अलग नाम था या तो उन दोनों में से है, लेकिन वे तकनीकी रूप से दोनों लेगो और Duplo तुलना में एक अलग उत्पाद हैं।
Draco18s

जवाबों:


5

जेली ,  21 19  16 बाइट्स

d2SR+%3x2⁶;ṙḂµ€Y

एक पूर्ण कार्यक्रम परिणाम को प्रिंट करता है।

उपयोग करता है 00, 11और 22ब्लॉक के रूप में।

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

कैसे?

d2SR+%3x2⁶;ṙḂµ€Y - Main link: number n
             µ€  - for €ach "row" in n (i.e. for row, r = 1 to n inclusive):
d2               -   divmod 2   -> [integer-divide by 2, remainder] i.e. [r/2, r%2]
  S              -   sum        -> r/2 + r%2
   R             -   range      -> [1, 2, 3, ..., r/2 + r%2]
    +            -   add r      -> [r+1, r+2, r+3, ..., r + r/2 + r%2]
     %3          -   modulo 3   -> [r%3+1, r%3+2, r%3+0, ..., (r + r/2 + r%2)%3]
                 -   e.g.: r: 1  , 2  , 3    , 4    , 5      , 6      , 7       , ...
                             [2], [0], [1,2], [2,0], [0,1,2], [1,2,0], [2,0,1,2], ...
       x2        -   times 2 - repeat each twice (e.g. [2,0,1,2] -> [2,2,0,0,1,1,2,2]
         ⁶       -   literal space character
          ;      -   concatenate (add a space character to the left)
            Ḃ    -   r mod 2 (1 if the row is odd, 0 if it is even (1 at the top))
           ṙ     -   rotate (the list) left by (r mod 2)
               Y - join with newlines
                 - implicit print (no brackets printed due to the presence of characters)

11

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

i=2
exec"print(i%2*' '+`2%i*1122`*i)[:i];i+=1;"*input()

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

22, 44शीर्ष पंक्ति को छोड़कर, के ब्लॉक के बीच चक्र 00। उदाहरण के लिए, इनपुट 10 पर, प्रिंट

00
 22
2244
 2244
224422
 224422
22442244
 22442244
2244224422
 2244224422

i=2,3,..विषम लंबाई के लिए एक स्थान बनाकर बढ़ती हुई लंबाई की पंक्तियों को , पैटर्न के iसमय को दोहराते हुए , और लंबाई को जोड़ते हुए i। पैटर्न 2244सभी पंक्तियों के लिए है, पहले वाले को छोड़कर i=2जिसके लिए यह है 0। यह अंकगणितीय अभिव्यक्ति के साथ प्राप्त किया जाता है 2%i*1122


1
केस 3. के लिए केवल दो रंगों का उपयोग करता है
क्रिस्टोफ

बहुत चतुर तय!
चार्ली

4

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

n=>eval(`for(s=11,i=1;i++<n;)s+='\\n'+(' '+'2233'.repeat(n)).substr(i%2,i+1);s`)


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

पिछला समाधान।

n=>[11,...Array(n).fill(' '+'2233'.repeat(n)).map((r,n)=>r.slice(n%2,n+3+n%2))].join`
`

3

एसओजीएल , 31 28 27 25 बाइट्स

∫³2\@*O"²b“2⁵I%*r*;I»«nKp

स्पष्टीकरण:

∫                          iterate input times, pushing 1-indexed counter
 ³                         get 3 total copies of it on stack
  2\                       1 if divides by 2, else 0
    @*                     get that many spaces
      O                    output in a new line
       "²b“                push 1122
           2⁵I%*           multiply 1122 by 2%(iteration+1)
                r          convert to string
                 *         multiply by iteration
                  ;I»«     get one iteration variable ontop of stack
                      n    increase, floor divide by 2, multiply by 2 (gets the amount of bricks in a line)
                       Kp  split that multiplied string in pieces of that length

9 के लिए इस तकनीक
उदाहरण आउटपुट का उपयोग करना :

00
 22
2244
 2244
224422
 224422
22442244
 22442244
2244224422

गैर-प्रतिस्पर्धात्मक, 22 बाइट्स

∫³2\@*O"²b“2⁵I%*;I»«mp

आदेश mको 1 एसओजीएल प्रतिबद्ध पर प्रलेखित किया गया है , बस कार्यान्वित नहीं किया गया है।


3

05AB1E , 22 21 20 18 17 बाइट्स

दिलचस्प तथ्य का उपयोग करता है कि 4^(N+2)/5 = [3,12,51,204,...] = b[11,1100,110011,11001100,...]

F4NÌm5÷bDðì}r·IF,

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

व्याख्या

F                     # for N in 0...input-1 do
 4                    # push 4
  NÌ                  # push N+2
    m                 # push 4^(N+2)
     5÷               # integer division by 5
       b              # convert to binary
        D             # duplicate
         ðì           # prepend a space to the copy
           }          # end loop
            r         # reverse stack
             ·        # multiply top of stack by 2
              IF      # input times do
                ,     # print with newline

क्षमा करें, मैंने अपना उत्तर बेहतर कर लिया है - हालांकि अच्छा तरीका है!
जोनाथन एलन

@JonathanAllan: बेशक आपने;) धन्यवाद! अपने जवाब में mod2 रोटेशन के साथ इंडेंटेशन को संभालने का बहुत अच्छा विचार।
इमीना

2

PHP, ६१ ५ ९

aa<?for(;++$i<$argn;)echo"
",str_pad(" "[~$i&1],2+$i,bbcc);

अजगर संस्करणों की तरह बहुत काम करता है, लेकिन यदि संभव हो तो सभी तीन रंगों का उपयोग करता है। कोई अनुगामी नई रेखा नहीं।

-2 bytes by @user63956. Thanks !

1
आप दो बाइट्स के साथ बचा सकते हैं aa<?for...
user63956

1

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

VQI!%hN2pd)Vh/N2p*2@G%+NH3)pb

इसे ऑनलाइन टेस्ट करें!

स्पष्टीकरण

VQI!%hN2pd)Vh/N2p*2@G%+NH3)pb

VQ                               For N in range(0, input)
  I!%hN2pd)                      If N is odd, print a leading space
           Vh/N2          )      For H in range(0, N / 2 + 1)
                   @G%+NH3       Select the letter at position (N + H) % 3 in the alphabet
                 *2              Then make it a two letters string ("aa" or "bb" or "cc")
                p                Print it
                           pb    End the line by printing a new line

मुझे यकीन है कि उस कोड को छोटा करने के कई तरीके हैं, लेकिन मैं अभी थक गया हूं ... बाद में कोशिश करूंगा।


0

बैच, 125 बाइट्स

@set s=█
@for /l %%i in (2,1,%1)do @call:c
:c
@set s= %s:█= %
@set s=%s:▓=█%
@set s=%s:░=▓%
@set s=%s:  =░░%
@echo %s%

नोट: इसे CP437 या CP850 या कुछ इस तरह से सेव करें। हर बार रंगों को घुमाकर काम करता है। चूँकि मैं रोटेशन करने के लिए स्ट्रिंग पर मैप नहीं कर सकता, इसलिए मैं एक अस्थायी चरण के रूप में रिक्त स्थान का उपयोग करके, चार प्रतिस्थापन का उपयोग करता हूं। यह तब भी मुझे हर पंक्ति में एक स्थान उपसर्ग करने की अनुमति देता है, ताकि दो स्थान एक नए ब्लॉक में बदल जाएं। नमूना उत्पादन:

░░
 ▓▓
░░██
 ▓▓░░
░░██▓▓
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.