KITT গাড়ি ASCII শিল্প


20

80 এর টিভি সিরিজ নাইট রাইডারে একটি বুদ্ধিমান, স্ব-সচেতন গাড়িটি উপস্থিত ছিল যা কেআইটিটি নামে পরিচিত। গাড়ির একটি স্বতন্ত্র দিকটি ছিল সামনের মাউন্টযুক্ত স্ক্যানার বার যা কেআইটিটিকে "দেখার" অনুমতি দেয় (এবং এটি সন্দেহভাজনভাবে অন্য একটি, আগের টিভি সিরিজের ভক্তদের সাথে পরিচিত ছিল )।

এই ছবিতে দেখা যায় স্ক্যানারের আটটি লাইট ছিল:

এখানে চিত্র বর্ণনা লিখুন

এই অ্যানিমেটেড ইমেজের মতো আলোগুলি "সরানো" হয়েছে ।

আপনার কাজটি যেমন আপনি এখন অনুমান করেছেন, এটি ASCII আর্টে চলমান আলোর সাহায্যে স্ক্যানার বারটি পুনরায় তৈরি করা।

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া tহয়, তত্ক্ষণাত্ স্ক্যানার বারের স্থিতি আউটপুট করুন, নিম্নলিখিত হিসাবে সংজ্ঞায়িত:

  • স্ক্যানারটিতে আটটি লাইট রয়েছে।
  • যে কোনও তাত্ক্ষণিক মুহূর্তে লাইটগুলির একটি সক্রিয় থাকে এবং এটি প্রদর্শিত হয় #। যে আলোগুলি এক সময়ে সক্রিয় ছিল t-1এবং t-2এখন ম্লান হয়ে গেছে , এবং এটি প্রদর্শিত হবে +; যদি না তারা বর্তমান সক্রিয়টির সাথে একত্রিত হয়। বাকি লাইট বন্ধ আছে , এবং হিসাবে প্রদর্শিত হয় -
  • সক্রিয় আলো বাম থেকে ডানে, তারপরে ডান থেকে বাম দিকে চলে।

প্রতিটি জন্য সঠিক আউটপুট tনীচে বিস্তারিত।

0  -->  #++-----   % The leftmost light is active, and it just came from the right.
                   % The two neighbouring lights are dimmed
1  -->  +#------   % The active light has bounced to the right, and it is covering
                   % one of the two lights that should be dimmed. So there is only
                   % one dimmed light
2  -->  ++#-----   % The active light has moved one more step to the right, and the
                   % two trailing dimmed lights are visible
3  -->  -++#----
7  -->  -----++#
8  -->  ------#+   % The active light has bounced to the left
9  -->  -----#++
10 -->  ----#++-
13 -->  -#++----
14 -->  #++-----   % Same as 0
15 -->  +#------   % Same as 1

tচক্রের নেতিবাচক মানগুলির জন্য কেবল প্রসারিত:

-1 -->  -#++----   % Same as 13
-2 -->  --#++---   % Same as 12

অতিরিক্ত বিধি

আপনি কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন।

আউটপুটটিতে পেছনের সাদা স্থান এবং একটি শীর্ষস্থানীয় নিউলাইন থাকতে পারে।

বাইটস মধ্যে সংক্ষিপ্ত কোড।


উত্তর:


4

জেলি , 28 22 বাইট

@ ডেনিসের সহায়তায় ধন্যবাদ -6 বাইটস! (প্রথমে উপস্থাপিত করুন, তারপরে সম্মতি দিন)

”-ẋ6;“#++”ṙ7Ḷ’¤Ḋ€U;$⁸ị

ট্রাইটাইনলাইন
বা বোনাস ইস্টার ডিম দিয়ে চারটি দোলনা সম্পাদন করুন !!

কিভাবে?

”-ẋ6;“#++”ṙ7Ḷ’¤Ḋ€U;$⁸ị - Main link: n
”-   “#++”             - strings "-" and "#++"
  ẋ6                   - repeat six times: "------"
    ;                  - concatenate: "------#++"
              ¤        - nilad followed by atoms as a nilad (ie make a constant)
           7Ḷ’         -     range(7) decremented: [-1,0,1,2,3,4,5]
          ṙ            - rotate left by (makes)-----------> ["+------#+",
               Ḋ€      - Dequeue each                        "------#++",
                   $   - last two atoms as a monad           "-----#++-",
                 U     -     reverse (vectorises)            "----#++--",
                  ;    -     concatenate                     "---#++---",
                    ⁸  - left argument (n)                   "--#++----",
                     ị - index into (1 based and modular)    "-#++-----"])

6

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

সম্পাদনা - নেতিবাচক মানগুলির জন্য স্থির। এখন সমর্থন করছে N >= -8,000,000,000, যা স্বয়ং ক্রুসে মোডে মোটামুটি ভাল বর্ধিত অপারেটিং সময় সরবরাহ করবে। :-)

let f =

n=>[..."------#++-----".substr((n+=8e9)%7,8)].sort(_=>n/7&1).join``

// testing 28 frames
for(var i = -14; i < 14; i++) {
  console.log(f(i));
}

অ্যানিমেটেড সংস্করণ


আপনি এর n>=7পরিবর্তে 1 বাইট সংরক্ষণ করতে পারবেনn/7&1
Hedi

@Hedi - ওটা যদি কাজ করবে nছিল [0 ... 13], কিন্তু এটা নয়।
আর্নল্ড

4

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

n=>"01234567".replace(/./g,i=>"-+##"[g=n=>!((+i+n)%14&&(n-i)%14),g(n)*2|g(n-1)|g(n-2)])

"- + ##" বিটমাস্ক দ্বারা সূচিত হয়, যেখানে বিট 1 একটি সক্রিয় আলোকে চিহ্নিত করে এবং বিট 0 টি ম্লান আলোকে বোঝায়। সক্রিয় / ম্লান্ধতা এখন পছন্দসই অবস্থান থেকে বর্তমান অবস্থান যোগ এবং বিয়োগ করে এবং ফলাফল 14 দ্বারা বিভাজ্য কিনা তা দেখে গণনা করা হয়।


4

পাইথন, 53 বাইট

lambda n:('-'*5+'++#'+'-'*6)[-n%7:][:8][::-n/7%2*2-1]

স্ট্রিং তৈরি করে -----++#------, ইনপুট মডুলো 7 এর উপর নির্ভর করে একটি দৈর্ঘ্য -8 উইন্ডো নেয়, 1 এবং 7 এর মধ্যে থাকা ইনপুট মডুল 14 এর বিপরীতে।



3

এমএটিএল, 34 30 27 বাইট

'++#-'I:7XyY+4LZ)t2&P&viY))

7 লাইট সংরক্ষণ করেছেন লুইসকে ধন্যবাদ thanks

অনলাইনে চেষ্টা করে দেখুন!

প্রথম 25 টি পদক্ষেপের সাথে আরেকটি উদাহরণ

ব্যাখ্যা

'++#-'      % Push the string literal to the stack
I:          % Create the array [1 2 3]
7Xy         % Create a 7 x 7 identity matrix
Y+          % Perform 2D convolution between the vector and this matrix
4LZ)        % Grab all but the first column. Yields the following matrix
            %
            %    2 3 0 0 0 0 0 0
            %    1 2 3 0 0 0 0 0
            %    0 1 2 3 0 0 0 0
            %    0 0 1 2 3 0 0 0
            %    0 0 0 1 2 3 0 0
            %    0 0 0 0 1 2 3 0
            %    0 0 0 0 0 1 2 3
            %
t2&P&v      % Copy this matrix, flip it horizontally and vertically concatenate
            % it with itself. 
i           % Explicitly grab the input (n)
Y)          % Get the n-th row of the above matrix (and use modular indexing)
)           % Index into the initial string literal to replace 2 with #, 1 and 3 with + 
            % and all 0's with -
            % Implicitly display the result

@ লুইস মেন্ডো ধন্যবাদ!
Suever

2

পাইথ, 33 28 বাইট

সমস্ত লাইট একইভাবে গণনা করে 5 বাইট সংরক্ষণ করা হয়েছে।

X:*8\-@LJ+U7_S7,-Q2tQ\+@JQ\#

লাইটগুলি সমস্ত বন্ধ করে দিয়ে শুরু করে এবং একবারে এটি একবারে চালু করে।

অনলাইনে চেষ্টা করে দেখুন!


2

জাভাস্ক্রিপ্ট, 204 বাইট

function g(i){var a=(i%16+16)%16
if(!a)return g(2)
if(1==a%14)return(g(2)+'-').substr(1)
if((1<a)&&(a<8))return Array(a-1).join('-')+'++#'+Array(8-a).join('-')
return g(a-7).split("").reverse().join("")}

পরীক্ষা

function g(i){var a=(i%16+16)%16
if(!a)return g(2)
if(1==a%14)return(g(2)+'-').substr(1)
if((1<a)&&(a<8))return Array(a-1).join('-')+'++#'+Array(8-a).join('-')
return g(a-7).split("").reverse().join("")}

for (var i = 0; i < 16; ++i) {
    console.log(i + '-->' + g(i));
}


2

জাভাস্ক্রিপ্ট (ES6), 72

t=>`------${(t=(13+t%14)%14)>6?'#++':'++#'}------`.substr(t>6?t%7:7-t,8)

কম গল্ফড

t=>(
  pad = '------',
  t = (13+(t%14))%14,
  u = t % 7,
  t > 6 ? (pad + '#++' + pad).substr(u, 8)
        : (pad + '++#' + pad).substr(7 - u, 8)
)

পরীক্ষা

f=
t=>`------${(t=(13+t%14)%14)>6?'#++':'++#'}------`.substr(t>6?t%7:7-t,8)

T=_=>(
  O.textContent=f(++N.textContent),
  setTimeout(T, 150)
)

T()
<input id=I type=number value=0 oninput='N.textContent=this.value'>
<pre id=N>-100</pre>
<pre id=O></pre>


1

পার্ল, 65 বাইট

এর জন্য +1 অন্তর্ভুক্ত -n

STDIN এ নম্বরটি দিয়ে চালান:

for i in 0 `seq 14`; do perl -M5.010 kitt.pl <<< $i; done

kitt.pl:

#!/usr/bin/perl -n
$_="311e".--$_%14+4e16|0;s/.(.{8})/$&|reverse/e;y/013/-+#/;say//

খুব প্রতিযোগিতামূলক নয় তবে অদ্ভুত পদ্ধতির জন্য একটি পোস্টের উপযুক্ত


1

পার্ল, 56 55 বাইট

জন্য +3 অন্তর্ভুক্ত -p

STDIN এ নম্বরটি দিয়ে চালান:

for i in 0 `seq 14`; do kitt.pl <<< $i; echo; done

kitt.pl:

#!/usr/bin/perl -p
$_=eval'1x8
|1x(7-abs$_--%14-7).++$^F#'x3;y;1537;-+#

চূড়ান্ত নিউলাইন ছাড়াই এটিকে একটি ফাইলে রাখুন (একটি ফাইনাল যুক্ত করুন); যদি আপনি এটি নিয়ে বিরক্ত না চান তবে প্রোগ্রামটিতে )। দুর্ভাগ্যক্রমে আক্ষরিক ব্যবহার ^Fকাজ করে না

এই প্রোগ্রামটিতে 2 টি মন্তব্য অক্ষর রয়েছে ( #!লাইনটি উপেক্ষা করুন )। তাদের মধ্যে একটি সত্যিই একটি মন্তব্য এবং আসলে লাভ একটি বাইট ....

প্রকৃত আফগ্লো অ্যালগরিদমকে কার্যকর করে


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