Buzzby Berkeley Robot Hokey Pokey


25

Buzzby Berkeley Robot Hokey Pokey

Bài tập

Viết chương trình hoặc chức năng để tạo ra một hoạt hình nghệ thuật ASCII mô tả một dòng robot nhảy theo lời bài hát của Hokey Pokey (hoặc Cokey, nếu bạn thích) theo kiểu số Busby Berkeley!

Ví dụ đầu ra

nhập mô tả hình ảnh ở đây

Đầu vào

Chấp nhận ba đối số (được coi là hợp lệ):

N = số lượng robot trong dòng (Min = 6)

B = thời lượng của một "nhịp" tính bằng mili giây (Tối thiểu = 10)

D = độ trễ tính bằng ms giữa các robot liên tiếp (Min = 0)

(Trong ví dụ đầu ra ở trên: N = 8, B = 380, C = 75)

Thông số kỹ thuật

  1. N robot được hiển thị liên tiếp trên một sân khấu.

  2. Một dòng văn bản từ "câu thơ" được hiển thị tại một thời điểm bên dưới sân khấu (tập trung vào trong vòng 1 ký tự và được đặt trong dấu ngoặc kép.)

  3. Các robot thực hiện các hành động cho mỗi dòng khi nó được hiển thị cho đến khi câu hát được lặp lại 5 lần.

  4. Một hành động được thực hiện bằng cách mô tả robot sử dụng một bộ ký tự ASCII và đợi một khoảng thời gian xác định trước khi thực hiện hành động tiếp theo. Thời lượng của một hành động được đo bằng "nhịp đập". Thời hạn 1 nhịp là một số mili giây, B .

  5. Robot đầu tiên bắt đầu thực hiện các hành động cho từng dòng thơ ngay lập tức khi văn bản của dòng được hiển thị.

  6. Mỗi robot tiếp theo sẽ trì hoãn bắt đầu hành động của mình cho đến một thời điểm cụ thể ( D ) sau khi robot ở bên phải (bên trái của bạn!) Bắt đầu hành động.

  7. Các mô tả của robot thay đổi theo các ký tự ASCII đại diện cho "ăng-ten" của robot, trong đó có 5 loại có thể, được phân phối ngẫu nhiên mỗi khi chương trình được chạy.

  8. Mỗi loại ăng-ten phải được sử dụng bởi ít nhất một robot, nhưng cùng loại không được xuất hiện trên bất kỳ robot nào cách nhau ít hơn 3 robot khác. Số lượng của hai loại ăng ten bất kỳ có thể khác nhau không quá 1 (ví dụ: 1xType_4 và 3xType_5 là bất hợp pháp kể từ 3-1> 1)

Câu thơ và hành động

Toàn bộ câu thơ được lặp lại 5 lần, mỗi dòng 1 lần ...

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

Đối với mỗi lần lặp lại (R) của câu thơ, thay thế? và ?? ...

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

Các hành động và mẫu ASCII

Mỗi hành động được dán nhãn được thể hiện bằng 5 dòng 8 ký hiệu ASCII.
Đại diện của mỗi hành động như sau ...

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__/

Trong hàng 1, thay thế "1-4" bằng ký hiệu tương ứng cho từng loại ăng ten ...

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

Đầu ra

Toàn bộ cảnh phải được hiển thị ít nhất một lần ngay lập tức bất cứ khi nào nội dung của cảnh thay đổi theo bất kỳ cách nào. (Tức là giả sử độ trễ giữa các hành động của robot là> 0, đầu ra có thể được hiển thị không dưới N lần cho mỗi hành động.)

Lý tưởng nhất, đối với một hình ảnh động, bàn điều khiển hoặc khu vực đầu ra tương đương sẽ bị xóa trước khi mỗi bản cập nhật được hiển thị. Để cung cấp cho các ngôn ngữ không thể xóa bảng điều khiển, đầu ra cũng có thể được hiển thị trong một luồng liên tục, theo cùng một yêu cầu được mô tả ở trên.

Chấm điểm

Người chiến thắng là chương trình ngắn nhất trong mỗi ngôn ngữ, cũng như tổng thể ngắn nhất.

Ngoại lệ 1 Vì việc xóa bàn điều khiển, mỗi kết xuất sẽ tốt hơn mặc dù không bắt buộc, các byte được sử dụng riêng cho mục đích xa xỉ này không được tính vào tổng số byte. Điều này bao gồm các lệnh để xóa bàn điều khiển và đầu ra đệm với các dòng trống để cuộn nội dung của bàn điều khiển ra khỏi tầm nhìn.

Ngoại lệ 2 CSS hoặc các phương tiện tương tự có hiệu quả được sử dụng riêng cho mục đích tạo kiểu đầu ra ngoài các yêu cầu tối thiểu không được tính vào tổng số byte. Ví dụ, *{color:blue;text-align:center;}chỉ tính 32-10 = 22 bytecolor:blue;không phục vụ bất kỳ đặc điểm kỹ thuật nào, trong khi văn bản trung tâm được chỉ định.

Meta

Lấy cảm hứng từ (hiển thị bằng tuổi tôi) các TRS-80 Dancing Demon , Android Nim , và tất nhiên Busby Berkeley (và không có, tôi không cũ).


Tuyệt vời ... điều cuối cùng tôi cần trước khi tôi mệt mỏi là một thử thách để thu hút sự chú ý của tôi. Các thẻ trên đầu cần thiết?
Matt

@Matt, toàn bộ thử thách không hoàn toàn "cần thiết", nhưng tôi đã xóa các thẻ trùng lặp. ;-)
Bumpy

Tôi đã xóa giới hạn tối đa cho tham số đầu vào 'D'. Đó "D <B / N" để đảm bảo mỗi robot xuống dòng ít nhất đã bắt đầu hành động trong khi robot đầu tiên vẫn thực hiện nó (để tránh quá nhiều hỗn loạn), nhưng do lỗi, ví dụ của riêng tôi đã phá vỡ quy tắc đó, và có vẻ như nó vẫn ổn, vì vậy tôi đã loại bỏ giới hạn độ trễ tối đa. Xin lỗi vì sự thay đổi muộn màng đó.
Bumpy

Tôi đã cập nhật phần chấm điểm CSS và tương tự.
Bumpy

3
Đó là điều đáng yêu nhất tôi từng thấy.
Wossname

Câu trả lời:


13

Thưa quý vị, xin chào mừng

Nhóm nhảy đầy đủ Frontend-Stack, 1.320 1.378 1.425 1.495 byte

JavaScript: 1.195 byte | CSS: 103 byte | HTML: 22 byte


Đây là một thử thách dễ thương. Nó cũng có rất nhiều trường hợp đặc biệt. Oh boy, rất nhiều trường hợp đặc biệt. Và những ăng ten đó

Nó sẽ chạy mãi mãi và khởi động lại sau khi tất cả các hành động ( left foot, right footv.v.) được hoàn thành.

Bạn có thể thử nó trên jsFiddle hoặc bằng cách sử dụng đoạn mã dưới đây:

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>


Đã thử nghiệm trên Chrome và Firefox trên macOS, Windows 10 và Ubuntu


Chỉnh sửa

  • Đã lưu 70 byte bằng cách loại bỏ bộ chứa bổ sung để giữ ăng-ten. Cảm ơn Bumpy . Cũng tìm thấy một số khoảng trắng nữa, loại bỏ bộ nhớ đệm không cần thiết bây giờ createElementvà loại bỏ quyền truy cập dài vào .firstChild.
  • Đã lưu 47 byte - chỉ cần nhận ra rằng tôi thực sự không cần phải gọi getElementById. Điều này cũng làm cho bộ nhớ đệm documentkhông cần thiết.
  • Đã lưu 4 byte bằng cách thay thế ||&&bằng bitwise &|. Cảm ơn TheLethalCoder .
  • Đã lưu 54 byte bằng cách đơn giản hóa nhiều thứ nhỏ và tối ưu hóa CSS.

Bravo !!! Nhóm nhảy Full Frontend-Stack là một hit !! Xin lỗi về số lượng các trường hợp đặc biệt; Tôi đã chọn các kết hợp ăng-ten đặc biệt để làm nản lòng, nhưng phần còn lại của các biểu tượng đều phục vụ cho hoạt hình - tôi đã không lên kế hoạch cho nó một cách khó khăn. Bây giờ, tôi cảm thấy churlish chỉ trích một màn trình diễn tuyệt vời như vậy, nhưng tôi nghĩ rằng phần dưới / ăng-ten hơi bị lệch khi họ quay lại (có thể là 1 ký tự quá xa bên trái, có thể?) Nhưng bất cứ điều gì - thật tuyệt! Cảm ơn đã chấp nhận thử thách của tôi!
Bumpy

@Bumpy Cảm ơn. Bạn nói đúng, tôi đã trộn lẫn một số con số ma thuật. Các ăng-ten bây giờ là hoàn hảo theo thứ tự. Tôi cũng đã quản lý để có được cùng chiều cao cho tất cả các số liệu. Thực sự là một thử thách thú vị.
insertusernamehere

1
Bạn nói đùa với robot nhảy lúc 2 giờ? Thật tuyệt vời, bwahaha!
Bumpy

1
||&&đến |&?
TheLethalCoder

1
@TheLethalCoder Hoàn toàn. Đề xuất của bạn đã có trong nguồn và được phản ánh trong các chỉnh sửa. Cảm ơn rất nhiều.
insertusernamehere

5

C #, 1188 1376 1382 byte sau các ngoại lệ

Nén:

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

Định dạng đẹp hơn một chút và được gói trong một chương trình thực thi:

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
}

Hãy thử trực tuyến!

  1. Truy cập liên kết này: guidespoint.com
  2. Trong tab Thuật ngữ mặc định ở cuối màn hình, nhập:
    mono main.exe 8 400 40

Chỉnh sửa 1

Thay thế string.Format(i,j)bằng việc i.Replace("?",j)lưu 6 byte tổng thể.

Chỉnh sửa 2

Cải tạo hoàn toàn với các đề xuất từ ​​các ý kiến.


Yay! Có một cách dễ dàng để chạy nó trực tuyến ở đâu đó?
Bumpy

@Bumpy, đã thêm một liên kết trong câu trả lời!
Thực phẩm điện tử

1
@insertusernamehere Bằng cách biên dịch thành một chức năng ẩn danh và một số hoạt động đánh gôn nhỏ mà tôi đã đạt được dưới 1300.
TheLethalCoder

1
@insertusernamehere, xong! Lượt của bạn! :-D
Thực phẩm điện tử cầm tay

1
@TheLethalCoder, cảm ơn vì điều đó! Tôi đã thoát khỏi cmột khoản tiết kiệm nhỏ. Tôi biết tôi đã quên một cách tốt hơn new string(c,n). Tuy nhiên, bây giờ tôi đã bí danh S=String, new S(c,n)vẫn còn ngắn hơn.
Thực phẩm điện tử cầm tay

0

JavaScript, 948 byte

Có lẽ hình thức kém để trả lời câu hỏi của riêng bạn, nhưng dù sao ...

Đã thử tất cả các cách để nén văn bản, nhưng hầu hết kết thúc lâu hơn bản gốc với thuật toán key + đi kèm. Tôi chắc chắn vẫn còn một cách tối ưu hơn để nén tất cả, nhưng tôi phải vẽ đường thẳng ở đâu đó.

Thật thú vị, tìm kiếm mang lại một hoặc hai ý tưởng cho một số thách thức khác mà tôi có thể tinh chỉnh và đăng sau.

<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: Chứa một số ký tự trong phạm vi 1-31 có đại diện hơi kỳ lạ khi được đăng ở đây)

Xem toàn bộ chu trình nhảy psychedelic trên CodePen !

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.