“Simulator Penerbangan” Seni ASCII

24

EDIT

Tampaknya ada beberapa kebingungan mengikuti kesalahan ketik saya di posting asli yang menggunakan huruf kecil untuk mendefinisikan pesawat dan kemudian huruf besar kemudian. Sayangnya bug ini tidak dijemput di Sandbox. Karena banyak anggota telah menulis jawaban dengan keduanya dan karena kesalahan ketik itu adalah kesalahan saya, saya akan mengizinkan huruf besar atau kecil dalam definisi pesawat. Saya telah menambahkan aturan baru untuk ini.

Latar Belakang

Saya suka animasi seni ascii karena saya cenderung memanggil mereka jadi di sini ada satu lagi. Saya rasa ini tidak terlalu sulit untuk diterapkan, semoga akan mendapatkan jawaban singkat dan menarik.

Untuk semua anggota komunitas

Jika Anda meningkatkan jawaban Anda, ubah hitung byte Anda sebagai

byte lama menghitung byte baru

sehingga kami dapat melihat kemajuan Anda. Terima kasih!

Tantangan

Ini pesawat ascii

--O--

Inilah landasan pacu ascii

____|     |____

Pesawat mulai di 5 baris baru di atas landasan. Untuk mencegah bentrokan antara sistem metrik dan imperial dan menjadikannya tantangan internasional, saya tidak akan menyebut meter atau kaki. Contoh:

        --O--




____|     |____

Pesawat harus mendarat tepat di tengah landasan seperti yang ditunjukkan di bawah ini:

____|--O--|____

Memasukkan

Posisi horisontal awal pesawat didefinisikan oleh input integer yang digunakan untuk merujuk ujung sayap kiri yaitu antara 0 dan 10 inklusif.

Keluaran

Setiap tahap penerbangan pesawat harus ditunjukkan. Contoh di bawah ini (input = 10):

          --O--




____|     |____

         --O--



____|     |____

        --O--


____|     |____

       --O--

____|     |____

      --O--
____|     |____

____|--O--|____

Untuk mempermudah, kami mengabaikan hukum perspektif. Landasan pacu tetap ukuran yang sama saat Anda semakin dekat.

Aturan

  • Pembaruan Bagian tengah pesawat dapat berupa huruf besar atau huruf kecil tetapi yang dipilih harus konsisten di seluruh kode. Jika bahasa Anda tidak mendukung karakter di atas jangan ragu untuk menggunakan karakter ascii alternatif saja.
  • Pesawat turun 1 baris per frame.
  • Pesawat hanya dapat memindahkan 1 ruang ke kiri atau kanan setiap kali turun satu garis. Itu tidak harus bergerak pada setiap garis keturunan. Selama selesai di landasan pacu, itu terserah Anda ketika bergerak ke kanan atau kiri. Kamu pilotnya!
  • Tidak diperlukan penanganan kesalahan. Anda dapat mengasumsikan bahwa input akan selalu berupa bilangan bulat yang valid dari 0-10 inklusif.
  • Keluaran harus terdiri dari hanya karakter yang ditunjukkan di atas (jika bahasa Anda tidak mendukungnya, aturan pertama yang diedit lihat) dan harus berukuran sama yaitu harus mulai tinggi 6 baris dengan lebar 15 karakter. Ketinggiannya dapat berkurang karena berlangsung seperti pada contoh di atas.
  • Program atau fungsi baik-baik saja tetapi harus menghasilkan keluaran seperti yang ditunjukkan di atas.
  • Ruang memimpin / mengikuti / baris baru baik-baik saja oleh saya.
  • Silakan hapus layar di antara frame-frame keluaran jika Anda mau. Ini bukan persyaratan.
  • Lubang standar dilarang seperti biasa (walaupun saya pikir tidak banyak yang akan membantu dengan tantangan semacam ini).
  • Ini adalah kode golf sehingga jawaban terpendek jelas merupakan pemenang dan mungkin akan mendapatkan suara terbanyak tetapi mungkin belum tentu diterima sebagai jawaban terbaik jika beberapa solusi yang sangat menarik datang dalam beberapa bahasa yang tidak terduga, bahkan jika itu lebih lama. Jangan ragu untuk memposting apa pun yang memenuhi aturan selama itu berhasil.

Implementasi referensi yang tidak digabungkan dalam Python 2 tersedia di Coba online! sehingga Anda dapat melihat tampilannya untuk nilai input yang berbeda.

ElPedro
sumber
Saya tidak berpikir itu adalah kolmogorov-kompleksitas karena output tergantung pada input
Ov
Terima kasih atas klarifikasi @ovs. Saya akan menghapus tag itu.
ElPedro
Biasanya, penerimaan masuk ke jawaban yang paling sesuai dengan Kriteria Kemenangan Objektif. Anda mungkin akan mendapatkan kritik jika menerima jawaban lain yang lebih panjang.
Level River St
Terima kasih @LevelRiverSt. Apakah ada meta pos untuk mengklarifikasi ini? Jika tidak maka mungkin lebih baik untuk tidak menerima jawaban apa pun.
ElPedro
Namun, saya telah menerima jawaban yang lebih lama sebelumnya dan memuji jawaban yang lebih pendek juga tanpa masalah dari komunitas Tantangan sebelumnya . Silakan lihat komentar Hasil saya di akhir pertanyaan. Apakah ini salah?
ElPedro

Jawaban:

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
Julian Lachniet
sumber
Apakah Anda mengetahui juru bahasa online atau unduh (Untuk Linux) untuk pengujian? 1 untuk jawaban dengan asumsi itu bekerja :)
ElPedro
Lihat TilEm. Ini satu-satunya yang bisa saya kerjakan.
Julian Lachniet
2
+1 untuk menanyakan seseorang yang mungkin memiliki jawaban yang berbeda. Pasti akan memeriksa TilEm dan terima kasih atas tipnya.
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

Perhatikan bahwa TI-BASIC tidak mendukung _ atau | dan karena itu saya ganti dengan modal I dan -. Ini seharusnya tidak mempengaruhi jumlah byte.

Rasio Emas
sumber
Oke, saya di Linux. Bisakah Anda merekomendasikan unduhan yang saya dapat untuk menguji ini? btw, saya menganggap itu bekerja sampai saya menemukan penerjemah jadi +1 :)
ElPedro
Sayangnya tidak ada. Saya memiliki Wabbitemu dan TilEm yang terinstal di komputer Windows 10 saya, tetapi saya menguji kode pada fisik TI-84 +. Maaf
Rasio Emas
Tidak masalah!
Bertanya
Karena banyak pengeditan kode, yang tercepat berganti-ganti antara posting ini dan Julian Lachniet, sampai kami berdua sampai pada kesimpulan 60 byte, di mana saat itu saya menambahkan clrhome dan membuat byte byte 62
Golden Ratio
3
TI-Dasar ?! Bagus!
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--|____'

Cobalah online

Cukup hardcodes baris terakhir untuk pesawat pendaratan. Ini mungkin dapat golf dengan menggunakan bagian-bagian sebelumnya atau diintegrasikan ke dalam loop.

Tidak
sumber
5

Perl, 94 byte

93 byte kode + -pbendera.

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

Cobalah online!

Dada
sumber
@ ETHproductions Semoga Anda menikmati }{(dan mengutak - $"atik penyorotan sintaks).
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--|____"

Menguji

Pemakaian

Panggil saja fdengan indeks pesawat.

f(2)

Keluaran

  --O--




____|     |____

   --O--



____|     |____

    --O--


____|     |____

     --O--

____|     |____

    --O--
____|     |____

____|--O--|____
Luke
sumber
Anda dapat menambahkan potongan <s> snack </s>
Kritixi Lithos
Setiap kali saya mengajukan pertanyaan, jawaban pertama adalah Javascript! +1
ElPedro
Hai, alangkah baiknya jika orang memposting Tryitonline (tidak tahu apakah itu mungkin dengan Javascript) atau solusi berbeda dari 10 contoh yang ditunjukkan di atas. Bisakah Anda memposting output dari misalnya 2? :)
ElPedro
@ ElPedro, Anda dapat menjalankan JavaScript di konsol browser Anda, tetapi ada juga beberapa konsol online. Saya akan menambahkan tautan. Saya juga akan mengubah contoh.
Lukas
Terima kasih. Tidak masalah. Saya sudah terbiasa dengan Javascript lama di mana Anda memerlukan halaman web untuk menjalankannya. Kira saya perlu mengikuti zaman :) Lebih banyak server di luar hari ini. Hormati jawaban yang cepat dan keren.
ElPedro
3

Scala, 224 181 byte

EDIT : Saya tidak tahu Anda bisa lakukan "string"*nuntuk mengulanginya n kali! Scala terus meniup pikiranku. Melewatkan yang if(t>0)bukan if(t==0)adalah kesalahan pemula. Terima kasih atas tipsnya, 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)}

Komentar asli:

Saya pikir solusi rekursif akan menyenangkan untuk dicoba. Saya relatif baru di Scala, jadi saya yakin ini masih jauh dari optimal.

Archmage berdiri bersama Monica
sumber
Anda mungkin ingin membaca Kiat untuk bermain golf di scala
corvus_192
Anda tidak membutuhkannya :Unit=. Menghilangkan tanda sama dengan akan mengatur jenis kembali ke Unit.
corvus_192
Juga, mengapa Anda tidak menginisialisasi odi baris pertama ?. Dan karena iselalu> = 0, Anda dapat mengubah i!=0&&i==tke i>0&i==t(baris ke-3).
corvus_192
2

Batch, 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

xadalah jumlah spasi yang harus dihapus dari awal string s, jadi saya kurangi parameter dari 10. Baris terakhir adalah Batch terdekat x-=sgn(x-5).

Neil
sumber
2

sed, 181 byte + 2 untuk -nrbendera

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

Tidak disatukan

# 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

Pemakaian: $ echo 2 | sed -nrf flightsim.sed

sinar
sumber
2

Retina , 86 83 byte

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

Cobalah online!

Mungkin ada semacam kompresi yang bisa saya gunakan di landasan pacu dan ruang kosong di atasnya, tetapi apa pun yang saya coba muncul lebih mahal daripada plaintext (di Retina line adalah baris baru, sehingga Anda dapat melihat status awal dalam plaintext pada baris kedua).

Leo
sumber
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--|____")

Berdasarkan jawaban lain , dengan pengurangan yang signifikan.

Suma
sumber
2

Perl 6 , 97 90 81 byte

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

Bertolak belakang dengan tampilannya, ia mengeluarkan versi * lebih rendah dari pesawat ( --o--), sebagaimana diizinkan oleh deskripsi tugas yang diperbarui.

Cobalah online!

Bagaimana itu bekerja

Operator string bitwise, 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.
}

Ini bekerja karena operator string bitwise menggunakan nilai-nilai codepoint karakter pada posisi tertentu dalam dua string, untuk menghitung karakter baru pada posisi itu dalam string output.
Pada kasus ini:

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

Untuk Obidang huruf besar , kita bisa menggunakan ~^(string bitwise XOR), dengan mask bidang \r\ro\r\r(+4 byte untuk garis miring terbalik):

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

Rumus untuk offset pesawat h + v*(17 - h/5),, disederhanakan dari:

  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
seseorang
sumber
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

Cobalah online!

Berikut ini adalah implementasi referensi yang diturunkan ke 160 dari 384. Saya pikir masih jalan. Baru diposkan untuk bersenang-senang dan untuk mendorong jawaban Python yang lebih baik.

ElPedro
sumber
Anda dapat bersaing dalam tantangan Anda sendiri (lihat posting meta ini ).
Dada
Bisakah kamu lakukan while-~x ?
FlipTack
Juga saya pikir Anda dapat menulis bit di mana Anda menambah atau mengurangi isebagaii+=(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--|____"

Cobalah online!

Penjelasan

&                          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.
James Holderness
sumber
1

Ruby, 94 byte

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

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

Mencetak posisi pesawat diikuti oleh baris baru dan kemudian bandara. Kemudian memindahkan pesawat dengan 1, -1, atau 0, tergantung pada posisinya relatif ke 5.

Setelah mengulang 5 kali di atas, ia mencetak pesawat di bandara.

IMP1
sumber
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 ; 

Kata f mengharapkan bilangan bulat antara 0 dan 10.

Pemakaian

4 f

Penjelasan

: 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
;
Kekacauan Manor
sumber
1

Mathematica, 111 byte

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

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

Fungsi anonim. Mengambil angka sebagai input dan mengembalikan string sebagai output. Mungkin bisa bermain golf lebih lanjut.

LegionMammal978
sumber
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

Turun beberapa byte dengan mengganti deklarasi X $; dioptimalkan loop FOR yang mencetak jarak di atas tanah. Penjelasan di bawah ini untuk versi lama, tetapi pada dasarnya berfungsi sama.

Untuk pengujian (dan estetika) saya memiliki versi yang sedikit berbeda, yaitu 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

Ini identik secara fungsional. Yang kedua memiliki tambahan bahwa layar akan dihapus antara frame dan berhenti selama 0,5 detik antara frame.

Output sampel

Perhatikan bahwa saya telah menambahkan dua baris baru di antara bingkai. Kode paling golf di atas tidak menambahkan garis kosong di antara bingkai, yang lebih dingin membersihkan layar.

Command line: 10


          --O--




____|     |____


         --O--



____|     |____


        --O--


____|     |____


       --O--

____|     |____


      --O--
____|     |____


____|--O--|____

Penjelasan

Karena saya merasa ini menyentuh banyak hal yang saya sukai tentang QBIC, dan memberikan wawasan yang baik tentang bagaimana beberapa fungsinya bekerja di bawah tenda, saya sudah sedikit berlebihan dalam penjelasannya. Perhatikan bahwa QBIC, pada intinya, adalah juru bahasa QBasic untuk Codegolf. Kode QBIC masuk - kode QBasic keluar (dan selanjutnya dieksekusi).

:{      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.
steenbergh
sumber
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$
12Me21
sumber
1

PHP 7, 139 byte

masih sangat panjang

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];

mengambil input dari argumen baris perintah; jalankan bersama -r.

kerusakan

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
Titus
sumber