KITT 자동차 ASCII 아트


20

80 년대 TV 시리즈 인 Knight Rider 는 KITT라는 지능적이고 자각하는 자동차를 선보였습니다. 차의 하나 개의 독특한 측면은 "참조"에 KITT를 허용 (그 모습 스캐너 바 전면에 장착했다 의심 , 또 다른 팬에 이전 친숙한 TV 시리즈 ).

이 그림과 같이 스캐너에는 8 개의 표시등이 있습니다.

여기에 이미지 설명을 입력하십시오

이 애니메이션 이미지 와 같이 조명이 "이동"되었습니다 .

지금까지 짐작했듯이 작업은 ASCII 표시로 움직이는 조명으로 스캐너 막대를 다시 만드는 것입니다.

도전

integer가 주어지면 t다음과 같이 정의 된 순간에 스캐너 막대의 상태를 출력하십시오.

  • 스캐너는 8 개의 표시등으로 구성됩니다.
  • 어느 시점에서든 표시 등 중 하나가 활성화 되고로 표시됩니다 #. 시간에 활성화되었던 조명 t-1t-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 바이트

@Dennis 덕분에 -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

자바 스크립트 (ES6), 65 67 바이트

편집 -음수 값으로 수정되었습니다. 이제 N >= -8,000,000,000AUTO CRUISE 모드에서 상당히 좋은 확장 된 작동 시간을 제공해야합니다. :-)

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>=7n/7&1
Hedi

@Hedi - 그 경우 일 것이다 n있었다 [0 ... 13], 그러나 아니다.
Arnauld

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

MATL, 34 30 27 바이트

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

@Luis 덕분에 7 바이트 절약

온라인으로 사용해보십시오!

처음 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 감사합니다!
Suever


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.