Helfen Sie mir mit meiner Halloween-Dekoration

13

Das Halloween steht vor der Tür und ich habe mein Haus noch nicht dekoriert, also brauche ich deine Hilfe, um diese Aufgabe zu erledigen

Eingabe
Die Eingabe besteht aus einer Liste mit vier Ziffern, wobei jede Ziffer einen Teil der Dekoration darstellt:

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

Augen:
0 - °
1 - ¯
2 - -
3 - ^
4 -'

Mund / Nase
0 - v
1 - w
2 - o
3 - _
4 --

Bodendekoration
0 - nichts
1 - Skelett
2 - Kürbis

Obere Dekoration
0 - nichts
1 - fliegende Fledermaus
2 - ruhende Fledermaus
3 - Spinne

Ausgabe

Skelett:
(EME)
​ _|_ ​
/[|]\
​ | ​ ​
​ / \ ​

Kürbis
​ , ​
(EME)

Fliegende Fledermaus
​ ​
​ ^"^ ​

Ruhende Fledermaus
​ ​ () ​
​ ​ ´` ​

Spinne
​ | ​
​ .|. ​
​ :": ​

  • Jede Dekoration hat eine Breite von 5 Zeichen
  • Obere Dekorationen beginnen von oben
  • Niedrigere Dekorationen beginnen von unten
  • Befindet sich die Spinne über dem Kürbis oder gibt es keine Bodendekoration, beträgt die Weblänge 3, und liegt sie über dem Skelett, beträgt die Weblänge 1
  • Bei der unteren Dekoration sind 0die ersten 2 Ziffern irrelevant
  • Zwischen jeder Dekoration befindet sich eine leere Spalte

Beispiel
Eingabe
3123 ??02 1021 0310
Ausgabe

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

Nachgestellte Leerzeichen am Ende jeder Zeile sind optional.
Nachgestellte Zeilenumbrüche am Ende der gesamten Ausgabe sind zulässig

Gewinnkriterien
Dies ist also gewinnt die kürzeste Antwort

Stange
quelle
Ist die Eingabe immer gültig, also nein 9999?
Karl Napf
@ KarlNapf Ja, die Eingabe ist immer gültig
Rod

Antworten:

4

JavaScript (ES6), 319 315 Byte

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"]));

Arnauld
quelle
5

Java, 829 , 798

Ja. Deutlich verbessert dank Kevin Cruijssen und 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);}};

die ungolfed version

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

Lieblingsdekoration (die in meiner Konsole anscheinend böser aussieht): Terminatorskelett

(-w-) 
 _|_  
/[|]\ 
  |   
 / \
dpa97
quelle
Sie können einige Bytes sparen, indem Sie ein Lambda anstelle einer vollständigen Methode definieren
corvus_192 13.10.16
1
Dieses anfängliche "Ja" brachte mich zum Lachen, ich weiß nicht warum.
Magic Octopus Urn
+1! Einige Dinge, die Sie Golf spielen können: char[][]c=new char[8][e.length*6];char t,u,h='|';-> char c[][]=new char[8][e.length*6],t,u,h='|';; '-'kann sein 45; '^'kann 94 sein; Das Leerzeichen kann hier entfernt werden if(f>48) {:; Ich bin mir sicher, dass viel mehr Golf gespielt werden kann, aber es ist ein bisschen zu viel, um sich mit komplexerem Golfspiel zu befassen. :)
Kevin Cruijssen
Kevin und Corvus: Danke, ich werde es später noch einmal versuchen, wenn ich Zeit habe. Ich bin sicher, dass dies unter 800 fallen gelassen werden kann, besonders mit einem Lambda.
dpa97
2

Ruby 2.3.1, 777 752 Bytes

Edit_0: Ich habe die Verwendung von golffähigen Variablen und andere Dinge total verpasst.

@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

Nimmt N Variablen von Dekorationen auf. Es gibt sicherlich noch mehr Möglichkeiten zum Golfen. Ich kenne mich mit vielen Rubys Tricks nicht so gut aus, aber hier ist ein Schuss drauf! Ich bin auch froh, es lösen zu können.

Nicht golfen

@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

Folgende:

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

Gibt Folgendes aus:

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

Python 2, 331 Bytes

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

Übernimmt die Eingabe als Liste von Zeichenfolgen

-

Beispiel

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

Ausgabe:

  ()          |     ()                     .|. 
  ´`   ^"^    |     ´`               ^"^   :": 
(¯o¯)        .|.              (¯v¯)       (-w-)
 _|_         :":               _|_         _|_ 
/[|]\                         /[|]\       /[|]\
  |     ,     ,           ,     |           |  
 / \  ('_') (°w°)       (°v°)  / \         / \ 
TFeld
quelle