그것은 하나의 이상한 산입니다!


10

에서 영감을 받음 그 위에 홀수로 작은 산의 사슬을 표시하십시오! 에 의해 @sygmei .

거대한 산을 가질 수 있는데 왜 산 사슬이 있습니까?

입력 번호를 입력하고 입력 번호까지 모든 홀수 번호를 가진 산을 인쇄하는 프로그램을 만드십시오.

( "남쪽 서쪽"은을 의미 directly below and to the left하고 "남쪽 동쪽"은을 의미 directly below and to the right)

모든 수에는 /남서쪽과 \남동쪽이 있습니다. 처음부터 시작 1하여 다음 숫자는 남서쪽 /또는 남동쪽으로 이동 합니다 \. 다음 숫자는 가능한 가장 위쪽과 왼쪽에 가장 가까운 줄에 들어갑니다.

multidigit 번호는 단지 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보다 작은 것으로 가정 할 수 있습니다 (제외).

후행 공백은 정상이며 모든 행에 동일하면 추가 선행 공백이 좋습니다.

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

더 많은 테스트 사례가 필요한 경우 여기에 대한 답변을 온라인 에서 찾을 수 있습니다 (Python의 repl.it).


입력 값이 101보다 작 으면 왜 121 개의 테스트 케이스가 있습니까?
LegionMammal978

@ 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

몇 주 전에 쓴 j에ÅɹL£D€g__ÏRv"/ \ "yg×N·©úˆy4jJðÛ®>úˆ}¯R» 대한 버그 수정 만 푸시하면 5 바이트를 절약 할 수있었습니다 .


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

마지막 두 줄을으로 변경할 수 있습니다 while y:print' '*-~len(y)+y.pop(0). 3 바이트를 절약합니다.
Artyer

1
@로드 Oops ... 나는 %-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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.