KITTカーアスキーアート


20

80年代のテレビシリーズKnight Riderは、KITTと呼ばれるインテリジェントな自己認識型の車を搭載していました。車の一つの特徴的な側面は、にKITTを許さフロントマウントスキャナバーだった(と見ている「を参照してください。」怪しいですまた、以前の別のテレビシリーズのファンにはなじみがありました)。

この写真に見られるように、スキャナーには8つのライトがありました。

ここに画像の説明を入力してください

図のようにライトが「移動」しました このアニメーション画像に

あなたが今推測しているように、あなたの仕事は、ASCIIアートの動く光でスキャナーバーを再作成することです。

チャレンジ

整数をt指定すると、次のように定義された、その瞬間のスキャナーバーの状態を出力します。

  • スキャナーは8つのライトで構成されています。
  • どの時点でも、ライトの1つがアクティブになり、として表示され#ます。時間にアクティブであった光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
またはボーナスイースターエッグを使用して4回の振動を実行します!!

どうやって?

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

JavaScript(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));
}

アニメーション版


あなたが1つのバイトを保存することができn>=7代わりにn/7&1
エディ

@Hedi-がの場合nは機能しますが、機能し[0 ... 13]ません。
アーナルド

4

JavaScript(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

Python、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

JavaScript、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

JavaScript(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

Perl、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

Perl、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行のコメント文字が含まれています(#!行は無視してください)。それらの1つは本当にコメントであり、実際にバイトを獲得します....

実際の残光アルゴリズムを実装します


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.