वह एक अजीब पहाड़ है!


10

से प्रेरित होकर यह की चोटी पर एक विषम संख्या के साथ थोड़ा पहाड़ों की एक श्रृंखला प्रदर्शन! @sygmei द्वारा ।

जब आपके पास एक बड़े पैमाने पर पहाड़ हो सकते हैं तो पहाड़ों की श्रृंखला क्यों होती है?

एक प्रोग्राम बनाएं जो इनपुट नंबर लेता है और हर विषम संख्या के साथ एक पहाड़ को प्रिंट करता है।

(जहाँ "दक्षिण पश्चिम" का अर्थ है directly below and to the left, और "दक्षिण पूर्व" का अर्थ है directly below and to the right)

हर संख्या में इसका एक /दक्षिण पश्चिम और एक \दक्षिण पूर्व होगा। यह 1शीर्ष पर से शुरू होता है , और अगली संख्या एक के /दक्षिण या दक्षिण पूर्व में जाएगी \। अगला नंबर सबसे ऊपर और सबसे बाईं ओर की पंक्ति में जाएगा।

एक मल्टीडिजिट संख्या के लिए, बस 1 अंक को दूसरे अंकों के साथ सीधे बाद में सही जगह पर होना चाहिए, और केवल पहला अंक होना चाहिए \और इससे /बाहर आना चाहिए ।

1 या 2 तक का पहाड़ है:

 1
/ \

3 या 4 तक का पहाड़ है:

   1
  / \
 3
/ \

25 या 26 के लिए:

         1
        / \
       3   5
      / \ / \
     7   9   11
    / \ / \ / \
   13  15  17  19
  / \ / \ / \ / \
 21  23  25
/ \ / \ / \

अंतिम दो लाइनें जहां इनपुट 121 है:

 111 113 115 117 119 121
/ \ / \ / \ / \ / \ / \

और अंतिम दो लाइनें जहां इनपुट 1019 है:

 993 995 997 999 1001100310051007100910111013101510171019
/ \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \

आप मान सकते हैं कि इनपुट 0 से अधिक और 10001 (अनन्य) से कम होगा।

अनुगामी रिक्त स्थान ठीक हैं, और अतिरिक्त प्रमुख स्थान तब तक ठीक होते हैं जब तक सभी लाइनों पर समान हो।

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

यदि आपको अधिक परीक्षण मामलों की आवश्यकता होती है, तो इसका एक अप्रतिष्ठित उत्तर यहां ( ऑनलाइन पायथन पर प्रतिकृति में) पाया जा सकता है ।


यदि इनपुट 101 से कम है, तो आपके पास 121 टेस्टकेस क्यों है?
लीजनमॉम्मल

@ LegionMammal978 मेरा मतलब था 10001, अब तय हुआ। धन्यवाद!
Artyer

1
मूल से कठिन, मैं इसे
आजमाऊंगा

जवाबों:


5

05AB1E , 54 52 47 46 बाइट्स

ÅɹL£D€g__ÏRv"/ \ "yg×N·©úˆyvy4yg-ð×}J®>úˆ}¯R»

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

व्याख्या

                                                # implicit input n
ÅÉ                                              # push a list of uneven numbers up to input
  ¹L£                                           # divide into sublists of length 1,2,3...n
     D€g__Ï                                     # remove empty sublists
           R                                    # reverse list
            v                                   # for each sublist
             "/ \ "                             # push the string "/ \ "
                   yg×                          # repeat it len(sublist) times
                      N·©ú                      # prepend (sublist index)*2 spaces
                          ˆ                     # add to global list
                           yv                   # for each number in sublist
                             y4yg-ð×            # prepend spaces until length is 4
                                    }           # end inner loop
                                     J          # join to string
                                      ®>ú       # prepend (sublist index)*2+1 spaces
                                         ˆ      # add to global list
                                          }     # end outer loop
                                           ¯    # push global list
                                            R   # reverse it
                                             »  # join rows by space and columns by newline
                                                # implicitly print

मैं के साथ 5 बाइट्स रक्षा कर सकता था ÅɹL£D€g__ÏRv"/ \ "yg×N·©úˆy4jJðÛ®>úˆ}¯R»अगर केवल मैं धक्का दे दिया था कि के लिए बग सुधार जे मैं कई हफ्तों पहले लिखा : /


3

बैच, 335 बाइट्स

@echo off
set i=
set/ac=w=0
:l
set i=  %i%
set/aw+=2,c+=w
if %c% lss %1 goto l
set s=
set t=
set/ac=w=1
for /l %%a in (1,2,%1) do call:c %%a
echo  %s%
echo%t%
exit/b
:c
if not %c%==0 goto g
echo%i%%s%
set i=%i:~2%
echo%i%%t%
set s=
set t=
set/aw+=1,c=w
:g
set n=%1   (three trailing spaces)
set s=%s%%n:~0,4%
set t=%t% / \
set/ac-=1

@Artyer मुझे पूरा यकीन है कि cmd /Q /C file.bat3 अतिरिक्त बाइट्स गिने जा रहे हैं, लेकिन यह अभी भी बेहतर है @echo off। आपको बैच युक्तियाँ पर पोस्ट करना चाहिए।
नील

3

पायथन 2, 160 149 143 बाइट्स

11 बाइट बचाने के लिए धन्यवाद TFeld और 6 बाइट बचाने के लिए Artyer

x=range(1,input()+1,2);y=[];i=1
while x:y+=[''.join('%-4d'%j for j in x[:i]),'/ \ '*len(x[:i])];x=x[i:];i+=1
while y:print' '*~-len(y)+y.pop(0)

आप क्या कर सकते हैं i=len(y)और for l in y:print' '*i+l;i-=1के बजाय for i,l in enumerate(y):print(len(y)-i-1)*' '+l-10 बाइट्स के लिए
TFeld

इसके अलावा मुझे लगता है कि आप बदल सकते हैं \\ करने के लिए \ है, क्योंकि यह एक अंतरिक्ष से पहले है
TFeld

आप अंतिम 2 लाइनों को बदल सकते हैं while y:print' '*-~len(y)+y.pop(0)। यह 3 बाइट्स बचाता है।
16

1
@ राड उफ़ ... मेरा मतलब %-4dहै कि इसे 4 द्वारा औचित्यपूर्ण छोड़ दिया गया है
Artyer

1
@Artyer woah, बायीं ओर का यह नकारात्मक मान मेरे लिए नया है: D, अच्छी चाल
Rod

2

पर्ल, 134

-pविकल्प के लिए 133 बाइट्स + 1

 $l="/ \\ ";$t=" ";while($c++<$_) {$t.=sprintf'%-4d',$c++;$v.=$l;if ($i++>=$j){$t=~s/^/  /gm;$t.="
  $v
 ";$i=$v="";$j++}}$_="$t
$v";

स्वरूपित संस्करण (मूल गोल्फ संस्करण \ n के बजाय वास्तविक "नई लाइनों" का उपयोग करता है)

$l="/ \\ ";
$t=" ";
while($c++<$_) {
   $t.=sprintf'%-4d',$c++;
   $v.=$l;
   if ($i++>=$j){
      $t=~s/^/  /gm;
      $t.="\n  $v\n ";
      $i=$v="";
      $j++
   }
}
$_="$t\n$v";

2

बैश, 425 बाइट्स

f() { k=0; o=""; l=1; for (( c=1; c<=$1; c++ )); do o="$o$c "; let c++ k++; if [ $l -eq $k ]; then o=$o"\n"; k=0; let l++; fi; done; s=$[$(echo -e $o | wc -l)*2-1]; p() { for c in $(seq $1); do echo -n " "; done }; IFS=$'\n'; for n in $(echo -e $o); do unset IFS; p $s; let s--; for w in $n; do echo -n "$w"; p $[4-${#w}]; done; echo; p $s; for c in $(seq $(echo $n|wc -w)); do echo -n "/ \ "; done; echo; let s-- j++; done }

प्रारूपित:

l=1
k=0
o=""
for (( c=1; c<=$1; c++ ))
do
        o="$o$c "
        let c++ k++
        if [ $l -eq $k ]
        then
                o=$o"\n"
                k=0
                let l++
        fi
done
s=$[$(echo -e $o | wc -l)*2-1]
p() {
        for c in $(seq $1)
        do
                echo -n " "
        done
}
IFS=$'\n'
for n in $(echo -e $o)
do
        unset IFS
        p $s
        let s--
        for w in $n
        do
                echo -n "$w"
                p $[4-${#w}]
        done
        echo
        p $s
        for c in $(seq $(echo $n|wc -w))
                do echo -n "/ \ "
        done
        echo
        let s-- j++
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.