ターミナルの海


46

バックグラウンド

北半球の夏は終わりました。多くの人は太陽、ビーチ、海の波を逃します。

挑戦

ここに海があります:

             **              **              **              **              ** 
         ****            ****            ****            ****            ****   
      *****           *****           *****           *****           *****     
    **   **         **   **         **   **         **   **         **   **     
  **      **      **      **      **      **      **      **      **      **    
**          ******          ******          ******          ******          ****

海はこの波パターンの5倍でできています。

            **  
        ****    
     *****      
   **   **      
 **      **     
*          *****

パターンの長さは16文字で、海はこのパターンの5倍= 80文字です。

このコマンドラインを使用して端末に印刷できます:

perl -e 'print "            **  \n        ****    \n     *****      \n   **   **      \n **      **     \n*          *****\n"'

またはこれ:

perl -e 'print " "x12, "*"x2, " "x2, "\n", " "x8, "*"x4, " "x4, "\n", " "x5, "*"x5, " "x6, "\n", " "x3, "*"x2, " "x3, "*"x2, " "x6, "\n", " "x1, "*"x2, " "x6, "*"x2, " "x5, "\n", "*"x1, " "x10, "*"x5, "\n"'

(2つ目は、正確なパターンを取得しやすくするためです)

あなたの仕事は、ターミナルに海を表示し、波が右に向かって動いているように見せることです。100msごとに1文字の速度(=秒ごとに10回)で右にシフトする必要があります。80桁目以降に文字を印刷する必要はありませんが、右端の波が消えると、新しい波が左側に表示されます。
出力の例を次に示します。

時間= 0.0s

             **              **              **              **              ** 
         ****            ****            ****            ****            ****   
      *****           *****           *****           *****           *****     
    **   **         **   **         **   **         **   **         **   **     
  **      **      **      **      **      **      **      **      **      **    
**          ******          ******          ******          ******          ****

時間= 0.1秒

              **              **              **              **              **
          ****            ****            ****            ****            ****  
       *****           *****           *****           *****           *****    
     **   **         **   **         **   **         **   **         **   **    
   **      **      **      **      **      **      **      **      **      **   
***          ******          ******          ******          ******          ***

時間= 0.2秒

*              **              **              **              **              *
           ****            ****            ****            ****            **** 
        *****           *****           *****           *****           *****   
      **   **         **   **         **   **         **   **         **   **   
    **      **      **      **      **      **      **      **      **      **  
****          ******          ******          ******          ******          **

時間= 0.3秒

**              **              **              **              **              
            ****            ****            ****            ****            ****
         *****           *****           *****           *****           *****  
       **   **         **   **         **   **         **   **         **   **  
     **      **      **      **      **      **      **      **      **      ** 
*****          ******          ******          ******          ******          *

時間= 0.4秒

 **              **              **              **              **             
*            ****            ****            ****            ****            ***
          *****           *****           *****           *****           ***** 
        **   **         **   **         **   **         **   **         **   ** 
      **      **      **      **      **      **      **      **      **      **
******          ******          ******          ******          ******          

もちろん、各出力は前の出力を置き換えます。

このコードをUNIXターミナルで実行して、アニメーションでどのように見えるかを確認できます。

perl -M5.010 -MTime::HiRes=sleep -E '@arr=([($")x12,($n="*")x2,($")x3],[($")x8,($n)x4,($")x4],[($")x5,($n)x5,($")x6],[($")x3,($n)x2,($")x3,($n)x2,($")x6],[($")x1,($n)x2,($")x6,($n)x2,($")x5],[($n)x1,($")x10,($n)x5]);while(++$j){for$i(0..5){for$k(0..15) {$out[$i][16*$_+$k]=$arr[$i][($k-$j)%16]for 0..4}}say"\e[H",$/,join$/,map{join"",@$_}@out;sleep 0.1}'

(このコードはあまりよくゴルフされていないことに注意してください:ターミナルで実行するのに便利なほどコンパクトにしただけです。)

勝利基準

これはcodegolfなので、バイト単位の最短コードが優先されます。


2
どのフレームでもアニメーションを開始できますか?
アーナルド

2
05ab1e.tryitonline.net / ...ひどい05AB1Eはアニメーション化できません。それは短かったでしょう。
魔法のタコUr

2
@Arnauldはい、できます。
ダダ

2
ああ、あなたは正しい!これらは真のラムダです
ルイスメンドー

14
「夏は終わりました」それはあなたの非常に北半球です。
MikeTheLiar 16

回答:


18

MATL41 40バイト

`'3SJp/B@Tc`@+ara'F'* 'Za6el&Xx80:@-Z)DT

実行例:

enter image description here

または、MATL Online試しください(実際の速度はサーバーの負荷に依存する場合があります)。

使い方

`                    % Do...while
  '3SJp/B@Tc`@+ara'  %   Compressed string (actually it's just a change of base)
  F                  %   Push false. Indicates base-95 input alphabet for decompression
  '* '               %   Push this string, which defines output alphabet
  Za                 %   Base conversion. This decompresses the string
  6e                 %   Reshape as a 6-row char array. This gives the basic pattern
  l&Xx               %   Pause 0.1 seconds and clear screen
  80:                %   Push array [1 2 ... 80] 
  @-                 %   Subtract iteration index to each element of that array. This
                     %    will produce the rotation via modular indexing
  Z)                 %   Use as column index. Indexing is modular, so this repeats
                     %   (and rotates) the pattern
  D                  %   Display
  T                  %   True. Loop condition for infinite loop
                     % Implicit end

19

JavaScript(ES6)+ HTML、151 143 + 10 = 161 153バイト

a=[48,15,57347,6147,1542,504];setInterval("a=a.map(n=>{for(x=-1;++x<80;)s+=' *'[n>>x%16&1];s+=`\n`;return n>>>15|n<<1},s='');O.innerHTML=s",99)
<pre id=O>


変数の機能は何aですか?
Kritixiリトス

@KritixiLithos aは、バイナリエンコードされた波形パターンを保持し、各フレームで回転します。したがって、ハードコーディングすることはできません。変数に格納する必要があります。
アーナルド

16

HTML + CSS、70 + 181 175 = 245バイト

使用になりtext-shadowrtlテキストおよびCSSキーフレームアニメーションを。

a{display:flex;overflow:hidden;width:80ch}pre{text-shadow:16ch 0,32ch 0,48ch 0,64ch 0,80ch 0;direction:rtl;animation:w steps(16)1.6s infinite}@keyframes w{0%{margin-left:-16ch
<a><pre>**
  ****
    *****
    **   **
   **      **
***          ***


9

C#450 444 425 417バイト

399なしですusing System.Linq;が、それは不正行為になると確信しています...

編集:@Cyoceのおかげで25バイト保存

ゴルフ:

void S(){Func<string,string>r=a=>string.Concat(Enumerable.Repeat(a,5));Func<string,int,string>s=(b,i)=>(b.Substring(16-i)+b).Substring(0,80);int p=0;for(;;){Console.Clear();Console.WriteLine(string.Join("\r\n",new string[]{s(r("            **  "),p),s(r("        ****    "),p),s(r("     *****      "),p),s(r(" **      **     "),p),s(r("*          *****"),p),}));Thread.Sleep(100);p++;if(p==16)p=0;}}

ゴルフをしていない:

public void S()
{
  Func<string, string> r = a => string.Concat(Enumerable.Repeat(a, 5));
  Func<string, int, string> s = (b, i) => (b.Substring(16 - i) + b).Substring(0, 80);

  int p = 0;
  for(;;)
  {
    Console.Clear();
    Console.WriteLine(
      string.Join("\r\n", new string[]
    {
      s(r("            **  "), p),
      s(r("        ****    "), p),
      s(r("     *****      "), p),
      s(r(" **      **     "), p),
      s(r("*          *****"), p),})
      );
    Thread.Sleep(100);
    p++;

    if (p == 16)
      p = 0;
  }
}

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


1
で括弧を削除できると思います(a)=>。そして、while(true)することができfor(;;)
Cyoce

1
以下のためにsラムダ私はあなたが削除することができると思う{}return
Cyoce

両方に取り組み、合計25バイトの節約になりました、ありがとう!:)
ピートアーデン

関数全体をラムダにすることができます。私はあなたにも削除することができると思う\rからstring.Join(Windowsの場合、少なくともそれが動作し、しかしモノでそれをテストしていない)こともできます置くことによって1バイトの保存p++forこのようなループfor(;;p++)
ステファン

下部(if (p==16)...)の境界チェックを削除するには、次のようにforループヘッダーに配置することもできますfor(;;p=++p%16)。宣言して1以上のバイトを保存するp(ループ内for(int p=0;;p=++p%16)
ステファン

7

V、98 97 73バイト

24バイトを節約してくれた@ nmjcman101に感謝します!

i¹ ³ **  
¸ ´*´ 
µ µ*¶ 
³ **³ **¶ 
 **¶ **µ 
*± µ*<ESC>{<C-v>}y4pò:sl100m
$<C-v>}x|Pò

これには多くの印刷できないものが含まれているため、xxd hexdumpがあります。

0000000: 69c2 b920 c2b3 202a 2a20 200a c2b8 20c2  i.. .. **  ... .
0000010: b42a c2b4 200a c2b5 20c2 b52a c2b6 200a  .*.. ... ..*.. .
0000020: c2b3 202a 2ac2 b320 2a2a c2b6 200a 202a  .. **.. **.. . *
0000030: 2ac2 b620 2a2a c2b5 200a 2ac2 b120 c2b5  *.. **.. .*.. ..
0000040: 2a1b 7b16 7d79 3470 c3b2 3a73 6c31 3030  *.{.}y4p..:sl100
0000050: 6d0a 2416 7d78 7c50 c3b2 0a              m.$.}x|P...

編集

  1. y$代わりに使用<C-v>$y

  2. 多くの変更

    • 各行をコピーして4回貼り付ける代わりに、最初にウェーブを生成してから、全体をコピーして4回貼り付けます
    • 使用{して}数バイトを保存します
    • òレジスタの代わりに使用して無限ループを作成します(何らかの理由で、動作òさせるために最後にを含める必要があります)
    • *下部の静電気を修正

ミニ説明

<alt-n>文字列のコピーを作成するために使用しています。たとえば、<alt-5>*(これはのように見えますµ5)は挿入モードで5コピーを作成*します。これは、文字列をコピーして正規表現を使用して必要な置換を行うよりも短いことがわかりました。1つのウェーブを作成した後、他のウェーブを作成するために貼り付けます。最後に、ò無限ループ(遅延100ms)を作成するために再帰的にループします。

GIF

ほとんどのコードは波の作成に専念しているので、私はまだこれをゴルフしようとしています。TIOはコードの実行が終了した後にのみ出力を出力するため、このコードはTIOでは機能しないことに注意してください。だからここにgifがあります(低品質のため、申し訳ありませんが、ウェブサイトを使用してをに変換する.mov必要がありました.gif。また>_、右側にポップアップし続けるのは私のMacのドックのターミナルアイコンです):

波gif


ファンキーな繰り返し番号がどのように機能するかについてはほとんどわかりませんが、1つのウェーブを作成し、それをコピー/貼り付けをブロックすると、文字を保存できます(各行を4回貼り付ける代わりに)TryItOnlineへのリンク
nmjcman101

以下は親切、私はあなただと思う5j(の文脈では$<C-V>5j)ちょうどかもしれない}、とpした後|でなければなりませんP静的を修正れる*左下にあります。
nmjcman101 16

1
最後に(コメントスパムでごめんなさい、明らかに5分間編集可能です)qm[CODE]@mq@m最後のをに置き換えることができますò[CODE]。間のコードはò(マクロと同様に)ブレークするまでループし、プログラムの終わりでò暗黙的に閉じられます。
nmjcman101 16

@ nmjcman101助けてくれてありがとう!(数バイトゴルフを手伝ってくれればコメントスパムではありません:)
Kritixi Lithos

6

バッチ、424バイト

@echo off
set f=     
set a=%f%%f%  **  
set b=%f%   ****    
set c=%f%***** %f%
set d=   **   ** %f%
set e= **%f% **%f%
set f=*%f%%f%*****
set a=%a%%a%%a%%a%%a%%b%%b%%b%%b%%b%%c%%c%%c%%c%%c%%d%%d%%d%%d%%d%%e%%e%%e%%e%%e%%f%%f%%f%%f%%f%
:l
cls
echo %a%
set a=%a:~79,1%%a:~0,79%%a:~159,1%%a:~80,79%%a:~249,1%%a:~160,79%%a:~319,1%%a:~240,79%%a:~399,1%%a:~320,79%%a:~-1%%a:~-80,79%
ping>nul 1.1 -n 1 -w 100
goto l

一部の行には末尾スペースがあります。標準の80列のターミナルが必要です。タイミングはあまり正確ではありませんが、Batchでできる最善の方法です。


6

ラケット395 374 373 367 364 351バイト

画面のクリアに外部ライブラリを使用します
編集:w関数を定義およびインライン化しないことで21バイトを保存しました。
Edit2:スペースを削除して1バイトを保存しました。
Edit3:に名前loopを変更して6バイトを節約しましたp、@ rnsoに感謝!
Edit4:3バイトの保存にサブストリングを入れます。
Edit5:を削除します#lang racket。これはインタープリターでは必要ありません。

ゴルフ:351バイト

[require[planet neil/charterm:3:0]][let p([n 1])[with-charterm[void[charterm-clear-screen]]][for([i'["            **  ""        ****    ""     *****      ""   **   **      "" **      **     ""*          *****"]])[let([g substring][x[string-join[make-list 5 i]""]])[displayln[string-append[g x[- 16 n]][g x 0[- 16 n]]]]]][sleep .1][p[modulo[+ n 1]16]]]

スクロール(クリアなし):272バイト

[let p([n 1])[for([i'["            **  ""        ****    ""     *****      ""   **   **      "" **      **     ""*          *****"]])[let([g substring][x[string-join[make-list 5 i]""]])[displayln[string-append[g x[- 16 n]][g x 0[- 16 n]]]]]][sleep .1][p[modulo[+ n 1]16]]]

ゴルフをしていない:

#lang racket
[require [planet neil/charterm:3:0]]
[define w
'[
"            **  "
"        ****    "
"     *****      "
"   **   **      "
" **      **     "
"*          *****"]]
[define (rotmul count)
  [for ([i w])
    [let ([x [string-join [make-list 5 i] ""]])
      [displayln [string-append [substring x count]
                                [substring x 0 count]]]]]]

[let loop ([n 1])
  [with-charterm
   [void [charterm-clear-screen]]]
  [rotmul [- 16 n]]
  [sleep .1]
  [loop [modulo [+ n 1] 16]]]

波


バイトを減らすために、名前を短い名前(ループの代わりにpなど)に変更できます。ビデオをgifファイルにキャプチャするためにどのソフトウェアを使用しましたか?
rnso 16

@rnso:ああ、そうです!そのことを考えていませんでした。私はmp4をgifに変換するために使用simplescreenrecorderavconvました。
アルティメットホーク

(g部分文字列)をletに入れると、コードの後半で2つの部分文字列キーワードの代わりにgを使用できます。これにより、さらに5バイト節約できます。また、あなたの非ゴルフバージョンでは「lst」は何をしていますか?
rnso 16

@rnso:それを削除rotmulwました。実際にパラメーターとして使用したときの残骸でした。
アルティメットホーク

ゴルフバージョンから「#langラケット」を削除することもできます。このサイトのほとんどのラケットコードには、バイトをカウントする際に含まれていません。
rnso 16

4

PowerShellの3.0、183の 182 173バイト

バイナリシフト演算子にはPS 3.0が必要です。AdmBorkBork のヘルプで173バイトにスリム化

$w=12,240,1984,6336,24672,32799
for(){0..5|%{'{0:D16}'-f+[Convert]::ToString(([uint16]$o=$w[$_]),2)*5-replace0,' '-replace1,'*'
$w[$_]=$o-shr1-bor$o-shl15}
sleep -m 100
cls}

ポッシュウェーブ


素敵な答え!一部のゴルフ-の代わりに10進形式指定子を使用して.PadLeft$o宣言を[convert]呼び出しに移動し、-replaceopsの数値を囲む引用符を削除します。あなたが降り175 -for(){0..5|%{("{0:D16}"-f+[Convert]::ToString(([uint16]$o=$w[$_]),2))*5-replace0,' '-replace1,'*'
AdmBorkBork

@AdmBorkBorkありがとう!回答を更新するのにかなり時間がかかって申し訳ありません。で説明+してもらえます"{0:D16}"-f+[Convert]か?それなしでは機能しませんが、その機能を理解することはできません。
ビートクラッカー

[convert]::ToString()文字列を返します。に+キャストを強制して、動作する[int]ため-fの正しいパラメータータイプを選択しますD16
AdmBorkBork

1
@AdmBorkBork PSは+'1'、最初の被加数なしで有効な算術演算のように扱い、結果をキャストstringintて返しますか?グレートスコット!
ビートクラッカー

3

Bash + coreutils、172 148バイト

@zeppelinのおかげで24バイト節約、多くの感謝

while :
do clear
cut -c$[i=i%16+1]-$[79+i] <(base64 -d<<<4AJFACddABVgf2dnw+CvmeyOkhIoUJOPLK6oKkljh0+Peqi5BfrbbnDyuVkr+AA==|xz -qdFraw)
sleep .1
done

最初の行は、6つの連続した波で構成される次のパターンを解凍します。

**              **              **              **              **              **              
            ****            ****            ****            ****            ****            ****
         *****           *****           *****           *****           *****           *****  
       **   **         **   **         **   **         **   **         **   **         **   **  
     **      **      **      **      **      **      **      **      **      **      **      ** 
*****          ******          ******          ******          ******          ******          *

次に、ループはそのパターンを介して80バイト幅のウィンドウをスライドさせます。


Coreutils base64ユーティリティは-Dフラグをサポートしていません(代わりに-d、小文字にする必要があります)。
ツェッペリン

gzipの代わりに、生のLZMA(xz)を使用して(lzma -Frawで圧縮、xz -qdFrawで圧縮解除)、10バイトまで保存できます。
ツェッペリン

また、古い算術拡張構文を使用することができます$を[]の代わりに、$(())、4バイト以上を節約するために
ツェッペリン

先行ゼロがスリープコマンドでは省略することができ、すなわち睡眠は0.1うまく動作するはずです
ツェッペリン

あなたはまた、明示的にI = 0宣言を取り除くことができます
ツェッペリン

3

*> <>251 250 251バイト(非競合)

" **             "e1C0["   ****         "e1C0["     *****      "e1C0["     **   **    "e1C0["    **      **  "e1C0["****          **"e1C0[06.
52Cl2,[52C52C]R
<v0&:l
$>:@=?v1+{:}&l1-[:&$@
?!v]1->:
~R>
vDDDDDD"H;0["ooooo
>l?u1S06.O{52Cl2,[a}48C]I
ol?!R

注:"H;0["アスキーを持つようになっている27[

ここで試してみてください!(遅延を0msに設定)

私はこれをうまくやったとは信じられません。これは、使用していますIし、D指示、増分または選択されたスタックをデクリメント。これは、おそらく非常に困難ですが、純粋な> <>(睡眠を差し引いた)または有能な*> <>回答でこれを行うことがおそらく可能であることを示しています。

オンラインインタープリターのバージョンは、キャリッジリターンを使用して出力をクリアするだけです。

これは、非競合であるIDC、とRの指示が挑戦よりも若いです。これはおそらく、これらの指示なしで実行できますが、非常に難しい/長くなります。

編集:私は実際にバイトを削除することができましたが、サイズを間違って測定したことにも気づいたので、実際にバイトを得ました。


私は最善を尽くして、ステップを分解し、ここで何が起こっているのかを説明します...

説明

" **             "e2C0["   ****         "e2C0["     *****      "e2C0["     **   **    "e2C0["    **      **  "e2C0["****          **"e2C0[09.
# Copy current stack 4 times
54Cl2,[54C54C]R
# Copy stack
<v0&:l
$>:@=?v1+{:}&l1-[:&$@
?!v]1->:
~R>
# Main loop
vDDDDDD"H;0["ooooo
>l?u1S09.O{54Cl2,[a}4cC]I
# Output stack
ol?!R

目次

Line 1 - Initialization
e2C    - Call "copy current stack 4 times"
54C    - Call "copy stack"
09.    - Jump to "main loop"
4cC    - Call "output stack" (not explained, is very simple)

初期化

ここで、波を構成する6本の線を作成します。正しい長さにするには、各文字列を5回繰り返す必要があります。

波の各行に1つずつ、次の6つから始めます。

 " **             "       push " **             " to the stack
                   e2C    call "copy current stack 4 times"
                      0[  create a new stack

そして、初期化後にメインループに入ります09.

現在のスタックを4回コピーする

これは、現在のスタックを取得し、それを4回コピーする単純な関数です。したがって、「a」は「aaaaa」になります。

54C              call "copy stack"
   l2,[          copy half the current stack to a new stack
       54C54C    call "copy stack" twice
             ]   close the current stack, moving values to the one below
              R  return from the function

スタックをコピー

これにより、現在のスタックがコピーされ、現在のスタックにコピーが追加されます。

セットアップ

<最初の行をスキップして最初の行を反転し、IPの方向が変更l:&0vされた後に実行される順序になり<ます。

l      push the stack length to the stack
 :&    copy the length to the register
   0   push 0 to the stack
    v  move the IP downwards, entering the loop

これ以降、長さはnおよびとして参照さ0iます。

ループ

>                        move the IP to the right
 :                       copy i
  @=?v                   pop i from the stack, if n == i, proceed to cleanup
      1+                 add 1 to i
        {:}              copy the first value of the stack to the end of the stack
           &             place n on the stack
            l1-[         open a new stack moving all values but index 0 to the new one
                :&       copy n and place it on the register
                  $@     swap i with the value on its right
                     $   swap i with n

掃除

>                        move the IP to the right
 :?!v                    if i == 0 then ...
  ~R>                      remove i from the stack and return
     ]                   close the stack, appending all values to the stack below
      1-                 subtract 1 from i

メインループ

ここで、コードは永久に実行され、100ミリ秒のスリープの間で絶えず波を再描画します。

セットアップ

DDDDDD                 select the 6th stack down
      "H;0[x"ooooo     move the cursor to the top-left of the term (x == ascii 27)
                  v    move the IP downwards, entering the loop 

ループ

>                          move the IP to the right
 l?u     O                 if the stack is empty ...
    1S                       sleep for 100ms
      09.                    jump to main loop initialisation
          {                shift the stack left
           54Cl2,[         copy the current stack to a new stack
                  a        append a newline to the stack
                   }       shift the stack to the right
                    4cC    call "output stack"
                       ]   close the stack
                        I  select one stack higher

2

PHP、128バイト

for($a=[3,60,496,1584,6168,57351];;usleep(1e5))foreach($a as&$x)for($x=$x/2|$x%2<<15,$i=80;$i--;)echo" *"[$x>>$i%16&1],"\n"[$i];

複数の行をアニメーション化することはできませんが、スクロールします。反復間の空行の配列に
追加,0します。で実行し-rます。


2

Mathematica、213バイト

i=0;RunScheduledTask[i++,0.1];Dynamic[RotateRight[#,i]&/@Characters/@(StringRepeat[#,5]&)/@{"            **  ","        ****    ","     *****      ","   **   **      "," **      **     ","*          *****"}//Grid]

各行の文字列のリストから始める以外に、Mathematicaで波形パターンをゴルフする方法はありません。私は初期化iして0、タスクを1 0.1秒ごとに増分するようにスケジュールします。私はDynamic味方、次の結果を表示します:

  1. StringRepeat 各行を5回。
  2. 各行をのリストに変換しCharactersます。
  3. RotateRightによる各文字のリストi
  4. 結果の文字の配列をとして表示しGridます。

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


キャプチャの作成とgifファイルの作成に使用したソフトウェアは何ですか?
rnso

ScreenToGifを使用しました。
ngenisis

2

C(unix)、231191バイト

これは、UNIX環境でのみ機能します。また、sleepは整数のみを受け入れるという事実をご容赦ください...実際にはフレーム間で1秒遅延します。

ゴルフされていないバージョン:

#include <stdio.h>
int main() {
    int x=0,l,i,a[6]={32799,24672,6336,1984,240,12};
    while(l=6,++x) {
        printf("\033[2J");
        while(i=128,l--) {
            while(i--) putchar(a[l]&1<<(i+x)%16 ? 42 :32);
            puts("");
        }
        sleep(1);
    }
}

ゴルフバージョン:

#include <stdio.h>
int main(){int x=0,l,i,a[6]={32799,24672,6336,1984,240,12};while(l=6,++x){printf("\033[2J");while(i=128,l--){while(i--)putchar(a[l]&1<<(i+x)%16?42:32);puts("");}sleep(1);}}

1
これが端末のCです。
ロバートフレイザー

2

Javascript(ES6)、152 147 145バイト

x=0,c=console;setInterval(a=>{for(c.clear();f="",i=128,++x,a--;c.log(f))for(;i--;)f+=" *"[[32799,24672,6336,1984,240,12][a]>>(i+x)%16&1]},100,6);

で2バイトsetInterval(a=>{...},100,6)、さらにで4 バイト節約できますf+=" *"[[...][a]&1<<(i+x)%16]
ETHproductions 16

提案をありがとう!しかし、2番目の提案を機能させることができると確信していますか?配列インデックス0-1を取得するには、その値をブール値に強制する必要があります。ウェーブASCIIをさらにビットマップ化して単一の16進数値0x801F606018C007C000F0000Cにビットマップ化することを考えていましたが、Javascriptはどちらの方向にも最大31ビットしかビット単位でシフトできません!あなたは毎日何かを学びます!
ajxs 16

2

Perl 6の、140の 138 137 123 120バイト

for ^Inf ->\i{print "\e[H";for 12,240,1984,6336,24672,32799 ->\j{say [~] map {j+>((i-$_)%16)%2??'*'!!' '},^80};sleep .1}

古いソリューション:

for ^Inf ->\i {print "\e[H";for 12,240,1984,6336,24672,32799 ->\j {say [~] map {j+>((i-$_)%16)%2??'*'!!' '},^80};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf ->\i {print "\e[H";for @a ->\j {for ^80 {print j+>((i-$_)%16)%2??'*'!!' '};say ""};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf {print "\e[H";for @a ->\j {for ^80 ->\k {print j+>(($_- k)%16)%2??'*'!!' '};say ""};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf {print "\e[H";for @a ->\j {for ^80 ->\k {print j+>(($_+15*k)%16)%2??'*'!!' '};say ""};sleep .1;}

1

Python 3、240 239 230バイト

@redstarcoderのおかげで-1バイト

@PascalvKootenのおかげで-9バイト

import time
def p():print("\x1b[0;H")
i=0;p();s=[' '*13+'**',' '*9+'****  ','      *****    ','    **   **    ','  **      **   ','**          ***']
while True:
 for x in s:x*=5;c=i%80;print(x[-c:]+x[:-c])
 i+=1;p();time.sleep(.1)

print("\x1b[0;H")-1バイトでも動作します。
redstarcoder

あなたは置き換えることができ' **'' '*13+'**'、あなたは、しばらくそれが4つの文字であるためには何の必要性を1つの文字インデントを持つことはできません。
PascalVKooten 16

@PascalvKootenありがとう。インデントは、貼り付け中にタブ文字からスペースに変換されました。気をつけてください。
dfernan 16

1

ラケット295バイト

(let*((g string-append)(h substring)(d displayln)(j(λ(l)(map(λ(x)(g(h x 1)(h x 0 1)))l))))(let p((l(map(λ(x)(apply g(for/list((i 5))x)))'("            **  ""         ****   ""      *****     ""    **   **     ""  **      **    ""*          *****"))))(for((i l))(d i))(d"")(sleep .1)(p(j l))))

ゴルフをしていない:

(define(f)
 (define (lf l)
    (map (λ (x) (string-append (substring x 1) (substring x 0 1)))
         l))
  (let loop ((l (map (λ (x) (apply string-append (for/list ((i 5)) x)) )
                     (list 
                      "            **  "
                      "         ****   "
                      "      *****     "
                      "    **   **     "
                      "  **      **    "
                      "*          *****"))))
    (for ((i l))
      (displayln i))
    (displayln "")
    (sleep 0.1)
    (loop (lf l))))

テスト:

(f)

出力:

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

(このgifファイルの表示は、実際の出力よりも遅くなります)。


1

Python 2、207 202バイト

通常私はC#開発者なので、これはまだ完全にゴルフされていないかもしれません...

import time;i=0
while 5:
    print"\033[;H"
    for l in[" "*12+"**  "," "*8+"*"*4+" "*4," "*5+"*"*5+" "*6,"   **   **"+" "*6," **     "*2,"*"+" "*10+"*"*5]:print(l[16-i:]+l*5)[:80]
    time.sleep(.1);i=(i+1)%16

1

C#、327バイト

多かれ少なかれ、Pythonでの私のソリューションの移植版です...

_=>{Func<string,int,string>t=(s,j)=>(s.Substring(16-j)+string.Concat(Enumerable.Repeat(s,5))).Substring(0,80);for(var i=0;;i=++i%16){Console.Clear();foreach(var q in "            **  ,        ****    ,     *****      ,   **   **      , **      **     ,*          *****".Split(','))Console.WriteLine(t(q,i));Thread.Sleep(100);}}

1

Perl、110バイト

-E追加費用なしで必要です。これには印刷できない文字が含まれています。

$_=unpack"B*","x?`00?";s!.{16}!$&x5 .$/!ge;y/01/ */;{say"\ec$_";select!s/(.+)(.)$/$2$1/mg,$a,$a,.1;redo}"

以下のリバーシブルhexdumpを使用して上記のデータを作成します。xxd -d > sea.plLinuxまたは互換端末で実行し、以下を貼り付けてCtrl+ を押してdから、実行しperl -E "$(cat sea.pl)"ます。

0000000: 245f 3d75 6e70 6163 6b22 422a 222c 2200  $_=unpack"B*",".
0000010: 0600 7803 e00c 6030 30c0 0f22 3b73 212e  ..x...`00..";s!.
0000020: 7b31 367d 2124 2678 3520 2e24 2f21 6765  {16}!$&x5 .$/!ge
0000030: 3b79 2f30 312f 202a 2f3b 7b73 6179 225c  ;y/01/ */;{say"\
0000040: 6563 245f 223b 7365 6c65 6374 2173 2f28  ec$_";select!s/(
0000050: 2e2b 2928 2e29 242f 2432 2431 2f6d 672c  .+)(.)$/$2$1/mg,
0000060: 2461 2c24 612c 2e31 3b72 6564 6f7d       $a,$a,.1;redo}

使用法

簡単にコピー/貼り付けするには、以下を使用してください。

perl -E '$_=unpack"B*","\x00\x06\x00\x78\x03\xe0\x0c\x60\x30\x30\xc0\x0f";s!.{16}!$&x5 .$/!ge;y/01/ */;{say"\ec$_";select!s/(.+)(.)$/$2$1/mg,$a,$a,.1;redo}'

説明

され始め、で文字列として波を格納することをかなり簡単溶液unpackバイナリにEDは、各セクションがquintuplicatedされ、0sは空間とに変換される1のは、に変換され*、S。これで文字列全体ができたので、文字列全体redoを出力するループに入り、.1秒待機し、文字列の各行で、最後の文字を文字列の先頭に移動します。


1

Mathematica 171バイト

ウェーブ自体はデータなので、コード全体にウェーブ全体の圧縮バージョンを格納しています。\fð߀ᣀ恠耟バイナリ表現を使用しているため、単一のウェーブをはるかにコンパクトに保存できますが、圧縮解除の文字数のオーバーヘッドが大きすぎます*。

コードは次のとおりです。

w=Uncompress@"1:eJxTTMoPSmNjYGAoZgESPpnFJcEBQIYCEtDSUlCglI9iqJYWqhJy+QhDtdCUUMCHGQrmIymiiA8xFMajEg02FMkXWmi+IosPAJNuSHg=";
Dynamic[Pause[.1];Column[w=StringRotateRight/@w]]   

以下は、圧縮データのWaveデータを作成するために使用したコードです。

s={"            **  ","        ****    ","     *****      ","   **   **      "," **      **     ","*          *****"};
s//TableForm
StringRepeat[#,5]&/@s
Compress[%]

このウェーブのような圧縮された繰り返しバイナリデータを格納するために使用したいコードを次に示します。

StringJoin /@ (PadLeft[(IntegerDigits[#1, 2] & ) /@ ToCharacterCode["\fð߀ᣀ恠耟"]] /. {0 -> " ", 1 -> "*"})

ご覧のとおり、圧縮データを文字列に戻すためのオーバーヘッドは、この特定の問題に対して高すぎますが、7つのUTF文字と15バイトでこの方法で単一のウェーブを保存できます。

これは、単一のウェーブを保存するためのUTF文字シーケンスを決定するコードです(上記のとおり)。

StringReplace[#,{" "->"0","*"->"1"}]&/@s
ToExpression/@%
IntegerDigits/@%
FromDigits[#,2]&/@%
FromCharacterCode/@%
StringJoin@%

1

ルビー269 217 189 185のバイト

@manatworkのおかげで-28バイト

@ropataのおかげで-5バイト

普通

p=0
loop do
  system 'clear'
  [' '*12+'**  ', ' '*8+'****    ','     *****      ','   **   **      ',' **      **     ','*          *****'].each {|i| puts ((i*5)[16-p..-1]+i)[0..79]}
  p=-~p%16
  sleep 0.1
end

ゴルフ

p=0
b=' '
loop{system'clear'
[b*12+'**  ',b*8+'****    ',b*5+'*****'+b*6,'   **   **'+b*6,' **      **     ',"*#{b*10}*****"].map{|i|puts ((i*5)[16-p..-1]+i)[0,79]}
p=-~p%16
sleep 0.1}

コードは正常に機能しますが、サイトルールによると、まだ有効なソリューションではないことに注意してください。「課題に対するすべてのソリューションは、次のことを行う必要があります。たとえば、コードゴルフコンテストへのエントリーは、ゴルフをする必要があります(…)」– ヘルプセンターRubyでのゴルフのヒントを参照してください。
マナトワーク16

とにかく、簡単なリスト:インデントを削除します。do … end→ 前後{ … }の改行を削除します。とそのパラメータの間のスペースを削除します。後の配列リテラルの最後の要素を削除します。→ そして、コードブロックとコードブロックの間のスペースを削除します。の前のスペースを削除します。→ (これは、結果が81文字の文字列であるため、バグでもあります); → 。{}system,.each.mapputs0..800,80p=p+1==16?0: p+1p=-~p%16
マナトワーク16

うん、マナトワークの愚かな説明が再び襲い掛かる。do … end→を変更しても{ … }loopキーワードが必要です。これは私が得る最短です:pastebin.com/cg3gxnm4
manatwork

b=' '上部に(5つの空白スペース)を設定し、出力式を' '*12+'** ', ' '*8+'**** ',b+'***** '+b,' ** ** '+b,' ** **'+b,'*'+b+b+'*****' ...にます(ただし、このコメントではSEは繰り返しスペースを適切に表示しません!)
roblogic

0

HTML + JS + jQuery、10 + 233 = 243バイト

b="            **  q        ****    q     *****      q   **   **      q **      **     q*          *****".split`q`.map(x=>x.repeat(5).split``)
setInterval(a=>$("#a").text(b.map(f=>f.join``).join`\n`)+b.map(e=>e.unshift(e.pop())),100)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<!-- start -->
<pre id=a>

JavaScriptは各行を1だけシフトし、100ミリ秒ごとにテキストを変更します。

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