วาดส่วนโค้งของลูกบอล


35

วาดวิถีพาราโบลาของลูกบอลโยน

vอินพุตคือความเร็วขึ้นลูกที่เริ่มต้นเป็นจำนวนเต็มบวก ทุกวินาทีลูกบอลเคลื่อนที่ไป1ทางขวาและvช่องว่างในแนวตั้งจากนั้นvลดลง1เนื่องจากแรงโน้มถ่วง ดังนั้นความเร็วสูงขึ้นในที่สุดขั้นตอนที่ลงมาจากvไป0และลงไป-vในที่สุดก็ตกกลับลงไปที่ความสูงเริ่มต้น

ตำแหน่งของลูกบอลติดตามพาราโบลา ที่ตำแหน่งแนวนอนxความสูงของมันคือy=x*(2*v+1-x)/2โดย(0,0)ตำแหน่งเริ่มต้นของลูกบอลที่ด้านล่างซ้าย

เอาท์พุท ASCII ศิลปะของวิถีลูกด้วยOพิกัดของมันที่เคยครอบครอง เอาต์พุตควรเป็นข้อความแบบหลายบรรทัดเดี่ยวไม่ใช่ภาพเคลื่อนไหวของเส้นทางเมื่อเวลาผ่านไป

เอาต์พุตไม่ควรมีการขึ้นบรรทัดใหม่นำหน้าและขึ้นบรรทัดใหม่ไม่เกินหนึ่งบรรทัด บรรทัดล่างควรล้างด้วยขอบด้านซ้ายของหน้าจอนั่นคือไม่มีช่องว่างนำหน้า ช่องว่างต่อท้ายตกลง คุณอาจสันนิษฐานว่าความกว้างของบรรทัดเอาต์พุตในเทอร์มินัลผลลัพธ์

v = 1

 OO 
O  O

v = 2

  OO  
 O  O 

O    O

v = 3

   OO   
  O  O  

 O    O 


O      O

v = 4

    OO    
   O  O   

  O    O  


 O      O 



O        O

v = 10

          OO          
         O  O         

        O    O        


       O      O       



      O        O      




     O          O     





    O            O    






   O              O   







  O                O  








 O                  O 









O                    O

ที่เกี่ยวข้อง: การจำลองลูกใหญ่


ลีดเดอร์บอร์ด:


เราสามารถนำรายการบรรทัดออกมาได้หรือไม่?
Rɪᴋᴇʀ

@Riker Nope สตริงที่มีการขึ้นบรรทัดใหม่
xnor

เกี่ยวข้องอย่างหลวม ๆ : codegolf.stackexchange.com/q/110410
Titus

ฉันจำเป็นต้องมีบัญชีสำหรับ V> 0 หรือไม่
nmjcman101

ใช่ v จะเป็นค่าบวก
xnor

คำตอบ:


17

ถ่าน , 18 16 13 ไบต์

-3 ไบต์ขอบคุณ@Neil !

F⊕N«←OM⊕ι↓»‖C

คำอธิบาย

F⊕N«        »    For ι (implicitly from 0) to (1 + input as number)
       ←O          Print O, with print direction rotated 180 degrees
         M⊕ι↓     Move 1+ ι units down

                ‖C Reflect (in the default direction, right), leaving original intact

ลองออนไลน์! ลิงค์คือรหัส verbose


ฉันชอบอันนี้มาก +1; เอาท์พุทของ OP ยังใช้ตัวพิมพ์ใหญ่ "O" (ไม่ใช่ว่ามันมีความสำคัญเลยฮ่า ๆ )
อัลเบิร์ต Renshaw

หากคุณใช้งาน↘Oคุณสามารถวนลูปจาก 0 ถึง N แบบรวมแทนซึ่งจะช่วยให้คุณประหยัดสองไบต์ทันที
Neil

@ Neil ขอบคุณ! นี่เป็นโพสต์ที่เก่ามาก: P (และฉันสงสัยว่าฉันควรจะใช้คุณสมบัติใหม่กว่านี้หรือเปล่า?)
ASCII-only

พูดอย่างเคร่งครัดฉันได้บันทึกไว้เพียงคุณเท่านั้นที่ 1 ไบต์เพื่อให้ห่างไกลกับอีกสองไบต์คุณถูกแทนที่ด้วย⁺¹ อย่างไรก็ตามตอนนี้คุณได้ย้ายจาก‖CไปยังOคุณสามารถบันทึกไบต์อื่นด้วยการเขียน↙OMι↓ดังนั้นฉันกลับไปที่การประหยัดสองไบต์อีกครั้ง
Neil

นอกจากนี้คุณลืมปรับปรุงลิงค์ TIO ของคุณ ในทางเทคนิคแล้วฉันเชื่อว่าตอนนี้เราอนุญาตฟีเจอร์ที่ใหม่กว่า แต่ฉันไม่สามารถรับเครดิตสำหรับไบต์เหล่านั้นได้
Neil

6

C, 93 92

(หมายเหตุมีคนถึง 87 ในความคิดเห็น)

y,n;f(s){for(y=0;y<=s;){printf("%*c%*c",s-y+1,79,y*2+1,79);for(n=++y;s+1-n&&n--;)puts("");}}

ลองออนไลน์!


อ่านได้:

y,n;f(s){
    for(y=0;y<=s;){
        printf("%*c%*c",s-y+1,79,y*2+1,79);
        for(n=++y;s+1-n&&n--;)puts("");
    }
}

หมายเหตุ:

ฉันสามารถยุบทั้งสองเพื่อวนซ้ำเป็นวงเดียวโดยวนซ้ำจำนวนบรรทัดทั้งหมดที่เอาต์พุตซึ่งกำหนดโดยสูตร: n*-~n/2+1

y,n,r;f(s){
    for(r=s,y=n=0;r<s*-~s/2+1;)
        y==n?printf("%*c%*c",s-y+1,79,y*2+1,79),y=0,++n:r++,y++,puts("");
}

แต่มันกลับกลายเป็นไบต์มากกว่าการใช้ลูปแยกสองตัว


คุณสามารถบันทึกหนึ่งไบต์โดยการเพิ่มsที่จุดเริ่มต้นเช่นนี้:y,n;f(s){++s;for(y=0;y<s;){printf("%*c%*c",s-y,79,y*2+1,79);for(n=++y;s-n&&n--;)puts("");}}
Steadybox

@Steadybox จะไม่รวบรวมสำหรับฉัน นอกจากนี้ฉันได้ 90 ไบต์เมื่อฉันนับว่า (หลังจากลบตัวอักษรช่องว่าง)
Albert Renshaw

ทั้งหมดที่ผมทำก็คือการเพิ่ม++s;ที่จุดเริ่มต้นแล้วที่เปลี่ยนแปลงy<=sไปy<sและs-y+1ไปs-yและs+1-nไปs-nดังนั้นจึงควรรวบรวม (และควรจะเป็น 91 bytes)
Steadybox

ดูเหมือนว่ามีบางอย่างผิดปกติกับการเข้ารหัสของรหัสบล็อกในความคิดเห็นของฉัน การคัดลอกและวางรหัสจากความคิดเห็นจะไม่รวบรวมสำหรับฉันเช่นกัน
Steadybox




4

Python 2, 76 ไบต์

x=input()
for i in range(x):print' '*(x-i),'O'+' '*i*2+'O'+'\n'*(i-x+1and i)

ค่อนข้างง่าย i-x+1and iเพื่อป้องกันไม่ให้พวงของการขึ้นบรรทัดใหม่ต่อท้าย


การย้ายขึ้นบรรทัดใหม่ไปที่จุดเริ่มต้นของการพิมพ์เช่น'\n'*(i-1)ประหยัด 7 ไบต์ในขณะที่หลีกเลี่ยงการขึ้นบรรทัดใหม่
Emigna

4

MATL , 19 17 ไบต์

Q:tqYsQ79Z?PtPv!c

ลองที่MATL Online! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

Q        % Implicitly input v. Add 1
:        % Push [1 2 ... v+1]
tq       % Duplicate and subtract 1: pushes [0 1 ... v]]
Ys       % Cumulative sum: gives [0 1 3 6 ...]
Q        % Add 1: gives [1 2 4 7 ...]
79       % Push 79 (ASCII for 'O')
Z?       % Create sparse matrix from column indices [1 2 3 4 ...],
         % row indices [1 2 4 7 ...], and data 79
P        % Flip vertically
tP       % Duplicate, flip vertically
v        % Concatenate the two matrices vertically
!        % Transpose
c        % Convert to char. Implicitly display. Char 0 is shown as space

4

05AB1E , 18 14 ไบต์

บันทึกแล้ว 4 ไบต์ขอบคุณAdnan

ƒ¶N×'ONúRÂJ}.c

ลองออนไลน์!

คำอธิบาย

ƒ                   # for N in [0 ... input]
 ¶N×                # push N newlines
    'O              # push "O"
      Nú            # pad with N spaces in front
        RÂ          # reverese and create a reversed copy
          J         # join everything to a string
           }        # end loop
            .c      # pad lines until centered 

สำหรับ 14 ไบต์: ƒ¶N×'ONúRÂJ}.c:)
Adnan

@Adnan ขอบคุณ! ฉันลอง.cกับรุ่นอื่น แต่มันก็ใช้งานไม่ได้ ลืมเกี่ยวกับการลองกับสิ่งนี้และลืมไปúแล้วว่ามีอยู่จริง :)
Emigna

ดีกว่าวิธี zip แน่นอนฉันเลือกวิธีที่น่าสนใจในแนวตั้ง
Magic Octopus Urn

4

JavaScript (ES6), 98 92 89 84 78 ไบต์

(-20 ไบต์ขอบคุณ Arnauld!)

f=(v,i=0)=>i>v?"":" "[r="repeat"](v-i)+0+" "[r](2*i)+0+`
`[r](i++<v&&i)+f(v,i)

โซลูชันแบบเรียกซ้ำ และนี่ก็เป็นครั้งแรกของฉันที่เคยตอบใน JavaScript ดังนั้นโปรดอ่อนโยน! ฉันยังคงเรียนรู้ภาษาที่เรียบร้อยทั้งหมดนี้มีให้ดังนั้นเคล็ดลับการเล่นกอล์ฟได้รับการชื่นชมอย่างมาก :)

ตัวอย่างการทดสอบ

คุณอาจต้องเลื่อนเพื่อดูผลลัพธ์ทั้งหมด

f=(v,i=0)=>i>v?"":" "[r="repeat"](v-i)+0+" "[r](2*i)+0+`
`[r](i++<v&&i)+f(v,i)
<input id=i min=1 type=number><button onclick=alert(f(document.getElementById("i").value))>Submit</button>


นอกจากนี้รวมถึงตัวแปรภายในสตริง backtick ที่มีการ${}บันทึกไบต์เท่านั้นเมื่อส่วนตัวแปรล้อมรอบด้วยส่วนคงที่ ดังนั้นสตริงเหล่านี้ควรเริ่มต้นและสิ้นสุดด้วยชิ้นส่วนสแตติกเสมอ
ลุค

@Arnauld ขอบคุณสำหรับเคล็ดลับทั้งหมด! ฉันซาบซึ้งจริงๆ! :)
R. Kap

@ ลุคขอบคุณสำหรับคำแนะนำ ที่จะมามีประโยชน์ :)
R. Kap

คุณสามารถใช้แทน0 "0"พวกเขาจะถูกบังคับให้สตริง และในความคิดที่สอง: เป็นจริงหนึ่งไบต์สั้นกว่าi++<v&&i (i<v)*++i
Arnauld

@Arnauld ขอบคุณอีกครั้ง! :)
R. Kap

3

RProgN 2 , 37 ไบต์

x=0xR{y@xy-` *`o` y2**`o...2y{[` };};

เข้ากับภาษาที่ฉันชอบเล่นกอล์ฟก่อนที่นักเล่นกอล์ฟจะกระโดดเข้ามา

อธิบาย

x=              # Set 'x' to the input
0xR{            # For everything between the input and 0
    y@          # Set the iteration value to y, for this function only.
    xy-` *      # Subtract y from x, repeat the string " " that many times.
    `o          # Push an "o" to the stack.
    ` y2**      # Push 2*y " "'s to the stack
    `o          # Push another "o" to the stack
    ...         # Concatenate the parts of this string together, giving us the two balls.
    2y{[` };    # For all numbers between 2 and y, add a newline.
};              #

ลองออนไลน์!


3

Retina, 29 19 ไบต์

 ?
$.`$*¶$&$'O$`$`O

ลองออนไลน์!

รับอินพุตเป็นอันหนึ่งอันเดียวกันเป็นการเว้นวรรค คำตอบของ JavaScript พอร์ตของฉัน แก้ไข: บันทึก 10 ไบต์ด้วย @ MartinEnder ♦


ฉันแค่รอใครสักคนที่จะเกิดขึ้นกับ Retina สปินออกเรียกว่า Retsina
Titus

3

Bash , 76 ไบต์

for((n=$1+1;--n;));{
yes ''|head -$n
r=$r${n}AO
t=›${n}BO$t
}
echo O${r}O$t

จะทำงานเฉพาะในสถานีเนื่องจากใช้ลำดับหนี ANSI หมายถึงไบต์ CSI ( 0x9b )

ทดสอบการทำงาน

$ # The terminal's encoding must be set to ISO-8859-1.
$
$ xxd -g 1 arc.sh
0000000: 66 6f 72 28 28 6e 3d 24 31 2b 31 3b 2d 2d 6e 3b  for((n=$1+1;--n;
0000010: 29 29 3b 7b 0a 79 65 73 20 27 27 7c 68 65 61 64  ));{.yes ''|head
0000020: 20 2d 24 6e 0a 72 3d 24 72 9b 24 7b 6e 7d 41 4f   -$n.r=$r.${n}AO
0000030: 0a 74 3d 9b 24 7b 6e 7d 42 4f 24 74 0a 7d 0a 65  .t=.${n}BO$t.}.e
0000040: 63 68 6f 20 4f 24 7b 72 7d 4f 24 74              cho O${r}O$t
$
$ bash arc.sh 1
 OO
O  O
$ bash arc.sh 2
  OO
 O  O

O    O
$ bash arc.sh 3
   OO
  O  O

 O    O


O      O
$ bash arc.sh 4
    OO
   O  O

  O    O


 O      O



O        O

คุณสามารถใช้sed $nqเพื่อบันทึกไบต์
เรือเหาะ

น่าเศร้าที่ไม่มี ฉันต้องใช้sed ${n}qซึ่งอีกต่อไป
Dennis

ใช่ฉันเข้าใจแล้วคุณสามารถทำsed $n\qแทนได้ แต่นั่นก็ไม่สมเหตุสมผลเช่นกันเพราะมันจะนับเป็นไบต์เดียวกันhead!
เรือเหาะ


3

R, 89 ไบต์

a=2*v+3
x=matrix(" ",a,v^2+1)
for(k in 0:v)x[c(1-k,k+2)+v,k^2+1]="o"
x[a,]="\n"
cat(x,sep="")
  • สร้างเมทริกซ์ของช่องว่าง (ตัวแปร a คือความกว้างของเมทริกซ์นี้บันทึกสองสามไบต์)
  • เติม "o" s ในตำแหน่งที่ต้องการทำงานจากส่วนบนของส่วนโค้งลงและออกไปด้านนอก
  • เพิ่มบรรทัดใหม่ในตอนท้ายของแต่ละแถวเมทริกซ์
  • ยุบเมทริกซ์ลงไปที่สตริงเดี่ยวและพิมพ์

นี่เป็นความพยายามครั้งแรกของฉันในการเล่นกอล์ฟยินดีต้อนรับความคิดเห็น ...


3

Röda , 53 52 ไบต์

f n{seq 0,n|{|i|["
"*i," "*(n-i),"O"," "*i*2,"O"]}_}

ลองออนไลน์!

การใช้งาน: main { f(5) }

เวอร์ชันที่ไม่ถูกปรับแต่ง:

function f(n) {
    seq(0, n) | for i do
        push("\n"*i, " "*(n-i), "O", " "*i*2, "O")
    done
}

คุณสามารถใช้ตัวอักษรขึ้นบรรทัดใหม่แทน\nและบันทึก 1 ไบต์ได้หรือไม่
Kritixi Lithos

@KritixiLithos นั่นใช้ได้ ขอบคุณ!
fergusq

2

Befunge, 75 73 ไบต์

<vp00:&
1<-1_:v#\+55:g01\-g01g00" O"1\*2g01" O"1p0
#@_\:v>$$:!
1\,:\_^#:-

ลองออนไลน์!

บรรทัดแรกจะอ่านด้วยความเร็วvและบันทึกสำเนาในหน่วยความจำ จากนั้นบรรทัดที่สองจะนับจากvเป็นศูนย์โดยที่ดัชนีiและในแต่ละการวนซ้ำจะส่งลำดับของคู่อักขระ / ความยาวลงบนสแต็ก

Length  Character
-----------------
1       'O'
i*2     ' '
1       'O'
v-i     ' '
i       LINEFEED

ลำดับนี้แสดงถึงการเข้ารหัสชนิดความยาวรันของเอาต์พุตที่ต้องการในทางกลับ สองบรรทัดสุดท้ายจากนั้นเพียงป๊อปอัพอักขระ / ความยาวคู่เหล่านี้ออกจากสแต็กเอาท์พุทที่เกิดขึ้นความยาวของตัวละครแต่ละตัวจนกว่าสแต็คจะว่างเปล่า


2

Java 8, 129 124 109 ไบต์

แข็งแรงเล่นกอล์ฟ:

v->{String s="",t="";for(int j,y=0;y<=v;++y){for(j=0;j<v;++j)s+=j<y?"\n":" ";s+="o"+t+"o";t+="  ";}return s;}

ลองออนไลน์!

Ungolfed:

public class DrawTheArcOfABall {

  public static void main(String[] args) {
    for (int i = 1; i < 6; ++i) {
      System.out.println(f(v -> {
        String s = "", t = "";
        for (int j, y = 0; y <= v; ++y) {
          for (j = 0; j < v; ++j) {
            s += (j < y ? "\n" : " ");
          }
          s += "o" + t + "o";
          t += "  ";
        }
        return s;
      } , i));
      System.out.println();
      System.out.println();
    }
  }

  private static String f(java.util.function.IntFunction<String> f, int v) {
    return f.apply(v);
  }
}


สำหรับครั้งที่สองที่ซ้อนกันสำหรับลูปฉันคิดว่าfor(;j<v;++)จะทำงานเพราะในเวลาj==yนี้ นอกจากนี้คุณสามารถลบตัวแปรที่สามได้โดยการเพิ่มตัวแปรสตริงที่สองภายใน main สำหรับ loop String t="";(12) และt+=" ";(8) ภายใน loop ที่ซ้อนกันแรก จากนั้นลูปที่สามจะกลายเป็นs+="o"+t+"o";
nmjcman101

นอกจากนี้คุณยังสามารถรวมลูปซ้อนกันสองตัวแรกเข้าด้วยกันถึงfor(j=0;j<v;++j)s+=j<y?"\n":" ";แม้ว่าฉันไม่แน่ใจว่าตาข่ายนี้มาพร้อมกับความคิดเห็นก่อนหน้าของฉันเกี่ยวกับอย่างไรt
nmjcman101

คุณสามารถเริ่มต้นt=""ควบคู่ไปกับ s ในการเริ่มต้นและจากนั้นเพิ่มt+=" "แต่ละวงรอบหลังจากที่คุณทำs+="o"+t+"o"
nmjcman101


2

VBA, 124 112 85 88 66 63 59 ไบต์

For i=0To[A1]:?Space([A1]-i)"O"Space(2*i)"O"String(i,vbCr):Next

บันทึกทั้งหมด 29 ไบต์ขอบคุณที่ Taylor Scott

สิ่งนี้จะต้องถูกเรียกใช้ในหน้าต่าง VBA ทันทีและพิมพ์ผลลัพธ์ในแบบเดียวกัน

ขยาย / จัดรูปแบบมันจะกลายเป็น:

For i=0 To [A1]
   Debug.Print Space([A1]-i) & "O" & Space(2*i) & "O" & String(i,vbCr)
Next

(ปรากฎว่าการต่อข้อมูลในคำสั่งพิมพ์นั้นเป็นไปโดยอัตโนมัติโดยไม่มีผู้ควบคุม)


b & s &การแจ้งเตือนช่องว่าง!
CalculatorFeline

ฉันพยายามแล้วมันก็ผิดพลาดครั้งแรก จะย้อนกลับไปผมรู้ว่ามันจะขยายตัวแต่ไม่b &s &String b&s&Stringในตอนแรกฉันคิดว่าคุณตั้งใจจะใช้Spaceฟังก์ชั่นที่ฉันควรมีทั้งหมดและท้ายที่สุดก็ช่วยประหยัดไบต์ได้มากขึ้น
Engineer Toast

คุณสามารถย่อfor i=0 To vและdebug.? bถึงfor i=0To vและDebug.?bตามลำดับสำหรับ-2ไบต์ และเพื่อให้คุณรู้ว่าชุมชนฉันทามติคือสำหรับภาษาที่มีการจัดรูปแบบอัตโนมัติคุณอาจนับก่อนที่จะจัดรูปแบบอัตโนมัติซึ่งมีความหมายหลังจากที่คุณทำการเปลี่ยนแปลงเหล่านี้แล้วคุณควรมีจำนวนไบต์ 85 ไบต์
Taylor Scott

ในการค้นหาครั้งที่สองนี่คือตัวอย่าง - ไม่ใช่ฟังก์ชั่นหรือรูทีนย่อย ดังนั้นจึงไม่ใช่ทางออกที่ถูกต้อง ฉันเชื่อว่าคุณสามารถแก้ไขได้โดยการแปลงเป็นฟังก์ชันหน้าต่าง Excel VBA ทันทีและรับข้อมูลจาก[A1]( v=[A1]) นอกจากนี้ฉันไม่คิดว่าคุณต้องการsตัวแปรจริงๆ
Taylor Scott

1
@TaylorScott ที่ดูเหมือนว่าการปรับปรุงที่ชัดเจนในการหวนกลับ แต่ฉันไม่ทราบว่าการต่อข้อมูลไม่จำเป็นต้องมีผู้ประกอบการในหน้าต่างทันที นั่นจะช่วยให้ฉันประหยัดไบต์ในอนาคต ฉันต้องเพิ่ม a ;ถึงส่วนท้ายของคำสั่ง print เพราะมันยังคงเพิ่มตัวแบ่งบรรทัดพิเศษตามค่าเริ่มต้น ขอบคุณ!
Engineer Toast


1

เยลลี่ , 17 16 ไบต์

‘Ḷ+\Ṛ⁶ẋ;€”Om0z⁶Y

ลองออนไลน์!

อย่างไร?

‘Ḷ+\Ṛ⁶ẋ;€”Om0z⁶Y - Main link: v         e.g. 3
‘                - increment: v+1            4
 Ḷ               - lowered range             [0,1,2,3]
  +\             - reduce with addition      [0,1,3,6]
    Ṛ            - reverse                   [6,3,1,0]
     ⁶           - a space                   ' '
      ẋ          - repeat (vectorises)       ['      ','   ',' ','']
       ;€        - concatenate each with
         ”O      -     an 'O'                ['      O','   O',' O','O']
           m0    - concatenate reflection    ['      O','   O',' O','O','O','O ','O   ','O      ']
             z⁶  - transpose with space fill ['   OO   ','  O  O  ','        ',' O    O ','        ','        ','O      O']
               Y - join with line feeds      ['   OO   \n  O  O  \n        \n O    O \n        \n        \nO      O']
                 - implicit print

1

PHP, 76 ไบต์

for(;$argn>=0;$s.="  ")echo($r=str_repeat)("
",$i++),$r(" ",$argn--),o,$s,o;

ทำงานด้วยecho <v> | php -nR '<code>'หรือทดสอบออนไลน์

วนซ้ำ$argnจากอินพุตไป0และ$iขึ้นจาก 0;
พิมพ์ - ตามลำดับนั้น - ในแต่ละการวนซ้ำ

  • $i การขึ้นบรรทัดใหม่ (ไม่มีในการทำซ้ำครั้งแรก)
  • ช่องว่างภายในด้านซ้าย: $argnช่องว่าง
  • ลูกซ้าย: o
  • ช่องว่างภายใน: 2*$iช่องว่าง
  • บอลขวา: o

1

V , 23 19 ไบต์

2éoÀñYço/^2á O
HPJ>

ลองออนไลน์!

อธิบาย

2éo            " Insert two 'o's
   Àñ          " <Arg> times repeat
     Y         " Yank the current (top) line.  This is always '\s*oo'
      ço/      " On every line that matches 'o'
         ^     " Go to the first non-whitespace character (the 'o')
          2á   " Append two spaces (between the two 'o's
             O " Add a blank line on top of the current one
H              " Go to the first line
 P             " Paste in front ('\s*oo')
  J            " Join this line with the blank line immediately after it
   >           " Indent once

1

JavaScript (ES6), 87 ไบต์

f=
n=>' '.repeat(n+1).replace(/./g,"$`#$'O$`$`O").replace(/ *#/g,s=>[...s].fill``.join`
`)
<input type=number min=0 oninput=o.textContent=f(+this.value)><pre id=o>

วิธีแก้ปัญหาที่ไม่ใช่แบบเรียกซ้ำ ความต้องการการจัดทำดัชนีนั้นน่ารำคาญทั้งในด้านบนและ 62- ไบต์ต่อไปนี้ (ฉันไม่รู้ว่ามันจะส่งผลให้พอร์ต Retina สั้นลง) โซลูชั่นแบบเรียกซ้ำ

f=n=>~n?` `.repeat(n)+`OO`+f(n-1).replace(/^ *O/gm,`
$&  `):``


0

ซ้อนกัน, 67 63 ไบต์

args 0#1+:@x:>{!n x\-1-' '*'O'+n 2*' '*+'O'+x 1-n!=n*LF*+out}"!

ความพยายามครั้งแรก 67 ไบต์

args 0# :@v 1+2*:>[:v:+1+\-2/*' '*'O'+''split]"!fixshape tr rev out

โปรแกรมเต็มรูปแบบ สร้างสิ่งที่ชอบ:

('O'
 ' ' 'O'
 ' ' 'O'
 'O')

ซึ่งเป็นเบาะ, transposed, ย้อนกลับและเอาท์พุท


0

แบตช์ 163 ไบต์

@set l=@for /l %%i in (1,1,%1)do @call
@set s=
%l% set s= %%s%%
@set t=
%l%:c&for /l %%j in (2,1,%%i)do @echo(
:c
@echo %s%O%t%O
@set s=%s:~1%
@set t=  %t%

0

ทับทิม 52 ไบต์

->x{(0..x).map{|a|$><<$/*a+' '*(x-a)+?O+' '*a*2+?O}}

ไม่มีการขึ้นบรรทัดใหม่ (อนุญาตโดยกฎ: "มีการขึ้นบรรทัดใหม่ไม่เกินหนึ่งบรรทัด ")


0

AHK, 93 ไบต์

m=0
n=1
f=%1%-1
Loop,%1%{
r=%r%{VK20 %f%}O{VK20 %m%}O{`n %n%}
m+=2
n++
f--
}
FileAppend,%r%,*

ถ้าฉันสามารถหาวิธีการทำคณิตศาสตร์ภายในการกดแป้นซ้ำได้นั่นจะเป็นการดีมาก
- VK20เท่ากับช่องว่าง
- FileAppendส่งออกเป็นstdoutถ้าชื่อไฟล์เป็น*



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.