내 할로윈 장식 도와주세요


13

할로윈이 다가 왔고 아직 집을 꾸미지 않았으므로이 일을하려면 여러분의 도움이 필요합니다

입력
입력은 4 자리 숫자 목록이며 각 숫자는 장식의 일부를 나타냅니다.

EMBU
||||
|||+-upper decoration
||+-bottom decoration
|+-mouth/nose
+-eyes

눈 :
0 - °
(1) - ¯
2 - -
3 - ^
4 -'

입 / 코
0 - v
1 - w
2 - o
3 - _
4 --

바닥 장식
0-없음
1-해골
2-호박

위 장식
0-아무것도
1-비행 박쥐
2-휴식 박쥐
3-거미

산출

해골:
(EME)
​ _|_ ​
/[|]\
​ | ​ ​
​ / \ ​

호박
​ , ​
(EME)

비행 박쥐
​ ​
​ ^"^ ​

휴식 박쥐
​ ​ () ​
​ ​ ´` ​

거미
​ | ​
​ .|. ​
​ :": ​

  • 각 장식의 너비는 5 자입니다.
  • 상단 장식은 상단에서 시작
  • 낮은 장식은 바닥에서 시작
  • 거미가 호박 위에 있거나 밑면 장식이 없으면 웹 길이는 3이되고 골격을 초과하면 웹 길이는 1이됩니다.
  • 하단 장식이 0처음 두 자리와 관련이없는 경우
  • 각 장식 사이에 빈 열이 있습니다


입력
3123 ??02 1021 0310
출력

   |     ()             ​
​   |     ´`   ^"^       ​
​  .|.              (°_°)
​  :":               _|_ ​
​                   /[|]\
​   ,           ,     |  ​
​ (^w^)       (¯v¯)  / \ ​

각 줄 끝의 후행 공백은 선택 사항
입니다. 전체 출력의 끝에서 후행 줄 바꿈이 허용됩니다.

승리 기준
이것은 이므로 가장 짧은 답변이 승리합니다.


입력이 항상 유효 9999합니까?
Karl Napf

@KarlNapf 예, 입력은 항상 유효합니다
Rod

답변:


4

자바 스크립트 (ES6), (319) 315 바이트

let f =

s=>[0,1].map(i=>s.map(([A,B,C,D],x)=>+(z=i?D:C)&&[...'01/21/5015/41211/91/65'.split`/`[z-(i?C+D-13?1:-2:-2)]].map((n,y)=>a[(i?y:6-y)*4+x]=' '+('      ^"^   ()   ´`  / \\   |   .|. /[|]\\ _|_ ('+(e='°¯-^'[A])+'vwo_-'[B]+e+')  ,   :": ').substr(p+=n*5,5),p=0)),a=Array(28).fill`      `)&&a.join``.match(/.{24}/g).join`
`

console.log(f(["3123","0002","1021","0310"]));


5

자바, 829 , 798

네. Kevin Cruijssen과 corvus_192 덕분에 실질적으로 개선되었습니다.

s->{String[]e=s.split(" ");char c[][]=new char[8][e.length*6],t,u,h='|';int y,x=2,i=0,j;for(String l:e){y=0;char[]p=l.toCharArray(),z=c[y];int a=p[0],b=p[1],f=p[2],d=p[3],k=x-1,m=x+1;t=a<49?'°':a<50?'¯':a<51?45:a<52?'^':39;u=(char)(b<50?b+70:b<51?111:b<52?95:39);if(d>50){z[x]=h;if(f!=49){y=2;c[1][x]=h;c[2][x]=h;}z=c[y];z[k]=46;z[m]=46;z=c[++y];z[k]=58;z[m]=58;z[x]=34;}if(d==50){z[x]=40;z[m]=41;c[++y][x]='´';c[y][m]=96;}if(d==49){z=c[++y];z[k]=94;z[x]=34;z[m]=94;}if(f>49){y=6;c[y][x]=44;}if(f>48){y=f>49?7:3;z=c[y++];z[x]=u;z[k]=t;z[m]=t;z[x-2]=40;z[x+2]=41;}if(f==49){z=c[y++];z[x]=h;z[k]=95;z[m]=95;z=c[y];z[x]=h;z[k]=91;z[m]=93;z[x-2]=47;c[y++][x+2]=92;c[y++][x]=h;c[y][k]=47;c[y][m]=92;}x+=6;}for(;i<8;i++){s="";for(j=0;j<c[0].length;){t=c[i][j++];s+=t<1?' ':t;}System.out.println(s);}};

언 골프 버전

static void makeDecorations(String s){
    String[]e=s.split(" ");
    char c[][]=new char[8][e.length*6],t,u,h='|';
    int x=2,i=0,j,y;
    for(String l:e){
        y=0;
        char[]p=l.toCharArray(), z=c[y];
        int a=p[0],b=p[1],f=p[2],d=p[3],k=x-1,m=x+1;
        t=a<49?'°':a<50?'¯':a<51?45:a<52?'^':39;
        u=(char)(b<50?b+70:b<51?111:b<52?95:39);
        if(d>50){z[x]=h;
            if(f!=49){y=2;
                c[1][x]=h;
                c[2][x]=h;
            }
            z=c[y];
            z[k]=46;
            z[m]=46;
            z=c[++y];
            z[k]=58;
            z[m]=58;
            z[x]=34;
        }
        if(d==50){
            z[x]=40;
            z[m]=41;
            c[++y][x]='´';
            c[y][m]=96;
        }

        if(d==49){
            z=c[++y];
            z[k]=94;
            z[x]=34;
            z[m]=94;}
        if(f>49){
            y=6;
            c[y][x]=44;
        }
        if(f>48){
            y=f>49?7:3;
            z=c[y++];
            z[x]=u;
            z[k]=t;
            z[m]=t;
            z[x-2]=40;
            z[x+2]=41;
        }
        if(f==49){
            z=c[y++];
            z[x]=h;
            z[k]=95;
            z[m]=95;
            z=c[y];
            z[x]=h;
            z[k]=91;
            z[m]=93;
            z[x-2]=47;
            c[y++][x+2]=92;
            c[y++][x]=h;
            c[y][k]=47;
            c[y][m]=92;
        }
        x+=6;
    }
    for(;i<8;i++){
        s="";
        for(j=0;j<c[0].length;){
            t=c[i][j++];s+=t<1?32:t;
        }
        System.out.println(s);
    }
}

좋아하는 장식 (콘솔에서 더 악하게 보입니다) : 터미네이터 골격

(-w-) 
 _|_  
/[|]\ 
  |   
 / \

전체 메소드 대신 람다를 정의하여 바이트를 절약 할 수 있습니다.
corvus_192

1
그 초기 "예"는 나를 웃게 만들었습니다. 왜 그런지 모르겠습니다.
매직 문어 Urn

+1! 골프를 타실 수있는 것들 : char[][]c=new char[8][e.length*6];char t,u,h='|';-> char c[][]=new char[8][e.length*6],t,u,h='|';; '-'될 수 있습니다 45; '^'94 일 수 있습니다. 공백은 여기서 제거 할 수 있습니다. if(f>48) {; 그리고 더 많은 골프를 할 수 있다고 확신하지만 더 복잡한 골프를 치기에는 너무 많은 일입니다. :)
Kevin Cruijssen

Kevin and corvus : 감사합니다. 나중에 시간이있을 때 다시 시도하겠습니다. 나는 이것이 람다와 함께 800 이하로 떨어질 수 있다고 확신합니다.
dpa97

2

루비 2.3.1, 777 752 바이트

Edit_0 : 골프 가능한 변수 사용법과 다른 것들을 완전히 놓쳤습니다.

@o=Array.new;$*.each_with_index do|j,i|a,e,n,b,u,q,r,z,y=0,j[0].to_i,j[1].to_i,j[2].to_i,j[3].to_i,['°','¯','-','^',"'"],['v','w','o','_',"-"],Array.new(7," "),"     ";g,h=[z,["(#{q[e]}#{r[n]}#{q[e]})","​ _|_ ​","/[|]\\","​  | ​ ​","​ / \\ ​"],["     ","​  ,  ","(#{q[e]}#{r[n]}#{q[e]})"]],[z,["​     ​","​ ^\"^ ​"],["​ ​ () ", "​ ​ ´` "],["​ .|. ​","​ :\": ​"]];2.times{h[3].unshift("  |  ​")}unless b==1;if b<1 && u<1;@o.push(z);elsif b<1;u<3 ? (a=5):(a=3);a.times{h[u].push(y)};@o.push(h[u]);elsif u<1;b==1 ? (a=2):(a=4);a.times{g[b].unshift(y)};@o.push(g[b]);elsif u>0;2.times{h[u].push(y)}if u<3&&b>1;@o.push(h[u]+g[b]);end;@o.push(z);end;@o.transpose.each do|v|;v.each do |w|;print w;end;print"\n";end

N 개의 장식 변수를받습니다. 이것으로 할 수있는 더 많은 골프가 있습니다. 나는 많은 루비의 트릭에 익숙하지 않지만 여기에 총점이 있습니다! 나는 또한 그것을 해결할 수있어서 기쁘다.

언 골프

@output = Array.new
$*.each_with_index do |j, i|
  # output decoration combo
  s = 0

  # set up vars for decoration input
  e = j[0].to_i
  n = j[1].to_i
  b = j[2].to_i
  u = j[3].to_i

  # Setup decorations/misc
  eyes = ['°','¯','-','^',"'"]
  nose = ['v','w','o','_',"-"]
  nothing = Array.new(7, " ")
  skeleton = ["(#{eyes[e]}#{nose[n]}#{eyes[e]})", "​ _|_ ​", "/[|]\\", "​  | ​ ​", "​ / \\ ​"]
  pumpkin = ["     ", "​  ,  ", "(#{eyes[e]}#{nose[n]}#{eyes[e]})"]
  fbat = ["​     ​", "​ ^\"^ ​"]
  rbat = ["​ ​ () ", "​ ​ ´` "]
  spider = ["​  |  ​", "​ .|. ​", "​ :\": ​"]
  spider.unshift("  |  ​") unless b == 1
  a = "     "
  bot = [nothing, skeleton, pumpkin]
  top = [nothing, fbat, rbat, spider]

  # if bottom and upper are empty
  if b < 1 && u < 1
    @output.push(nothing)
  # if bottom is empty
  elsif b < 1
    u < 2 ? (s = 3) : (s = 5)
    s.times {top[u].push(a)}
    @output.push(top[u])
  # if upper is empty
  elsif u < 1
    # put in white space before the decorations
    b == 1 ? (s = 2) : (s = 5)
    s.times {bot[b].unshift(a)}
    @output.push(bot[b])
  # if there's an upper decoration
  elsif u > 0
    # put in the top deco
    2.times {top[u].push(a)} if u < 3 && b > 1
    @output.push(top[u] + bot[b])
  end
  # Input the empty column
  @output.push(nothing)
end

# Transpose the array of arrays so that
# instead of outputting each line of a single each decoration
# what's output is each line of each decoration.
# Example:
# [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
# [[1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3], [4, 4, 4, 4, 4], [5, 5, 5, 5, 5]]
@output.transpose.each do |data|
   data.each do |data1|
     print data1
   end
   print "\n"
end

다음과 같은:

ruby deco_g.rb 0000 0001 0002 0003 1110 1111 1112 1113 2220 2221 2222 2223 3310 3312 3321 3323

이것을 출력합니다 :

          ()    |                 ()   .|.                ()    |           ()          |
   ^"^    ´`    |          ^"^    ´`   :":         ^"^    ´`    |           ´`   ^"^    |
               .|.  (¯w¯) (¯w¯) (¯w¯) (¯w¯)                    .|.  (^_^) (^_^)        .|.
               :":   _|_   _|_   _|_   _|_                     :":   _|_   _|_         :":
                    /[|]\ /[|]\ /[|]\ /[|]\                         /[|]\ /[|]\
                      |     |     |     |     ,     ,     ,     ,     |     |     ,     ,
                     / \   / \   / \   / \  (-o-) (-o-) (-o-) (-o-)  / \   / \  (^_^) (^_^)

1

파이썬 2, 331 바이트 ""

B,I,l,s=' '*5,'  |  ',' .|. ',' :": '
r=[]
for x in inputtt:m,n,b,u=(int(y)for y in x);e="°¯-^'"[m];H='('+e+"vwo_-"[n]+e+')';r+=[[[B,B,'  () ',[I,l,I][b]][u],[B,' ^"^ ','  ´` ',[I,s,I][b]][u],[[B,l][u==3],H][b==1],[[B,s][u==3],' _|_ '][b==1]]+[[B]*3,['/[|]\\',I,' / \ ',],[B,'  ,  ',H]][b]]
print'\n'.join(map(' '.join,zip(*r)))

문자열 목록으로 입력을받습니다.

-

입력: ["1212","4321","0123","1102","0020","1010","0101","2113"]

산출:

  ()          |     ()                     .|. 
  ´`   ^"^    |     ´`               ^"^   :": 
(¯o¯)        .|.              (¯v¯)       (-w-)
 _|_         :":               _|_         _|_ 
/[|]\                         /[|]\       /[|]\
  |     ,     ,           ,     |           |  
 / \  ('_') (°w°)       (°v°)  / \         / \ 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.