バズビーバークレーロボットホーキーポーキー


25

バズビーバークレーロボットホーキーポーキー

仕事

Busby Berkeleyの数字のスタイルでHokey Pokey(またはお好みであればCokey)の歌詞に合わせて踊るロボットのラインを描いたASCIIアートアニメーションを作成するプログラムまたは関数を作成してください!

出力例

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

入力

3つの引数を受け入れます(有効と見なされます)。

N =ライン内のロボットの数(最小= 6)

B =ミリ秒単位の1つの「ビート」の持続時間(最小= 10)

D =連続するロボット間のミリ秒単位の遅延(Min = 0)

(上記の出力例では、N = 8、B = 380、C = 75)

仕様書

  1. N台のロボットがステージ上に連続して表示されます。

  2. 「詩」からの1行のテキストがステージの下に一度に表示されます(中心が1文字以内で、引用符で囲まれています)。

  3. ロボットは、詩が5回繰り返されるまで、示されているとおりに各行のアクションを実行します。

  4. アクションは、ASCII文字のセットを使用してロボットを描写し、次のアクションを実行する前に指定された期間待機することによって実行されます。アクションの継続時間は「ビート」で測定されます。1ビートの持続時間はミリ秒数Bです。

  5. 最初のロボットは、行のテキストが表示されるとすぐに、詩の各行に対してアクションの実行を開始します。

  6. 後続の各ロボットは、右側のロボット(左側)がアクションを開始してから特定の時間(D)までアクションの開始を遅らせます。

  7. ロボットの描写は、ロボットの「アンテナ」を表すASCII文字によって異なります。5つのタイプがあり、プログラムが実行されるたびにランダムに配布されます。

  8. 各タイプのアンテナは少なくとも1つのロボットで使用する必要がありますが、3つ未満のロボットで区切られたロボットには同じタイプを使用しないでください。任意の2種類のアンテナの量は、1を超えて異なることはできません(たとえば、1xType_4および3xType_5は3-1> 1なので違法です)

詩とアクション

詩全体が一度に1行ずつ5回繰り返されます...

Line  Text                            Action/Beats, 
----  -----------------------------   ------------------------------------
1     You put your ? in               ??/4
2     You take your ? out             AA/4
3     You put your ? in               ??/4
4     And you shake it all about      AA/1, ??/1, AA/1, ??/1
5     You do the Hokey Pokey and...   
      ...you turn yourself around     AA/1, H[1-7]/1
6     That's what it's all about!     AA/4, ZZ/4

詩の繰り返し(R)ごとに、?そして?? ...

R   ?=           ??=
--  -----------  ---
1.  right foot   RF 
2.  left foot    LF
3.  right hand   RH
4.  left hand    LH
5.  whole self   WS

アクションとASCIIパターン

各ラベル付きアクションは、8つのASCIIシンボルの5行で表されます。
各アクションの表現は次のとおりです...

1 |   12     12        12    12        12     12      12   
2 |  ['']   ['']      ['']  ['']      ['']   ['']   \[*-] 
3 | └[__]┘ └[__]┘    └[__]┘┌[__]┘    └[__]┐ ┌[__]┐   [__]\ 
4 |   ||     /<        >\    <\        />    /  \     /|
5 |--------------------------------------------------------
  |\__AA__/\__RF__/\__LF__/\__RH__/\__LH__/\__WS__/\__ZZ__/ 

1 |   12     12_     34_      34      _34     _12     12    
2 |  ['']    [" ]    [ _]    [__]    [_ ]    [ "]    ['']
3 | >[__]<   [_<]    [<.]   <[..]>   [.>]    [>_]   <[__]>
4 |   ||      |\      ||      /|      ||      |\      ||
5 |--------------------------------------------------------
  |\__H1__/\__H2__/\__H3__/\__H4__/\__H5__/\__H6__/\__H7__/

行1で、「1-4」を各アンテナタイプの対応するシンボルに置き換えます...

1 | 1234 1234 1234 1234 1234 
  | \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
  | 1    2    3    4    5    <-- ...antenna types 1-5

出力

シーンのコンテンツが何らかの方法で変更されるたびに、シーン全体を少なくとも1回直ちにレンダリングする必要があります。(つまり、ロボットのアクション間の遅延が> 0であると仮定すると、出力はアクションごとにN回以上レンダリングされる場合があります。)

理想的には、アニメーションの場合、各更新がレンダリングされる前にコンソールまたは同等の出力領域がクリアされます。コンソールをクリアできない言語に対応するため、上記と同じ要件に従って、出力を連続ストリームでレンダリングすることもできます。

得点

勝者は、各言語で最も短いプログラムであり、全体で最も短いプログラムです。

例外1必要ではありませんが、各レンダリングをコンソールから消去することが望ましいため、この豪華な目的のために排他的に使用されるバイトは合計バイトにカウントされません。これには、コンソールをクリアするコマンドと、コンソールの内容を表示外にスクロールするために出力に空白行を埋め込むことが含まれます。

例外2 CSS、または最小要件を超えて出力をスタイリングする目的でのみ使用される事実上同様の手段は、合計バイトにカウントされません。たとえば、中心のテキストが指定されているのに、仕様を満たすために役立たないため、*{color:blue;text-align:center;}32-10 = 22バイトのみとしてカウントされcolor:blue;ます。

メタ

TRS-80 Dancing DemonAndroid Nim、そしてもちろんBusby Berkeleyからインスピレーションを得ました(そして、いや、私はそんなに古いわけはありません)。


素晴らしい...疲れる前に最後に必要なことは、注意を引くための挑戦です。上部のタグは必要ですか?
マット

@Matt、チャレンジ全体は厳密に「必要」ではありませんが、重複するタグは削除しました。;-)
バンピー

入力パラメーター「D」の上限を削除しました。だった、確かラインの下の各ロボットは、少なくとも最初のロボットはまだ(あまりにも多くの混乱を避けるために)それを実行している間に行動を開始していたために「D <B / N」が、エラーによって、私自身の例では、そのルールを破りましたとにかく大丈夫に見えるので、最大遅延制限を削除しました。その遅い変更についての謝罪。
でこぼこ

CSSなどのスコアリングに関するセクションを更新しました。
バンピー

3
それは私が今まで見た中で最も愛らしいものです。
Wossname

回答:


13

ご列席の皆様、私たちの素敵な歓迎してください

フルフロントエンドスタックダンスグループ、1,320 1,378 1,425 1,495バイト

JavaScript:1,195バイト | CSS:103バイト | HTML:22バイト


これはかわいい挑戦です。また、多くの特殊なケースがあります。ああ、たくさんの特別なケース。そしてそれらのアンテナ…

それは永遠に実行し、すべてのアクション(後に再起動しますleft footright footなど)が完了しています。

jsFiddleで試すか、以下のコードスニペットを使用して試すことができます。

t=setTimeout
c=l=a=i=0
_=(x,y,z)=>{if(!i)for(;++i<=x;q=~~(Math.random()*10))s.append(document.createElement('pre'))
for(i=l=0,c=a+1;i<33;)(i=>{t($=>{if(4==i){c=0
l=1}if(8==i){c=a+1
l=0}if(12==i|14==i){c=0
l=2}if(13==i|15==i)c=a+1
if(16==i){c=0
l=3}if(16<i&24>i)c=i-10
if(24==i){c=0
l=4}if(28==i)c=6
if(31<i){a=++a%5
_(x,y,z)}for(j=0;j<x;)(j=>{t($=>s.childNodes[j][h]=(-1<[1,3,8,9].indexOf(c)?'  ':2==c||4==c?'    ' :'   ')+(11==c||12==c?'_':'')+['\\/\\/','|┌┐|',')||(','||||','┐/\\┌'][(q+j)%4].substring($=8<c&12>c?2:0,$+2)+(8==c||9==c?'_':'')+'\n'+[`  ['']			   
 └[__]┘ 
   ||`,` ['']  
└[__]┘  
  /<`,`   ['']
  └[__]┘
    >\\`,` ['']
┌[__]┘
  <\\`,`   ['']
  └[__]┐
    />`,`  ['']
 ┌[__]┐
  /  \\`,` \\[*-]
  [__]\\
   <\\`,`  ['']
 >[__]<
   ||`,`  [" ]
  [_<]
   |\\`,`  [ _]
  [<.]
   ||`,`  [__]
 <[..]>
   /|`,`  [_ ]
  [.>]
   ||`,`  [ "]
  [>_]
   |\\`,`  ['']
 <[__]>
   ||`][c]+'\n-------',j*z)})(j++)
p[h='innerText']='"'+["You put your $ in","You take your $ out","And you shake it all about","You do the Hokey Pokey and you turn yourself around","That's what it's all about!"][l].replace('$',['right foot','left foot','right hand','left hand','whole self'][a])+'"'},i*y)})(i++)}

// let's dance (not included in the byte count – as if it would make any difference)
_(8, 400, 50)
*{text-align:center}x pre{display:inline-block;width:55px;text-align:left}pre{line-height:16px;margin:0
<x id=s></x><pre id=p>


macOS、Windows 10、Ubuntu上のChromeとFirefoxでテスト済み


編集

  • アンテナを保持するための余分なコンテナを削除することにより、70バイトを節約しましたBumpyに感謝します。また、いくつかの空白が見つかり、現在不要なキャッシングをcreateElement削除し、への長いアクセスを削除しました.firstChild
  • 47バイトを節約しましたgetElementById。実際にを呼び出す必要がないことに気付きました。これにより、キャッシュもdocument不要になります。
  • とをビット単位とで置き換えて4バイト節約しましたTheLethalCoderに感謝します||&&&|
  • 多くの小さなことを簡素化し、CSSを最適化することにより、54バイトを節約しました

ブラボー!!! フルフロントエンドスタックダンスグループのヒット!!特別なケースの量の謝罪; 欲求不満を解消するためにアンテナの組み合わせを選択しましたが、残りのシンボルはすべてアニメーションに使用されていました。今、私はそのような素晴らしいパフォーマンスを批判することを悲しく感じていますが、アンダースコア/アンテナは向きを変えたときに少し強打されていると思います(おそらく1文字左に遠すぎますか?)しかし、何でもいいです!挑戦してくれてありがとう!
バンピー

@Bumpy Thanks。あなたは正しい、私はいくつかの魔法の数字を混ぜました。アンテナは完全に整然と並んでいます。また、すべての数字で同じ線の高さを得ることができました。本当に楽しいチャレンジです。
ユーザー名をここに挿入します

1
あなたが言う2時にロボットの踊りをいじる?素晴らしい、bwahaha!
バンピー

1
||そして、&&する|&
TheLethalCoder

1
@TheLethalCoder絶対に。あなたの提案はすでにソースにあり、編集に反映されています。どうもありがとう。
ユーザー名をここに挿入します

5

C#、例外後の1188 1376 1382バイト

コンパクト化:

namespace System.Threading{using S=String;void H(int n,int b,int d){Console.CursorVisible=false;int t,u=0,v=5,w,x,y,z;S[]i=",That's what it's all about!,,You do the Hokey Pokey and you turn yourself around,And you shake it all about,,You take? out,You put? in".Split(',');i[0]=i[1];i[2]=i[3];i[5]=i[7];for(b=b<d*n?0:b-d*n;v-->0;)for(w=32;w-->0;Thread.Sleep(b))for(t=u,z=0;z++<n;Thread.Sleep(d)){S s="",r=i[w/4].Replace("?"," your "+(v<1?"whole self":(v%2<1?"right ":"left ")+(v/3<1?"hand":"foot")));u="88880000765432109090999900009999"[w];u=u>56?9+v:u-48;for(y=4;y-->0;s+="\n")for(x=0;x<n;x++)s+=S.Format(@"{0}{0}   |\   {0}   /|   {0}   |\   {0}   /|{4} /  \{4}  />{4}<\{4}{4}>\{4}/<{4} └{1}┘  >{1}<   [_<]{4}[<.]   <[..]>   [.>]{4}[>_]   <{1}>   {1}\  ┌{1}┐   └{1}┐┌{1}┘{4}└{1}┘└{1}┘   {2}  {2}   ["" ]{4}[ _]{4}{1}{4}[_ ]{4}[ ""]   {2}  \[*-]   {2}   {2}{2}{4}{2}{2}  {3}{3}  12_{4} 34_{4}  34{4}  _34{4} _12  {3}{3}{3} {3} 12{4} {3} 12{4}", "   ||   ","[__]"," [''] ","   12   ","    ").Substring(y*14+(x<z?u:t)<<3,8).Replace("12",@"\/|┌)|||┐/".Substring(x%5*2,2)).Replace("34",@"\/┐||(||\┌".Substring(x%5*2,2));Console.Clear();Console.Write(s+new S('-',n*8)+"\n"+new S(' ',n*4-r.Length/2)+r);}}}

わずかに優れた書式設定と実行可能プログラムでのラップ:

namespace System.Threading{
    using S=String;

    //** Not counted towards score: execution wrapper
    class P{
        static void Main(S[]a){
            new P().H(int.Parse(a[0]),int.Parse(a[1]),int.Parse(a[2]));
        }
    //** End not counted towards score

        void H(int n,int b,int d){
            Console.CursorVisible=false;  // Not counted under exception 2
            int t,u=0,v=5,w,x,y,z;
            S[]i=",That's what it's all about!,,You do the Hokey Pokey and you turn yourself around,And you shake it all about,,You take? out,You put? in".Split(',');
            i[0]=i[1];
            i[2]=i[3];
            i[5]=i[7];
            for(b=b<d*n?0:b-d*n;v-->0;)
                for(w=32;w-->0;Thread.Sleep(b))
                    for(t=u,z=0;z++<n;Thread.Sleep(d)){
                        S s="",r=i[w/4].Replace("?"," your "+(v<1?"whole self":(v%2<1?"right ":"left ")+(v/3<1?"hand":"foot")));
                        u="88880000765432109090999900009999"[w];
                        u=u>56?9+v:u-48;
                        for(y=4;y-->0;s+="\n")
                            for(x=0;x<n;x++)
                                s+=S.Format(@"{0}{0}   |\   {0}   /|   {0}   |\   {0}   /|{4} /  \{4}  />{4}<\{4}{4}>\{4}/<{4} └{1}┘  >{1}<   [_<]{4}[<.]   <[..]>   [.>]{4}[>_]   <{1}>   {1}\  ┌{1}┐   └{1}┐┌{1}┘{4}└{1}┘└{1}┘   {2}  {2}   ["" ]{4}[ _]{4}{1}{4}[_ ]{4}[ ""]   {2}  \[*-]   {2}   {2}{2}{4}{2}{2}  {3}{3}  12_{4} 34_{4}  34{4}  _34{4} _12  {3}{3}{3} {3} 12{4} {3} 12{4}", "   ||   ","[__]"," [''] ","   12   ","    ").Substring(y*14+(x<z?u:t)<<3,8).Replace("12",@"\/|┌)|||┐/".Substring(x%5*2,2)).Replace("34",@"\/┐||(||\┌".Substring(x%5*2,2));
                        Console.Clear(); // Not counted under exception 1
                        Console.Write(s+new S('-',n*8)+"\n"+new S(' ',n*4-r.Length/2)+r);
                    }
        }
    } // Not counted towards score: end class
}

オンラインでお試しください!

  1. このリンクをご覧ください:tutorialspoint.com
  2. 画面下部の「デフォルト用語」タブで、次のように入力します。
    mono main.exe 8 400 40

編集1

交換しstring.Format(i,j)i.Replace("?",j)、全体の6つのバイトを保存します。

編集2

コメントからの提案で完全な改訂。


わーい!どこかでオンラインで実行する簡単な方法はありますか?
バンピー

@Bumpy、回答にリンクを追加しました!
手電子食品

1
@insertusernamehere匿名の関数といくつかのマイナーなゴルフにコンパイルすることで、1300未満になりました
。– TheLethalCoder

1
@insertusernamehere、完了!あなたの番!:-D
Hand-E-Food

1
@TheLethalCoder、ありがとうございます!私はc小さな節約のために追い払った。私は自分より良い方法を忘れていたことを知っていたnew string(c,n)。ただし、エイリアスを作成したS=Stringので、new S(c,n)まだ短くなっています。
ハンドEフード

0

JavaScript、948バイト

おそらくあなた自身の質問に答えるには貧弱なフォームですが、とにかく...

テキストを圧縮するためのあらゆる種類の方法を試しましたが、ほとんどはキーとアルゴリズムが含まれているオリジナルよりも長くなりました。すべてを圧縮するための最適な方法はまだあると確信していますが、どこかに線を引く必要があります。

興味深いことに、検索の結果、他のいくつかの課題に対する1つまたは2つのアイデアが得られました。

<pre id=O/>

f=(N,B,D)=>{Q=c=>(K={},k='~',[...c].map(v=>v<k?K[k=v]='':K[k]+=K[v]||v),K[k])
x=``,A=`//,||,)||(,,/`.split(',').sort(new Date)
r=new Array(N).fill(0),t=i=v=0,n=`\n`,T=setTimeout
C=_=>(w=Q(`ouhand t t's ake Y y all abtokey righlefwhole fooself ,${v+1},,1yr ${x[v*2]+x[v*2+1]}puintt,,Ashi,do the HPaturn yrarnd,,7,8,90123,Twi!,,6,`).split(',')[i++])<'A'?(r.map((_,m)=>T((a,b)=>R(r[N-a]=b),m*D,m,w)),i>22?(v++,i=0):0,v<3?T(C,B*(i<7||i>21?4:1)):0):C(t=w),R=_=>{for(o='',m=4;m--;o+=n){for(w=N;w--;)o+=Q(`┌┐└┘\\/||/${A[w%5]}   [__] [''] ||] _ __ _  [*-][" ][ _][_ ][ "] ┐ ┐><[_<] [<.]<[..]>[.>] [>_]<> /<></>/ //`).substr(r[w]*8+(3-m)*112,8)}
O.innerHTML=o+'-'.repeat(N*8)+' '.repeat(((N*8)-t.length)/2)+t}
C()}

注:ここに投稿したときに表現が少し奇妙な1〜31の範囲の文字が含まれています)

フル見るCodePenにサイケデリックなダンス・サイクルを

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