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;$⁸ị

TryItOnline
या एक बोनस ईस्टर अंडे के साथ चार दोलनों प्रदर्शन !!

कैसे?

”-ẋ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

जावास्क्रिप्ट (ईएस 6), 65 67 बाइट्स

EDIT - नकारात्मक मानों के लिए निश्चित। अब समर्थन 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
हेडी

@ हेदी - अगर nइसमें काम होता [0 ... 13], लेकिन ऐसा नहीं है।
अरनौलद

4

जावास्क्रिप्ट (ईएस 6), 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 विंडो लेता है, इनपुट्स 14 के लिए उलट होता है जो 1 और 7 के बीच झूठ होता है।



3

MATL, 34 30 27 बाइट्स

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

7 बाइट्स @Luis की बदौलत बच गईं

इसे ऑनलाइन आज़माएं!

पहले 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

@LuisMendo धन्यवाद!
स्वेवर


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

जावास्क्रिप्ट (ईएस 6), 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 टिप्पणी वर्ण शामिल हैं ( #!पंक्ति को अनदेखा करें )। उनमें से एक वास्तव में एक टिप्पणी है और वास्तव में लाभ है एक बाइट करता है ...।

वास्तविक afterglow एल्गोरिथ्म लागू करता है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.