นั่นเป็นภูเขาที่แปลกประหลาดอย่างหนึ่ง!


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
/ \ / \ / \ / \ / \ / \

และสองบรรทัดสุดท้ายที่อินพุตคือ 1,019:

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

คุณอาจคิดว่าอินพุตจะมากกว่า 0 และน้อยกว่า 1,0001 (พิเศษ)

ช่องว่างต่อท้ายเป็นปกติและพื้นที่นำหน้าพิเศษนั้นใช้ได้ตราบใดที่มีเหมือนกันในทุกบรรทัด

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ

คุณสามารถหาคำตอบที่ไม่ได้รับการตอบโต้ได้ทางออนไลน์ที่นี่ (ใน Python สำหรับ repl.it) หากคุณต้องการกรณีทดสอบเพิ่มเติม


หากอินพุตน้อยกว่า 101 แสดงว่าทำไมคุณถึงมีเคสทดสอบ 121 ชิ้น
LegionMammal978

@ LegionMammal978 ฉันหมายถึง 1,0001 คงที่ตอนนี้ ขอบคุณ!
Artyer

1
หนักกว่าเดิมฉันจะลองดู: D
Sygmei

คำตอบ:


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»ถ้าเพียงฉันผลักข้อผิดพลาดนั้นสำหรับjฉันเขียนหลายสัปดาห์ที่ผ่านมา: /


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.batนับ 3 ไบต์พิเศษ @echo offแต่ก็ยังดีกว่า คุณควรโพสต์สิ่งนั้นในคำถามเคล็ดลับแบทช์
Neil

3

Python 2, 160 149 143 ไบต์

ขอขอบคุณ TFeld สำหรับการบันทึก 11 ไบต์และ Artyer สำหรับการบันทึก 6 ไบต์

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 ไบต์
Artyer

1
@Rod โอ๊ะโอ ... ฉันตั้งใจ%-4dจะทิ้งมันไว้โดย 4
Artyer

1
@Artyer woah, ค่าลบนี้เพื่อปรับชิดซ้ายเป็นเรื่องใหม่สำหรับฉัน: D, เคล็ดลับดี
Rod

2

Perl, 134

133 ไบต์ + 1 สำหรับ-pตัวเลือก

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

เวอร์ชันที่จัดรูปแบบ (เวอร์ชัน golfed ดั้งเดิมใช้ "new lines" จริงแทน \ 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

Bash ขนาด 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.