Trình mô phỏng chuyến bay nghệ thuật ASCII


24

CHỈNH SỬA

Dường như đã có một số nhầm lẫn sau lỗi đánh máy của tôi trong bài viết gốc sử dụng chữ thường o để xác định mặt phẳng và sau đó là chữ hoa. Thật không may, lỗi này đã không được chọn trong Sandbox. Vì nhiều thành viên đã viết câu trả lời bằng cả hai và vì lỗi đánh máy là lỗi của tôi nên tôi sẽ cho phép viết hoa hoặc viết thường o trong định nghĩa của mặt phẳng. Tôi đã thêm một quy tắc mới cho việc này.

Lý lịch

Tôi thích hoạt hình nghệ thuật ascii vì tôi có xu hướng gọi chúng vì vậy đây là một hoạt hình khác. Tôi không nghĩ rằng điều này là quá khó để thực hiện vì vậy hy vọng sẽ nhận được một số câu trả lời ngắn và thú vị.

Để tất cả các thành viên cộng đồng

Nếu bạn cải thiện câu trả lời của mình, vui lòng sửa đổi số byte của bạn thành

đếm byte cũ đếm byte mới

để chúng tôi có thể thấy sự tiến bộ của bạn. Cảm ơn!

Thử thách

Đây là một chiếc máy bay ascii

--O--

Đây là một đường băng ascii

____|     |____

Máy bay bắt đầu ở 5 dòng mới phía trên đường băng. Để ngăn chặn bất kỳ cuộc đụng độ nào giữa các hệ mét và hệ thống đế quốc và biến điều này thành một thách thức quốc tế thực sự, tôi sẽ không đề cập đến mét hoặc feet. Thí dụ:

        --O--




____|     |____

Máy bay phải hạ cánh chính xác ở giữa đường băng như hình dưới đây:

____|--O--|____

Đầu vào

Vị trí nằm ngang ban đầu của mặt phẳng được xác định bởi một đầu vào số nguyên được sử dụng để tham chiếu đầu của cánh bên trái, tức là nằm trong khoảng từ 0 đến 10.

Đầu ra

Mỗi giai đoạn của các chuyến bay phải được hiển thị. Ví dụ dưới đây (đầu vào = 10):

          --O--




____|     |____

         --O--



____|     |____

        --O--


____|     |____

       --O--

____|     |____

      --O--
____|     |____

____|--O--|____

Để giữ cho mọi thứ đơn giản, chúng tôi đang bỏ qua các quy luật của quan điểm. Đường băng vẫn giữ nguyên kích thước khi bạn đến gần hơn.

Quy tắc

  • Cập nhật Giữa mặt phẳng có thể là chữ hoa hoặc chữ thường o nhưng bất kỳ giá trị nào được chọn phải nhất quán trong toàn bộ mã. Nếu ngôn ngữ của bạn không hỗ trợ các ký tự ở trên, vui lòng sử dụng các ký tự chỉ ascii thay thế.
  • Máy bay hạ xuống 1 dòng trên mỗi khung.
  • Máy bay chỉ có thể di chuyển 1 khoảng trắng sang trái hoặc phải mỗi lần nó hạ xuống một dòng. Nó không phải di chuyển trên mỗi dòng gốc. Miễn là nó kết thúc trên đường băng, nó phụ thuộc vào bạn khi nó di chuyển sang phải hoặc trái. Bạn là phi công!
  • Không cần xử lý lỗi. Bạn có thể cho rằng đầu vào sẽ luôn là số nguyên hợp lệ từ 0-10.
  • Đầu ra phải chỉ bao gồm các ký tự được hiển thị ở trên (nếu ngôn ngữ của bạn không hỗ trợ chúng, hãy xem quy tắc đầu tiên được chỉnh sửa) và phải có cùng kích thước, tức là phải bắt đầu cao 6 dòng, rộng 15 ký tự. Chiều cao có thể giảm khi tiến triển như trong ví dụ trên.
  • Chương trình hoặc chức năng là tốt nhưng phải tạo ra một đầu ra như được hiển thị ở trên.
  • Không gian hàng đầu / dấu / dòng mới là tốt của tôi.
  • Xin vui lòng xóa màn hình giữa các khung đầu ra nếu bạn muốn. Đây không phải là một yêu cầu.
  • Các sơ hở tiêu chuẩn bị cấm như bình thường (mặc dù tôi không nghĩ rằng có nhiều điều sẽ giúp với loại thách thức này).
  • Đây là mã golf nên câu trả lời ngắn nhất rõ ràng là người chiến thắng và có thể sẽ nhận được nhiều phiếu nhất nhưng có thể không nhất thiết được chấp nhận là câu trả lời tốt nhất nếu một giải pháp thực sự thú vị xuất hiện trong một số ngôn ngữ bất ngờ, ngay cả khi nó dài hơn. Hãy đăng bất cứ điều gì đáp ứng các quy tắc miễn là nó hoạt động.

Triển khai tham chiếu được đề cập trong Python 2 có sẵn tại Dùng thử trực tuyến! để bạn có thể thấy nó trông như thế nào cho các giá trị đầu vào khác nhau.


Tôi không nghĩ rằng đó là Kolmogorov-phức tạp như đầu ra phụ thuộc vào đầu vào
OVS

Cảm ơn đã làm rõ @ovs. Tôi sẽ xóa thẻ đó sau đó.
ElPedro

Thông thường, sự chấp nhận đi đến câu trả lời phù hợp nhất với Tiêu chí Chiến thắng Mục tiêu. Bạn có thể nhận được một số flak nếu bạn chấp nhận một câu trả lời khác, dài hơn.
Cấp sông St

Cảm ơn @LevelRiverSt. Có một bài viết meta để làm rõ điều này? Nếu không thì có lẽ tốt hơn để không chấp nhận bất kỳ câu trả lời.
ElPedro

btw, tôi đã chấp nhận một câu trả lời dài hơn trước đây và được công nhận cho câu trả lời ngắn hơn cũng như không có probs từ cộng đồng Thử thách trước đó . Xin vui lòng xem kết quả của tôi bình luận ở cuối câu hỏi. Điều này có sai không?
ElPedro

Câu trả lời:


5

TI-BASIC, 61 byte

Input A
A
For(B,1,5
ClrHome
Output(5,1,"----/     /----
Output(B,Ans,"--O--
Ans+6-median({5,7,Ans
End

Bạn có biết về trình thông dịch hoặc tải xuống trực tuyến (Dành cho Linux) để thử nghiệm không? +1 cho câu trả lời giả sử nó hoạt động :)
ElPedro

Kiểm tra TilEm. Đó là người duy nhất tôi có thể làm việc.
Julian Lachniet

2
+1 để hỏi ai đó có thể có câu trả lời khác. Chắc chắn sẽ kiểm tra TilEm và cảm ơn vì tiền boa.
ElPedro

8

TI-BASIC, 62 byte

:Input A
:A
:For(N,3,8
:ClrHome
:Output(8,1,"----I     I----
:Output(N,Ans,"--O--
:Ans+(Ans<6)-(Ans>6
:End

Lưu ý rằng TI-BASIC không hỗ trợ _ hoặc | và do đó tôi đã thay thế bằng một số vốn tôi và -. Điều này sẽ không ảnh hưởng đến số byte.


OK, tôi đang dùng Linux. Bạn có thể giới thiệu một tải xuống mà tôi nhận được để kiểm tra điều này? btw, tôi giả sử nó hoạt động cho đến khi tôi tìm thấy một thông dịch viên nên +1 :)
ElPedro

Tiếc là không có. Tôi đã cài đặt cả Wmusemu và TilEm trên máy tính Windows 10 của mình, nhưng tôi đã kiểm tra mã trên TI-84 + vật lý. Xin lỗi
Tỷ lệ vàng

Không vấn đề gì! Chỉ cần hỏi :)
ElPedro

Do rất nhiều chỉnh sửa mã, nhanh nhất xen kẽ giữa bài đăng này và của Julian Lachniet, cho đến khi cả hai chúng tôi đi đến kết luận 60 byte, tại đó tôi đã thêm clrhome và thực hiện đếm byte 62
Tỷ lệ vàng

3
TI-Basic?! Tốt đẹp!
Dave Kanter

6

Python 2, 107 byte

n=input();h=5
while h:print' '*n+'--O--'+'\n'*h+'____|     |____\n';n-=cmp(n,5);h-=1
print'____|--O--|____'

Dùng thử trực tuyến

Đơn giản chỉ cần mã hóa dòng cuối cùng cho máy bay hạ cánh. Nó có thể được đánh golf bằng cách sử dụng lại các bộ phận từ trước hoặc được tích hợp vào vòng lặp.


5

Perl, 94 byte

93 byte mã + -pcờ.

$\="____|     |____
";$p="--O--";for$i(-5..-1){print$"x$_.$p.$/x-$i;$_+=5<=>$_}$\=~s/ +/$p/}{

Hãy thử trực tuyến!


@ETHproductions Hy vọng bạn thích }{(và $"lộn xộn với cú pháp tô sáng).
Dada

3

JavaScript (ES6), 108 byte

f=(a,b=5)=>b?" ".repeat(a)+`--O--${`
`.repeat(b)}____|     |____

`+f(a<5?a+1:a-1,b-1):"____|--O--|____"

Kiểm tra nó

Sử dụng

Chỉ cần gọi fvới chỉ số của máy bay.

f(2)

Đầu ra

  --O--




____|     |____

   --O--



____|     |____

    --O--


____|     |____

     --O--

____|     |____

    --O--
____|     |____

____|--O--|____

Bạn có thể thêm đoạn trích <s> snack </ s> stack
Kritixi Lithos

Mỗi lần tôi hỏi một câu hỏi, câu trả lời đầu tiên là Javascript! +1
ElPedro

Xin chào, sẽ rất tuyệt nếu mọi người đăng một Tryitonline (không biết điều đó có khả thi với Javascript không) hoặc một giải pháp khác với 10 ví dụ được hiển thị ở trên. Bạn có thể gửi đầu ra từ ví dụ 2 thay thế? :)
ElPedro

@ElPedro, bạn có thể thực thi JavaScript trong bảng điều khiển trình duyệt của mình, nhưng cũng có một số bảng điều khiển trực tuyến. Tôi sẽ thêm một liên kết. Tôi cũng sẽ thay đổi ví dụ.
Lu-ca

Cảm ơn. Không có probs. Tôi vào Javascript thời gian cũ, nơi bạn cần một trang web để thực thi nó. Đoán tôi cần phải có được với thời gian :) Nhiều máy chủ hơn những ngày này. Tôn trọng cho câu trả lời nhanh chóng và mát mẻ.
ElPedro

3

Scala, 224 181 byte

EDIT : Tôi không biết bạn có thể làm gì "string"*nđể lặp lại nó n lần! Scala tiếp tục thổi vào tâm trí của tôi. Thiếu if(t>0)thay vì if(t==0)là một sai lầm tân binh. Cảm ơn vì lời khuyên, Suma !


def?(x:Int,t:Int=5):Unit={var(p,o)=("--o--","")
o=s"____|${if(t>0)" "*5 else p}|____\n"
for(i<-0 to t)o=if(i!=0&&i==t)" "*x+p+o else "\n"+o
println(o)
if(t>0)?(x-(x-4).signum,t-1)}

Nhận xét ban đầu:

Tôi nghĩ rằng một giải pháp đệ quy sẽ rất vui để thử. Tôi còn khá mới với Scala, vì vậy tôi chắc chắn điều này không phải là tối ưu.


Bạn có thể muốn đọc Mẹo chơi gôn trong scala
corvus_192

Bạn không cần :Unit=. Bỏ dấu bằng sẽ đặt loại trả về thành Đơn vị.
corvus_192

Ngoài ra, tại sao bạn không khởi tạo otrong dòng đầu tiên?. Và vì iluôn luôn> = 0, bạn có thể thay đổi i!=0&&i==tthành i>0&i==t(dòng thứ 3).
corvus_192

2

Hàng loạt, 230 byte

@echo off
set/ax=10-%1
set s=          --O--
for /l %%i in (0,1,4)do call:l %%i
echo ____^|--O--^|____
exit/b
:l
call echo %%s:~%x%%%
for /l %%j in (%1,1,3)do echo(
echo ____^|     ^|____
echo(
set/a"x-=x-5>>3,x+=5-x>>3

xlà số khoảng trắng cần xóa từ đầu chuỗi s, vì vậy tôi trừ tham số từ 10. Dòng cuối cùng là Batch gần nhất phải có x-=sgn(x-5).


2

sed, 181 byte + 2 cho -nrcờ

s/10/X/
:A
s/^/ /;y/0123456789X/-0123456789/;/[0-9]/bA;s/ -/P\n\n\n\n\n____|P|____/
:B
h;s/P([\n|])/--O--\1/;s/P/     /;s/^ *_/_/;p;/^_/q;x;s/\n//
/^ {5}$/bB;/ {6}/s/  //;s/^/ /;bB

Bị đánh cắp

# Add leading spaces
s/10/X/
:A
    s/^/ /
    y/0123456789X/-0123456789/
/[0-9]/bA

s/ -/P\n\n\n\n\n____|P|____/

:B
    # Place plane in appropriate spot
    h
    s/P([\n|])/--O--\1/
    s/P/     /
    s/^ *_/_/
    p
    /^_/q
    x

    # Movement
    s/\n//
    /^ {5}$/bB
    # move left one extra, since we'll move right next line
    / {6}/s/  // 
    s/^/ /
bB

Sử dụng: $ echo 2 | sed -nrf flightsim.sed


2

Võng mạc , 86 83 byte

.+
$* --O--¶¶¶¶¶¶____|     |____
{*`$
¶
2D`¶
 ( {5})
$1
}`^ {0,4}-
 $&
 +
--O--
G`_

Hãy thử trực tuyến!

Có lẽ có một số loại nén mà tôi có thể đã sử dụng trên đường băng và không gian trống trên nó, nhưng bất cứ thứ gì tôi đã thử đều đắt hơn bản rõ (trong Retina là một dòng mới, vì vậy bạn có thể thấy trạng thái ban đầu trong bản rõ trên dòng thứ hai).


2

Scala , 177, 163, 159 137 byte

def p(x:Int,t:Int=5,a:String="\n"):String=a+(if(t>0)
" "*x+"--O--"+"\n"*t+"____|     |____\n"+p(x-(x-4).signum,t-1)else"____|--O--|____")

Dựa trên một câu trả lời khác , với mức giảm đáng kể.


2

Perl 6 , 97 90 81 byte

{say "{"{" "x 15}\n"x 5}____|     |____"~|("\0"x$^h+$_*(17-$h/5)~"--O--") for ^6}

Trái với vẻ ngoài của nó, nó xuất ra phiên bản * chữ thường của mặt phẳng (--o-- ), như được cho phép bởi mô tả tác vụ được cập nhật.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Toán tử bit bit FTW!

{                                                  # Lambda accepting horizontal index $h.
    say                                            # Print the following:
        "{ "{ " " x 15 }\n" x 5 }____|     |____"  # The 15x6 background string,
        ~|                                         # bitwise-OR'd against:
        (
            "\0"                                   # The NULL-byte,
            x $^h + $_*(17 - $h/5)                 # repeated by the plane's offset,
            ~ "--O--"                              # followed by an OR mask for the plane.
        )
    for ^6                                         # Do this for all $_ from 0 to 5.
}

Nó hoạt động vì các toán tử chuỗi bitwise sử dụng các giá trị mã hóa của các ký tự tại một vị trí nhất định trong hai chuỗi, để tính toán một ký tự mới tại vị trí đó trong chuỗi đầu ra.
Trong trường hợp này:

space  OR  O   =  o
space  OR  -   =  -
any    OR  \0  =  any

Đối với Omặt phẳng chữ hoa , chúng ta có thể đã sử dụng ~^(chuỗi bitOR XOR), với mặt nạ mặt phẳng là \r\ro\r\r(+4 byte cho dấu gạch chéo ngược):

space  XOR   o  =  O
space  XOR  \r  =  -
any    XOR  \0  =  any

Công thức cho phần bù của mặt phẳng h + v*(17 - h/5), được đơn giản hóa từ:

  v*16         # rows to the vertical current position
+ h            # columns to the horizontal starting position
+ (5 - h)*v/5  # linearly interpolated delta between horizontal start and goal

1

Python 2 , 160 byte

i,s,p,l,r,c,x=input(),' ','--O--','____|','|____',0,4
while x>=0:print'\n'.join([s*i+p]+[s*15]*x+[l+s*5+r])+'\n';c+=1;x-=1;i=((i,i-1)[i>5],i+1)[i<5]
print l+p+r

Hãy thử trực tuyến!

Đây là cách thực hiện tham chiếu được giảm xuống 160 từ 384. Tôi nghĩ vẫn còn một cách để đi. Chỉ cần đăng lên cho vui và để khuyến khích một câu trả lời Python tốt hơn.


Bạn có thể cạnh tranh trong thử thách của riêng bạn (xem bài đăng meta này ).
Dada

Bạn có thể làm được while-~xkhông?
FlipTack

Ngoài ra tôi nghĩ bạn có thể viết các bit nơi bạn thể thêm hoặc trừ từ inhưi+=(i<5)-(i>5)
FlipTack

1

Befunge-93, 136 130 byte

&5>00p10p55+v
:::00g>:1-\v>:"____|     |_"
>:1-\v^\+55_$"--O--"10g
^\*84_$>:#,_10g::5v>:#,_@
<_v#!:-1g00+`\5\-`<^"____|--O--|____"

Hãy thử trực tuyến!

Giải trình

&                          Read the plane position.
 5                         Initialise the plane height.
  >                        Begin the main loop.

   00p                     Save the current height.
      10p                  Save the current position.
         55+:              Push two linefeed characters.

         "____|     |_"    Push most of the characters for the airport string.
:::                        Duplicate the last character three times to finish it off.

   00g>:1-\v               Retrieve the current height, and then push
      ^\+55_$                that many copies of the linefeed character.

             "--O--"       Push the characters for the plane.

>:1-\v              10g    Retrieve the current position, and then push
^\*84_$                      that many copies of the space character.

       >:#,_               Output everything on the stack in reverse.

            10g::          Retrieve the current position and make two copies to work with.
                 5v        If it's greater than 5
                -`<          then subtract 1.
           +`\5\           If it's less than 5 then add 1.

        g00                Retrieve the current height.
      -1                   Subtract 1.
 _v#!:                     If it's not zero, repeat the main loop.

^"____|--O--|____"         Otherwise push the characters for the landed plane.
>:#,_@                     Output the string and exit.

1

Ruby, 94 byte

->a{5.times{|i|puts" "*a+"--O--#{?\n*(5-i)}____|     |____

";a+=5<=>a};puts"____|--O--|____"}

In vị trí của máy bay theo dòng mới và sau đó là sân bay. Sau đó, nó di chuyển mặt phẳng bằng 1, -1 hoặc 0, tùy thuộc vào vị trí của nó so với 5.

Sau khi lặp 5 lần trên, nó in máy bay trong sân bay.


1

8 , 177 172 byte

: f 5 >r 5 repeat over " " swap s:* . "--O--" . ' cr r> times "____|     |____\n\n" . over 5 n:cmp rot swap n:- swap n:1- dup >r while "____|--O--|____\n" . 2drop r> drop ; 

Từ f mong đợi một số nguyên từ 0 đến 10.

Sử dụng

4 f

Giải trình

: f \ n --
  5 >r     \ Push vertical distance from airport to r-stack
  5 repeat 
    \ Print plane
    over " " swap s:* . "--O--" . 
    \ Print airport 
    ' cr r> times "____|     |____\n\n" . 
    \ Now on the stack we have:
    \ distanceFromLeftSide distanceFromAirport
    over      \ Put distance from left side on TOS 
    5 n:cmp   \ Compare left distance and 5. Return
              \ -1 if a<b, 0 if a=b and 1 if a>b
    rot       \ Put distance from left side on TOS   
    swap n:-  \ Compute new distance from left side 
    swap n:1- \ Decrement distance from airport
    dup >r    \ Push new airport-distance on the r-stack  
  while 
  "____|--O--|____\n" .  \ Print final step
  2drop r> drop          \ Empty s-stack and r-stack
;

1

Toán học, 111 byte

If[#<1,"____|--O--|____"," "~Table~#2<>"--O--"<>"
"~Table~#<>"____|     |____

"<>#0[#-1,#2+#2~Order~5]]&[5,#]&

Chức năng ẩn danh. Lấy một số làm đầu vào và trả về một chuỗi làm đầu ra. Có lẽ có thể được chơi golf hơn nữa.


1

QBIC , 93 91 84 byte

:{X=space$(a)+@--O--`┘a=a-sgn(a-5)~t>-1|?X[t|?]t=t-1?@____|`+@     `+_fB|\_xB+A+_fB

Giảm một số byte bằng cách thay thế khai báo X $; tối ưu hóa vòng lặp FOR in khoảng cách trên mặt đất. Giải thích dưới đây là cho phiên bản cũ, nhưng về cơ bản nó hoạt động như nhau.

Để thử nghiệm (và tính thẩm mỹ) tôi đã có một phiên bản hơi khác, ở mức 103 byte:

:{_z.5|_CX=Y[a|X=X+@ `]X=X+@--O--`
a=a-sgn(a-5)
~u>0|?X';`[u|?]u=u-1?@____|`+@     `+_fC|\_xC+_tB+_fC

Đây là những chức năng giống hệt nhau. Cái thứ hai có thêm rằng màn hình bị xóa giữa các khung và nó dừng lại 0,5 giây giữa các khung.

Sản lượng mẫu

Lưu ý rằng tôi đã thêm hai dòng mới giữa các khung. Mã được đánh gôn nhiều nhất ở trên không thêm các dòng trống giữa các khung, bộ làm mát sẽ xóa màn hình.

Command line: 10


          --O--




____|     |____


         --O--



____|     |____


        --O--


____|     |____


       --O--

____|     |____


      --O--
____|     |____


____|--O--|____

Giải trình

Vì tôi cảm thấy điều này chạm đến nhiều điều tôi thực sự thích về QBIC và cung cấp một cái nhìn sâu sắc về cách một số chức năng của nó hoạt động dưới mui xe, tôi đã giải thích một chút về giải thích. Lưu ý rằng QBIC, ở cốt lõi của nó, một trình thông dịch QBasic cho Codegolf. Mã QBIC đi vào - Mã QBasic xuất hiện (và sau đó được thực thi).

:{      get the starting offset (called 'a') from the command line, and start a DO-loop

----  cool code only  ----
_z.5|_C At the start of a DO-loop, pause for half a second and clear the screen
---- resume golf-mode ----

---- #1 - The tip of the left wing is anywhere between 0 and 10 positions to the right.
----       Create the plane with the spacing in X$
X=Y          Clear X$
[a|          For each point in the current offset
X=X+@ `]     Add a space to X$
    - Every capital letter in QBIC references that letter+$, a variable of type String
    - @ and ` start and end a string literal, in this case a literal space.
    - ] ends one language construct (an IF, DO or FOR). Here, it's NEXT
X=X+@--O--`  Create the actual plane
    - @ and `once again create a string literal. Every literal that is created in this
      way is assigned its own capital letter. This is our second literal, so the body of
      our plane is stored in B$ (A$ contains the space, remember?)

---- #2 Adjust the offset for the next iteration      
a=a-sgn(a-5) The clever bit: We have an offset X in the range 0 - 10, and 5 attempts to 
             get this to be == 5. X - 5 is either positive (X = 6 - 10), negative 
             (X = 0 - 4) or 0 (X=5). sgn() returns the sign of that subtraction 
             as a 1, -1 or 0 resp. We then sub the sign from 'a', moving it closer to 5.

---- #3 Draw the plane, the empty airspace and the landing strip             
~u>0|     Are we there yet?
    - ~ is the IF statement in QBIC
    - It processes everything until the | as one true/false expression
    - All the lower-case letters are (or better, could be) references to numeric 
      variables. Since QBasic does not need to post-fix those, they double as 'natural' 
      language: ignored by QBIC and  passed as literal code to the QBasic beneath.
    - The lower-case letters q-z are kinda special: at the start of QBIC, these 
      are set to 1 - 10. We haven't modified 'u' yet, so in the first DO-loop, u=5

?X';`     If we're still air-borne, print X$ (our plane, incl. spacers)
    - ? denotes PRINT, as it does in QBasic.
    - ' is a code literal in QBIC: everything until the ` is not parsed, but 
      passed on to QBasic.
    - In this case, we want a literal ; to appear after PRINT X$. This suppresses 
      QBasic's normal line-break after PRINT. This needs to be a code literal 
      because it is the command to read a String var from the command Line in QBIC.
[u|?]     FOR EACH meter above the ground, print a newline
u=u-1     Descent 1 meter
?@____|`  Print the LHS of the landing strip
+@     `  plus 5 spaces
+_fC|     plus the LHS reversed.
\         ELSE - touchdown!
_x        Terminate the program (effectively escape the infinite DO-loop)
    - the _x command has an interesting property: ULX, or Upper/Lowercase Extensibility. 
      Writing this command with an uppercase _X does something similar, yet different. 
      The _x command terminates, and prints everything found between _x and | before 
      quitting. Uppercase _X does not look for |, but only prints something if it is 
      followed by a character in the ranges a-z and A-Z - it prints the contents of 
      that variable.
C+B+_fC   But before we quit, print C$ (the LHS of the landing strip) and the plane, 
          and the LHS flipped.

---- #4 QBIC has left the building
- Did I say _x looks for a | ? Well, that gets added implicitly by QBIC at the end of 
  the program, or when one ( ']' ) or all ( '}' ) opened language constructs are closed.
- Also, all still opened language constructs are automatically closed at EOF.
- Had we stored anything in Z$, that would also be printed at this time.

1

SmileBASIC, 109 105 byte

G$="_"*4INPUT X
FOR I=0TO 4?" "*X;"--O--";CHR$(10)*(4-I)?G$;"|     |";G$X=X-SGN(X-5)?NEXT?G$;"|--O--|";G$

1

PHP 7, 139 byte

vẫn còn rất lâu

for($x=$argv[1],$d=6;$d--;$x+=5<=>$x)for($i=$p=-1;$i++<$d;print"$s
")for($s=$i<$d?" ":"____|     |____
";!$i&++$p<5;)$s[$x+$p]="--O--"[$p];

lấy đầu vào từ đối số dòng lệnh; chạy với -r.

phá vỡ

for($x=$argv[1],                        // take input
    $y=6;$y--;                          // loop height from 5 to 0
    $x+=5<=>$x)                             // post increment/decrement horizontal position
    for($i=$p=-1;$i++<$y;                   // loop $i from 0 to height
        print"$s\n")                            // 3. print
        for($s=$i<$y?" ":"____|     |____\n";   // 1. template=empty or runway+newline
            !$i&++$p<5;)$s[$x+$p]="--O--"[$p];  // 2. if $i=0, paint plane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.