버즈 비 버클리 로봇 하키 포키


25

버즈 비 버클리 로봇 하키 포키

태스크

Busby Berkeley 수 스타일로 Hokey Pokey (또는 원하는 경우 Cokey)의 가사에 맞춰 춤을 추는 로봇 라인을 묘사하는 ASCII 아트 애니메이션을 제작하는 프로그램 또는 기능을 작성하십시오!

출력 예

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

입력

세 가지 인수를 허용합니다 (유효하다고 가정).

N = 라인의 로봇 수 (최소 = 6)

B = 1 "비트"지속 시간 (밀리 초) (최소 = 10)

D = 연속 로봇 간 ms 지연 (최소 = 0)

(위 출력 예에서 : N = 8, B = 380, C = 75)

명세서

  1. 무대 위에 N 개의 로봇이 연속으로 표시됩니다.

  2. "절"의 한 줄의 텍스트가 무대 아래에 한 번에 표시됩니다 (1 문자 이내로 중앙에 따옴표로 묶음).

  3. 로봇은 구절이 5 번 반복 될 때까지 표시된대로 각 선에 대해 동작을 수행합니다.

  4. 조치는 ASCII 문자 세트를 사용하여 로봇을 묘사하고 다음 조치를 수행하기 전에 지정된 기간 동안 대기하여 수행됩니다. 동작 지속 시간은 "비트"로 측정됩니다. 1 비트의 지속 시간은 밀리 초 ( B) 입니다.

  5. 첫 번째 로봇은 라인의 텍스트가 표시 될 때 각 라인의 각 라인에 대한 작업을 즉시 시작합니다.

  6. 이후의 각 로봇 은 로봇이 오른쪽 (왼쪽!)으로 동작을 시작한 후 특정 시간 ( D ) 까지 동작 시작을 지연시킵니다 .

  7. 로봇의 묘사는 로봇의 "안테나"를 나타내는 ASCII 문자에 따라 달라지며, 그 중 5 가지 유형이 있으며 프로그램이 실행될 때마다 무작위로 배포됩니다.

  8. 각 유형의 안테나는 최소한 하나의 로봇에서 사용해야하지만 다른 유형의 로봇 3 개 미만으로 분리 된 로봇에는 동일한 유형이 나타나지 않아야합니다. 두 종류의 안테나의 양은 1 이하로 다를 수 있습니다 (예 : 1xType_4 및 3xType_5는 3-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 패턴

레이블이 지정된 각 조치는 5 행의 8 ASCII 기호로 표시됩니다.
각 동작의 표현은 다음과 같습니다.

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

산출

장면의 내용이 어떤 식 으로든 변경 될 때마다 전체 장면을 즉시 한 번 이상 렌더링해야합니다. (즉, 로봇 동작 사이의 지연이> 0이라고 가정하면 출력은 동작 당 N 회 이상 렌더링 될 수 있습니다 .)

이상적으로는 애니메이션의 경우 각 업데이트가 렌더링되기 전에 콘솔 또는 동등한 출력 영역이 지워집니다. 콘솔을 지울 수없는 언어를 제공하기 위해 위에서 설명한 것과 동일한 요구 사항에 따라 출력을 연속 스트림으로 렌더링 할 수도 있습니다.

채점

우승자는 각 언어에서 가장 짧은 프로그램 일뿐만 아니라 전체적으로 가장 짧은 프로그램입니다.

예외 1 각 렌더를 지우는 것이 필요하지는 않지만 각 렌더를 지우는 것이 바람직하기 때문에이 고급 목적으로 독점적으로 사용 된 바이트는 총 바이트 수에 포함되지 않습니다. 여기에는 콘솔을 지우는 명령과 콘솔 내용을 보이지 않게하는 빈 줄로 출력을 채 웁니다.

예외 2 최소 요구 사항 이상으로 출력을 스타일링하기 위해 독점적으로 사용되는 CSS 또는 사실상 유사한 수단은 총 바이트 수에 포함되지 않습니다. 예 *{color:blue;text-align:center;}에만 32-10 =로 계산 22 바이트 이후 color:blue;를 중심으로 텍스트가 지정되는 반면, 어떤 사양을 만족시키기 위해 제공하지 않습니다.

메타

제 (내 나이를 보여주는)에서 영감을 TRS-80 댄스 악마 , 안드로이드 님 , 그리고 물론 버스비 버클리 (더, 나는 아니에요없는 이전).


대단하다 ... 내가 이미 피곤해지기 전에 마지막으로해야 할 일은 내주의를 끌기위한 도전이다. 상단의 태그가 필요합니까?
Matt

@Matt, 모든 도전이 엄격하게 "필수"인 것은 아니지만 중복 태그를 제거했습니다. ;-)
Bumpy

입력 매개 변수 'D'의 최대 제한을 제거했습니다. 이었다 , 확실히 선을 각 로봇이 적어도 최초의 로봇이 여전히 (너무 많은 혼란을 피하기 위해)를 수행하는 동안 작업을 시작했다 만들기 위해 "D <B / N"하지만 오류로, 내 자신의 예는 그 규칙을 위반 어쨌든 괜찮아 보입니다. 최대 지연 제한을 제거했습니다. 그 늦은 변화에 대한 사과.
Bumpy

CSS 등을 채점하는 방법에 대한 섹션을 업데이트했습니다.
Bumpy

3
그것은 내가 본 것 중 가장 사랑스러운 것입니다.
Wossname 2016

답변:


13

신사 숙녀 여러분 환영합니다

풀 프론트 엔드 스택 댄스 그룹, 1,320 1,378 1,425 1,495 바이트

JavaScript : 1,195 바이트 | CSS : 103 바이트 | HTML : 22 바이트


이것은 귀여운 도전입니다. 또한 특별한 경우가 많이 있습니다. 오 소년, 많은 특별한 경우. 그리고 그 안테나들…

그것은 영원히 실행하고 모든 작업 (후 다시 시작됩니다 left foot, right 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 바이트절약했습니다 .

브라보!!! Full Frontend-Stack Dance Group의 인기입니다! 특별한 경우에 대한 사과; 나는 특히 좌절하기 위해 안테나 조합을 선택했지만 나머지 심볼은 모두 애니메이션을 지원했습니다. 이제 나는 그런 훌륭한 공연을 비난하는 기분이 들었지만, 밑줄 / 안테나는 회전 할 때 약간 어긋나 있다고 생각합니다. 도전에 응해 주셔서 감사합니다!
Bumpy

@Bumpy 감사합니다. 네 말이 맞아, 나는 마법의 숫자를 섞었다. 안테나는 이제 완벽하게 정렬되었습니다. 또한 모든 수치에 대해 동일한 선 높이를 얻을 수있었습니다. 정말 재미있는 도전입니다.
insertusername 여기

1
2시 방향에 춤추는 로봇을 가지고 다니고 있습니까? 멋져요!
Bumpy

1
||&&|&?
TheLethalCoder

1
@ TheLethalCoder 절대적으로. 귀하의 제안은 이미 소스에 있으며 수정 사항에 반영됩니다. 고마워
insertusername 여기

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

전체 6 바이트 절약으로 대체 string.Format(i,j)되었습니다 i.Replace("?",j).

편집 2

의견의 제안을 수정하십시오.


예이! 온라인 어딘가에서 쉽게 실행할 수있는 방법이 있습니까?
Bumpy

@Bumpy, 답변에 링크를 추가했습니다!
Hand-E-Food

1
나는 1300 아래로 야해 익명 함수와 약간의 골프를 컴파일하여 @insertusernamehere
TheLethalCoder

1
@insertusername 여기 끝났습니다! 네 차례 야! :-D
Hand-E-Food

1
@ TheLethalCoder, 감사합니다! 나는 c작은 저축을 제거했다 . 보다 나은 방법을 잊었다는 것을 알았습니다 new string(c,n). 그러나, 지금은 별명으니 S=String, new S(c,n)여전히 짧다.
Hand-E-Food

0

자바 스크립트, 948 바이트

아마도 자신의 질문에 대답하기에는 형편이 좋지 않지만 어쨌든 ...

텍스트를 압축하는 모든 종류의 방법을 시도했지만 대부분 키 + 알고리즘이 포함 된 원본보다 길었습니다. 나는 그것을 압축하는 가장 최적의 방법이 여전히 있다고 확신하지만 어딘가에 선을 그려야합니다.

흥미롭게도, 검색을 통해 나중에 수정하고 게시 할 수있는 몇 가지 다른 문제에 대한 아이디어가 하나 또는 두 개 생성되었습니다.

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

( NB : 1-31 범위의 일부 문자가 여기에 게시 될 때 약간 이상한 표현을 포함합니다)

CodePen 에서 전체 환각 댄스 사이클을 시청하십시오 !

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.