Bu garip bir dağ!


10

Esinlenerek Üzerinde tek bir sayı bulunan küçük dağlardan oluşan bir zincir görüntüle! @sygmei tarafından .

Büyük bir tane alabileceğinizde neden bir dağ zinciri var?

Bir giriş numarası alan ve giriş numarasına kadar her tek sayıyla bir dağ basan bir program yapın.

("Güney batı" directly below and to the leftve "güney doğu" demek directly below and to the right)

Her sayının bir /güney batısı ve bir \güney doğusu olacaktır. En 1üstten başlar ve bir sonraki sayı a'nın güney batısına /veya güney doğusuna gider \. Bir sonraki sayı en üste ve en sola en yakın satıra gider.

Çok basamaklı bir sayı için, sadece ilk basamağın diğer basamaklarla doğru yerde olması gerekir ve sadece ilk basamağın olması \ve /ondan çıkması gerekir.

1 veya 2'ye kadar olan dağ sadece:

 1
/ \

3 veya 4'e kadar bir dağ sadece:

   1
  / \
 3
/ \

25 veya 26 için:

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

Girdinin 121 olduğu son iki satır:

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

Ve girdinin 1019 olduğu son iki satır:

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

Girişin 0'dan büyük ve 10001'den (özel) daha düşük olacağını varsayabilirsiniz.

Sondaki boşluklar iyi ve tüm satırlarda aynı olduğu sürece ekstra önde gelen boşluklar iyi.

Bu , bu yüzden bayttaki en kısa program kazanır.

Daha fazla test senaryosuna ihtiyacınız varsa buna çevrimiçi bir cevap bulabilirsiniz (Python'da repl.it'te).


Giriş 101'den küçükse, neden 121 test çantanız var?
LegionMammal978

@ LegionMammal978 10001 demek istedim, şimdi düzeltildi. Teşekkür ederim!
Artyer

1
Orijinalinden daha zor, bir deneyeceğim: D
Sygmei

Yanıtlar:


5

05AB1E , 54 52 47 46 bayt

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

Çevrimiçi deneyin!

açıklama

                                                # 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

Ben ÅɹL£D€g__ÏRv"/ \ "yg×N·©úˆy4jJðÛ®>úˆ}¯R»sadece birkaç hafta önce yazdım j için bu bugfix itti olsaydı ile 5 bayt kaydedilmiş olabilir : /


3

Toplu, 335 bayt

@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 eminim cmd /Q /C file.bat3 ekstra bayt sayar, ama yine de daha iyidir @echo off. Bunu Toplu ipuçları sorusuna göndermelisiniz.
Neil

3

Piton 2, 160 149 143 bayt

11 bayt tasarruf için teşekkürler TFeld ve 6 bayt tasarruf için 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)

Yapabilir i=len(y)ve -10 bayt for l in y:print' '*i+l;i-=1yerinefor i,l in enumerate(y):print(len(y)-i-1)*' '+l
TFeld

Ayrıca bir boşluktan önce olduğu \\ için değiştirebileceğinizi düşünüyorum\
TFeld

Son 2 satırı olarak değiştirebilirsiniz while y:print' '*-~len(y)+y.pop(0). 3 bayt tasarruf sağlar.
Artyer

1
@Rod Oops ... %-4d4 ile
yaslamak istiyordum

1
@Artyer woah, sola yaslamak için bu negatif değer benim için yeni: D, nice trick
Rod

2

Perl, 134

-pSeçenek için 133 bayt + 1

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

Biçimlendirilmiş sürüm (orijinal golf edilmiş sürüm \ n yerine gerçek "yeni satırlar kullanır")

$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

Bash, 425 bayt

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 }

biçimlendirilmiş:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.