এএসসিআইআই আর্ট "ফ্লাইট সিমুলেটর"


24

সম্পাদনা

মনে হয় আসল পোস্টে আমার টাইপোর পরে কিছু বিভ্রান্তি দেখা দিয়েছে যা প্লেনটি সংজ্ঞায়িত করতে একটি ছোট হাতের ও পরে একটি বড় হাতের অক্ষর ব্যবহার করেছিল। দুর্ভাগ্যক্রমে এই বাগটি স্যান্ডবক্সে উঠেনি। যেহেতু অনেক সদস্য উভয়ের সাথে উত্তর লিখেছেন এবং টাইপো যেহেতু আমার দোষ ছিল তাই আমি বিমানের সংজ্ঞাতে বড় হাতের বা ছোট হাতের উভয়কেই অনুমতি দেব। আমি এটির জন্য একটি নতুন নিয়ম যুক্ত করেছি।

পটভূমি

আমি এসকিআই আর্ট অ্যানিমেশনগুলিকে পছন্দ করি কারণ আমি তাদের কল করি তাই এখানে অন্যটি so আমি মনে করি না এটি কার্যকর করা খুব কঠিন তাই আশা করি কিছু সংক্ষিপ্ত এবং আকর্ষণীয় উত্তর পাবেন।

সকল সহযোগী সম্প্রদায়ের সদস্যদের কাছে

আপনি যদি নিজের উত্তরে উন্নতি করেন তবে দয়া করে আপনার বাইট গণনাটি সংশোধন করুন

পুরানো বাইট গণনা নতুন বাইট গণনা

যাতে আমরা আপনার অগ্রগতি দেখতে পারি। ধন্যবাদ!

চ্যালেঞ্জ

এখানে আসকি বিমান রয়েছে

--O--

এখানে একটি আসকি রানওয়ে

____|     |____

বিমানটি রানওয়ের উপরে 5 টি নতুন লাইনে শুরু হয়। মেট্রিক এবং ইম্পেরিয়াল সিস্টেমগুলির মধ্যে যে কোনও সংঘর্ষ রোধ করতে এবং এটি সত্যই আন্তর্জাতিক চ্যালেঞ্জ হিসাবে চিহ্নিত করতে আমি মিটার বা ফুট উল্লেখ করব না। উদাহরণ:

        --O--




____|     |____

প্লেনটি রানওয়ের ঠিক মাঝখানে ঠিকঠাক মতো অবতরণ করতে হবে:

____|--O--|____

ইনপুট

বিমানের প্রাথমিক অনুভূমিক অবস্থানটি একটি পূর্ণসংখ্যার ইনপুট দ্বারা সংজ্ঞায়িত করা হয় যা বাম উইংয়ের ডগাটি উল্লেখ করতে ব্যবহৃত হয় অর্থাৎ এটি 0 থেকে 10 সমেতের মধ্যে রয়েছে।

আউটপুট

বিমানের বিমানের প্রতিটি পর্যায় অবশ্যই দেখানো হবে। নীচে উদাহরণ (ইনপুট = 10):

          --O--




____|     |____

         --O--



____|     |____

        --O--


____|     |____

       --O--

____|     |____

      --O--
____|     |____

____|--O--|____

জিনিসগুলিকে সহজ রাখতে, আমরা দৃষ্টিভঙ্গির আইনগুলি অগ্রাহ্য করছি। রানওয়েটি যত কাছাকাছি আসবে একই আকারে থাকবে।

বিধি

  • আপডেট প্লেনের মাঝখানে হয় বড় হাতের বা ছোট হাতের অক্ষর হতে পারে তবে যে কোনওটি চয়ন করা হয় কোডের সাথে অবশ্যই সামঞ্জস্য হতে হবে। যদি আপনার ভাষা উপরের অক্ষরগুলিকে সমর্থন না করে তবে কেবলমাত্র অক্ষর বিকল্প হিসাবে ব্যবহার করতে নির্দ্বিধায়।
  • বিমানটি ফ্রেম প্রতি 1 লাইন অবতরণ করে।
  • বিমানটি যখন একবার একটি লাইনে নেমে আসে তখনই কেবল 1 টি স্থান বাম বা ডানদিকে নিয়ে যেতে পারে। এটি বংশদ্ভুত প্রতিটি লাইন চলতে হবে না। যতক্ষণ না এটি রানওয়েতে শেষ হয় এটি ডান বা বাম দিকে সরানো আপনার পক্ষে to আপনি পাইলট!
  • কোনও ত্রুটি পরিচালনার প্রয়োজন নেই। আপনি ধরে নিতে পারেন ইনপুটটি সর্বদা 0-10 অন্তর্ভুক্ত থেকে বৈধ পূর্ণসংখ্যার হবে।
  • আউটপুট অবশ্যই উপরে বর্ণিত অক্ষরগুলি সমন্বিত থাকতে পারে (যদি আপনার ভাষা তাদের সম্পাদিত প্রথম নিয়মটি দেখে সমর্থন করে না) এবং একই আকারের হওয়া আবশ্যক অর্থাৎ 15 টি অক্ষরের প্রশস্ত 6 লাইন উচ্চতা শুরু করতে হবে। উপরের উদাহরণটির মতো উচ্চতা হ্রাস পেতে পারে।
  • প্রোগ্রাম বা ফাংশনটি ঠিক আছে তবে উপরের মতো প্রদর্শিত হবে।
  • শীর্ষস্থানীয় / পিছনের স্থান / নিউলাইনগুলি আমার দ্বারা ভাল are
  • আপনি যদি চান তবে আউটপুট ফ্রেমের মধ্যে পর্দা সাফাই নির্দ্বিধায় অনুভব করুন। এই না প্রয়োজন।
  • স্ট্যান্ডার্ড লুফোলগুলি যথারীতি নিষিদ্ধ (যদিও আমি মনে করি না যে এমন অনেকগুলি রয়েছে যা এই ধরণের চ্যালেঞ্জের সাথে সহায়তা করবে)।
  • এটি কোড গল্ফ তাই সংক্ষিপ্ত উত্তরটি অবশ্যই বিজয়ী এবং সম্ভবত বেশিরভাগ ভোট পাবে তবে কিছুটা অপ্রত্যাশিত ভাষায় যদি সত্যিই আকর্ষণীয় সমাধান আসে তবে এটি দীর্ঘতর হলেও এটি সেরা উত্তর হিসাবে গ্রহণযোগ্য হবে না accepted যতক্ষণ না নিয়মগুলি কাজ করে ততক্ষণ পোস্ট করতে নির্দ্বিধায় যোগাযোগ করুন।

পাইথন 2-তে অসম্পূর্ণ রেফারেন্স প্রয়োগকরণ এটি অনলাইনে উপলব্ধ উপলভ্য ! যাতে আপনি দেখতে পারেন যে এটি কীভাবে বিভিন্ন ইনপুট মানগুলির সন্ধান করে।


আউটপুট
ইনপুটটির

@Ovs এর স্পষ্টতার জন্য ধন্যবাদ আমি তখন ট্যাগটি সরিয়ে ফেলব।
এলপেড্রো

সাধারণত, গ্রহণযোগ্যতা সেই উত্তরের দিকে যায় যা উদ্দেশ্যমূলক বিজয়ী মানদণ্ডের সাথে সর্বোত্তমভাবে মেনে চলে। আপনি যদি আরও কিছু গ্রহণ করেন তবে আপনি আরও দীর্ঘ উত্তর পেতে পারেন।
স্তর নদী সেন্ট

ধন্যবাদ @ লেভেলরিভারস্ট। এটি পরিষ্কার করার জন্য কোনও মেটা পোস্ট আছে কি? যদি না হয় তবে কোনও উত্তর না মানাই ভাল।
এলপেড্রো

বিটিডব্লিউ, আমি এর আগে আরও দীর্ঘ উত্তর গ্রহণ করেছি এবং সংক্ষিপ্ত উত্তরটিকেও ক্রেডিট দিয়েছি এবং সেই সাথে সম্প্রদায়টির কোনও পূর্ববর্তী চ্যালেঞ্জ নেই । প্রশ্নের শেষে আমার ফলাফল মন্তব্য দেখুন । এটা কি ভুল ছিল?
এলপেড্রো

উত্তর:


5

টিআই-বেসিক, 61 বাইট

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

আপনি কি কোনও অনলাইন দোভাষী সম্পর্কে জানেন বা পরীক্ষার জন্য (লিনাক্সের জন্য) ডাউনলোড করেন? এটি কাজ করে ধরে নিয়ে উত্তরের জন্য +1 :)
এলপিড্রো

TilEm দেখুন। আমি একমাত্র কাজ করতে পারি।
জুলিয়ান ল্যাচনিয়েট

2
এমন কাউকে জিজ্ঞাসা করার জন্য +1 যাঁর আলাদা উত্তর থাকতে পারে। অবশ্যই টিলিয়াম পরীক্ষা করে দেখুন এবং টিপটির জন্য ধন্যবাদ।
এলপেড্রো

8

টিআই-বেসিক, 62 বাইট

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

দ্রষ্টব্য যে টিআই-বেসিক _ বা | সমর্থন করে না এবং তাই আমি একটি মূলধন আমি এবং - দিয়ে প্রতিস্থাপন করেছি। এটি বাইট গণনা প্রভাবিত করা উচিত নয়।


ঠিক আছে, আমি লিনাক্সে আছি। আপনি কি এমন ডাউনলোডের প্রস্তাব দিতে পারেন যা আমি এটি পরীক্ষা করতে পারি? বিটিডব্লু, আমি ধরে নিয়েছি এটি কাজ করে যতক্ষণ না আমি কোনও অনুবাদককে এটি +1 খুঁজে না পাওয়া পর্যন্ত :)
এলপেড্রো

দুর্ভাগ্যক্রমে না. আমার উইন্ডোজ 10 কম্পিউটারে আমার কাছে ওয়াবাইটেমু এবং টিলএইম উভয়ই ইনস্টল করা আছে তবে আমি কোডটি একটি শারীরিক টিআই -৪৮ + তে পরীক্ষা করি। দুঃখিত
সোনার অনুপাত

সমস্যা নেই! শুধু জিজ্ঞাসা করছেন :)
এলপেড্রো

কোডের অনেকগুলি সম্পাদনা করার কারণে, এই পোস্টটি এবং জুলিয়ান লাচনিটের মধ্যে সবচেয়ে দ্রুততম বিকল্প, আমরা দুজনই 60 বাইট উপসংহারে না আসা পর্যন্ত, যেখানে আমি ক্লারহোম যুক্ত করেছি এবং 62 বাইট গণনা করেছি
গোল্ডেন

3
টিআইবি-বেসিক ?! নিস!
ডেভ ক্যান্টার

6

পাইথন 2, 107 বাইট

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

এটি অনলাইনে চেষ্টা করুন

কেবল অবতরণ বিমানের জন্য শেষ লাইন হার্ডকোডগুলি। এটি সম্ভবত আগে থেকে অংশগুলি পুনরায় ব্যবহার করে বা লুপের সাথে সংহত করে গল্ফ করা যেতে পারে।


5

পার্ল, 94 বাইট

কোড + -pপতাকা 93 বাইট ।

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

এটি অনলাইন চেষ্টা করুন!


@ ইথ প্রডাকশন আশা করি আপনি উপভোগ করবেন }{(এবং $"সিনট্যাক্স হাইলাইট করার সাথে জগাখিচুড়ি )।
দাদা

3

জাভাস্ক্রিপ্ট (ES6), 108 বাইট

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

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

এটা পরীক্ষা করো

ব্যবহার

কেবল fবিমানের সূচী দিয়ে কল করুন ।

f(2)

আউটপুট

  --O--




____|     |____

   --O--



____|     |____

    --O--


____|     |____

     --O--

____|     |____

    --O--
____|     |____

____|--O--|____

আপনি একটি <s> স্ন্যাক </ s> স্ট্যাক স্নিপেট যোগ করতে পারেন
ক্রিটিকি লিথোস

যতবারই আমি একটি প্রশ্ন জিজ্ঞাসা করি প্রথম উত্তরটি জাভাস্ক্রিপ্ট! +1
এলপেড্রো

আরে, লোকেরা যদি ট্রাইটোনলাইন পোস্ট করে (জাভাস্ক্রিপ্টের সাহায্যে এটি সম্ভব কিনা তা আপনি জানেন না) বা উপরে দেখানো 10 টির উদাহরণের ভিন্ন সমাধান পোস্ট করা ভাল হবে। আপনি কি এর পরিবর্তে উদাহরণ 2 থেকে আউটপুট পোস্ট করতে পারেন? :)
এলপেড্রো

@ এলপেড্রো, আপনি আপনার ব্রাউজার কনসোলে জাভাস্ক্রিপ্ট কার্যকর করতে পারেন, তবে কিছু অনলাইন কনসোলও রয়েছে। আমি একটি লিঙ্ক যুক্ত করব। আমি উদাহরণটিও পরিবর্তন করব।
লুক

ধন্যবাদ। কোন প্রব। আমি পুরানো সময়ের জাভাস্ক্রিপ্টে আছি যেখানে এটি কার্যকর করার জন্য আপনার একটি ওয়েব পৃষ্ঠা দরকার। অনুমান করুন যে সময়গুলি আমার সাথে পাওয়া দরকার :) আজকাল আরও সার্ভারসাইড। দ্রুত এবং শীতল উত্তরের জন্য শ্রদ্ধা।
এলপেড্রো

3

স্কালা, 224 181 বাইট

সম্পাদনা : "string"*nএটিকে পুনরায় পুনর্বার করতে আপনি কী করতে পারেন তা আমার কোনও ধারণা ছিল না ! স্ক্যালাল আমার মনকে উড়িয়ে দিতে থাকে। if(t>0)পরিবর্তে হারিয়ে যাওয়া if(t==0)একটি ছদ্মবেশী ভুল ছিল। টিপসের জন্য ধন্যবাদ, সুমা !


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)}

মূল মন্তব্য:

আমি মনে করি পুনরাবৃত্তির সমাধানটি চেষ্টা করা মজাদার। আমি স্কালায় তুলনামূলকভাবে নতুন, তাই আমি নিশ্চিত এটি সর্বোত্তম থেকে অনেক দূরে।



আপনি প্রয়োজন হবে না :Unit=। সমান চিহ্নটি ছাড়াই রিটার্নের ধরণটিকে ইউনিটে সেট করবে।
করভাস_192

এছাড়াও, আপনি কেন oপ্রথম লাইনে আরম্ভ করেননি ?. যেহেতু iসবসময়> = 0 হয়, তাহলে আপনি পরিবর্তন করতে পারেন i!=0&&i==tথেকে i>0&i==t(3 য় লাইন)।
corvus_192

2

ব্যাচ, 230 বাইট

@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

xশূণ্যস্থান সংখ্যা স্ট্রিংয়ের শুরু থেকে অপসারণ করা হয় s, তাই আমি প্যারামিটার 10. গত লাইন নিকটতম ব্যাচ হতে হয় বিয়োগ x-=sgn(x-5)


2

সেড, -nrপতাকাগুলির জন্য 181 বাইট + 2

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

Ungolfed

# 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

ব্যবহার: $ echo 2 | sed -nrf flightsim.sed


2

রেটিনা , 86 83 বাইট

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

এটি অনলাইন চেষ্টা করুন!

রানওয়েতে এবং এর উপরের খালি স্থানটি আমি ব্যবহার করতে পারতাম সম্ভবত কোনও ধরণের সংক্ষেপণ, তবে আমি যা কিছু চেষ্টা করেছি তা প্লেইন্টেক্সটের চেয়ে বেশি ব্যয়বহুল হয়ে উঠেছে (রেটিনা in এ একটি নতুন লাইন, তাই আপনি প্রারম্ভিক প্লেটে প্রারম্ভিক অবস্থাটি দেখতে পাবেন) দ্বিতীয় লাইন).



2

পার্ল 6 , 97 90 81 বাইট

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

এটি দেখতে যা দেখতে তার বিপরীতে, এটি --o--আপডেট টাস্ক বিবরণ দ্বারা অনুমোদিত হিসাবে সমতল (*) এর লোয়ার কেস সংস্করণকে আউটপুট করে ।

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

বিটওয়াস স্ট্রিং অপারেটররা এফটিডব্লিউ!

{                                                  # 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.
}

এটি কাজ করে কারণ বিটওয়াইস স্ট্রিং অপারেটরগুলি আউটপুট স্ট্রিংয়ের সেই অবস্থানে একটি নতুন অক্ষর গণনা করতে দুটি স্ট্রিংয়ে একটি নির্দিষ্ট অবস্থানে অক্ষরের কোডপয়েন্ট মান ব্যবহার করে।
এক্ষেত্রে:

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

বড় হাতের Oবিমানের জন্য, আমরা (ব্যাকস্ল্যাশগুলির জন্য +4 বাইট) ~^প্লেন মাস্ক সহ (স্ট্রিং বিটওয়াইজ এক্সওআর) ব্যবহার করতে পারি \r\ro\r\r:

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

বিমানের অফসেটের সূত্রটি, h + v*(17 - h/5)থেকে সরলীকৃত করা হয়েছিল:

  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

পাইথন 2 , 160 বাইট

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

এটি অনলাইন চেষ্টা করুন!

এখানে 384 থেকে 160 এ রেফারেন্স বাস্তবায়নটি গল্ফ হয়েছে go এখনও যেতে একটি উপায় আমার মনে হয়। মজাদার জন্য এবং আরও ভাল পাইথনের উত্তর উত্সাহিত করার জন্য সবেমাত্র পোস্ট করা হয়েছে।


আপনি নিজের চ্যালেঞ্জের প্রতিযোগিতা করতে পারেন ( এই মেটা পোস্টটি দেখুন )।
দাদা

তুমি কি করতে পার while-~x?
ফ্লিপট্যাক

এছাড়াও আমি মনে করি আপনি যেখানে বিট লিখবেন বা iতেমন বিয়োগ করতে পারেনi+=(i<5)-(i>5)
ফ্লিপট্যাক

1

বেফুঞ্জ -৩৩, ১৩6 ১৩০ বাইট

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

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

&                          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

রুবি, 94 বাইট

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

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

বিমানের অবস্থান মুদ্রণ করে তারপরে নিউলাইনগুলি এবং তারপরে বিমানবন্দর। তারপরে এটি 5 এর তুলনায় এর অবস্থানের উপর নির্ভর করে 1, -1 বা 0 দ্বারা বিমানটি সরানো হয়।

উপরের ২ বার লুপ করার পরে, বিমানবন্দরে বিমানটি মুদ্রণ করে।


1

8 ম , 177 172 বাইট

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

কথাটি f 0 এবং 10 এর মধ্যে একটি পূর্ণসংখ্যা আশা করে।

ব্যবহার

4 f

ব্যাখ্যা

: 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

গণিত, 111 বাইট

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

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

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং আউটপুট হিসাবে একটি স্ট্রিং প্রদান করে। সম্ভবত আরও গল্ফ করা যেতে পারে।


1

কিউবিআইসি , 93 91 84 বাইট

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

এক্স $ এর ঘোষণা প্রতিস্থাপনের মাধ্যমে কিছু বাইট ফেলেছে; উপরের স্থলটির দূরত্ব মুদ্রণকারী ফর লুপটিকে অনুকূলিত করে। নীচের ব্যাখ্যাটি পুরানো সংস্করণের জন্য, তবে এটি মূলত একইভাবে কাজ করে।

পরীক্ষার জন্য (এবং নান্দনিকতা) আমার 103 বাইটে কিছুটা আলাদা সংস্করণ ছিল:

:{_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

এগুলি কার্যত অভিন্ন। দ্বিতীয়টিরটিতে স্ক্রিনটি ফ্রেমের মধ্যে সাফ হয়ে যায় এবং ফ্রেমের মধ্যে এটি 0.5 সেকেন্ডের জন্য বন্ধ হয়ে যায় addition

নমুনা আউটপুট

নোট করুন যে আমি ফ্রেমের মধ্যে দুটি নতুন লাইন যুক্ত করেছি। উপরের সর্বাধিক গল্ফযুক্ত কোড ফ্রেমের মধ্যে খালি লাইন যুক্ত করে না, শীতলটি স্ক্রিনটি সাফ করে।

Command line: 10


          --O--




____|     |____


         --O--



____|     |____


        --O--


____|     |____


       --O--

____|     |____


      --O--
____|     |____


____|--O--|____

ব্যাখ্যা

যেহেতু আমি কিউবিআইসি সম্পর্কে সত্যই পছন্দ করি তার অনেকগুলি বিষয়গুলিতে আমি এই স্পর্শটি অনুভব করি এবং এর কিছু ফাংশন হুডের নীচে কীভাবে কাজ করে সে সম্পর্কে আমি একটি ভাল অন্তর্দৃষ্টি দিয়েছি, আমি ব্যাখ্যাটির উপরে কিছুটা ওভারবোর্ড গেছি। নোট করুন যে কিউবিআইসি, এর মূল অংশে, কোডগল্ফের একজন কিউব্যাসিক দোভাষী। কিউবিআইসি কোড প্রবেশ করে - কিউব্যাসিক কোড বেরিয়ে আসে (এবং পরবর্তীকালে এটি কার্যকর করা হয়)।

:{      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

স্মাইলব্যাসিক, 109 105 বাইট

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

পিএইচপি 7, 139 বাইট

এখনও ভয়ঙ্কর দীর্ঘ

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

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; সাথে চালানো -r

ভাঙ্গন

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.