世界末日的21种发型


16

世界末日的21种发型

给定一个介于1到21(或0到20)之间的数字列表,将输出以下面的“缝合在一起”图(请参见缝合信息规则):

     ___           ,,,           ooo           ===           +++           ###          -*~*-     
    (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

     ***           |||           _/7           )))           (((           xxx           @__      
    (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

     ((_           >X<           '*`           ^^^           )|(           \|/           &&&      
    (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

在换行符上列出的每个唯一的面孔(#是面孔的整数ID):

     ___      
    (o o)     
ooO--(_)--Ooo #1

     ,,,      
    (o o)     
ooO--(_)--Ooo #2

     ooo      
    (o o)     
ooO--(_)--Ooo #3

     ===      
    (o o)     
ooO--(_)--Ooo #4

     +++      
    (o o)     
ooO--(_)--Ooo #5

     ###      
    (o o)     
ooO--(_)--Ooo #6

    -*~*-     
    (o o)     
ooO--(_)--Ooo #7

     ***      
    (o o)     
ooO--(_)--Ooo #8

     |||      
    (o o)     
ooO--(_)--Ooo #9

     _/7      
    (o o)     
ooO--(_)--Ooo #10

     )))      
    (o o)     
ooO--(_)--Ooo #11

     (((      
    (o o)     
ooO--(_)--Ooo #12

     xxx      
    (o o)     
ooO--(_)--Ooo #13

     @__      
    (o o)     
ooO--(_)--Ooo #14

     ((_      
    (o o)     
ooO--(_)--Ooo #15

     >X<      
    (o o)     
ooO--(_)--Ooo #16

     '*`      
    (o o)     
ooO--(_)--Ooo #17

     ^^^      
    (o o)     
ooO--(_)--Ooo #18

     )|(      
    (o o)     
ooO--(_)--Ooo #19

     \|/      
    (o o)     
ooO--(_)--Ooo #20

     &&&      
    (o o)     
ooO--(_)--Ooo #21

面如下:

    hhhhh     
    (o o)     
ooO--(_)--OooS

h动态启示录发型在哪里S,潜在的拼接连字符在哪里。


例子

输入: [1,2,3,4,5]

输出:

     ___           ,,,           ooo           ===           +++      
    (o o)         (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

输入: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]

输出:

     ___           ,,,           ooo           ===           +++           ###          -*~*-          ***           |||           _/7           )))           (((           xxx           @__           ((_           >X<           '*`           ^^^           )|(           \|/           &&&      
    (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

输入: ["Fraggle Rock"] / [22]/ [-21041024]/[22,23,24,25,26]

输出: Nobody cares.


输入: [1,1,1,1]

输出:

     ___           ___           ___           ___      
    (o o)         (o o)         (o o)         (o o)     
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-

规则

  • 换行符/空格/连字符的开头和结尾都可以。
  • 在输入中,面孔可能会出现多次。
  • 如果输入中的数字无效,则您可能有未定义的行为。
  • 拼接:
    • 缝合的面将由底行(3rd)上的单个连字符连接起来。
    • 这些面将全部位于一条直线上(与第一个图形不同)。
  • 输入可以是0或1索引,其中20是0的最大值,21是1的最大值。
  • 这是,最低字节数获胜。


7
7号似乎违反了“面孔如下”部分
-boboquack

10
您所有的测试用例都包含尾随的“拼接”连字符,这似乎与规范相矛盾。
毛茸茸的

3
基洛伊在这里。
msh210 '18

2
@MagicOctupusUrn,能否请您解决我在上方提出的连字符的问题?
毛茸茸的

Answers:


9

Japt -R122 117 113 110 109 107 105 104 103 102 100 99字节

1索引,带有索引换行。我遵循了这里的规范,该规范要求每个面孔的最后一行之间有一个连字符,而不是测试用例,而测试用例在每个面孔的最后一行之后有一个连字符。

[Umg"@__((_>X<'*`^^^)|(\\|/"i"&_,o=+#*|)(x"m³ ò3 i7"-*~"ê)iA"_/7")¡"(o o)"á"O--(_)--O"ûoDÃq-]ûD m¸

尝试一下

[                                             :Construct an array of 3 elements
Umg"@.../"i"&...x"m³ ò3 i7"-*~"ê)iA"_/7")     :FIRST ELEMENT (F)
U                                             :  Input array
 m                                            :  Map
  g                                           :    Index into
   "@.../"                                    :      Literal string
          i                                   :      Prepend
           "&...x"                            :        Literal string
                  m                           :        Map
                   ³                          :          Repeat 3 times
                     ò3                       :      Split into chucks of 3
                        i7                    :      Insert at 0-based index 7
                          "-*~"ê              :        "-*~" palindromised
                                )             :      End insert
                                 iA"_/7"      :      Insert "_/7" at index 10
                                        )     :  End map
¡"(o o)"Ã                                     :SECOND ELEMENT (S)
¡                                             :  Map input array
 "(o o)"                                      :    Literal string
        Ã                                     :  End map
¡"O...O"ûoDÃq-                                :THIRD ELEMENT (T)
¡                                             :  Map input array
 "O...O"                                      :    Literal string
        ûo                                    :    Centre pad with "o"
          D                                   :      To length 13
           Ã                                  :  End map
            q-                                :  Join with "-"
]                                             :End array
 ûD                                           :Centre pad each string in F & S to length 13 with spaces, does nothing to T as it will always be at least 13 characters long
    m                                         :Map
     ¸                                        :  Join F & S with spaces. Split T on spaces, creating a singleton array which gets cast back to a string on output
                                              :Implicit output, joined with newlines

1
达到100真是太好了。我们想要的char-mirror方法在这里真的很方便。
奥利弗

此外,作者认为包装&充分利用了天才。特别是因为这使它从1开始。
奥利弗

这是另一回合。我意识到&如果我将球打成1级,我可以将其移动到那里;)仍然觉得这里还有更多高尔夫运动,但是已经很晚了,所以必须等到明天。
毛茸茸的

6

Python 2,209字节

def f(a):s=t=u='\n';i=0;exec"s+=(\"_,o=+#-*|_)(x@(>'^)\\&_,o=+#**|/)(x_(X*^||&_,o=+#~*|7)(x__<`^(/&\"[a[i]::21]+'*-'*(a[i]==6)).center(14);t+='    (o o)     ';u+='ooO--(_)--Ooo-';i+=1;"*len(a);print s+t+u[:-1]

在线尝试!

基于0的索引;这里没有什么特别聪明的,只是通过切片和使用exec而不是循环来访问数据。



6

木炭103102字节

E²⪫Eθ⎇ι(o o)⪫ײ§ -⁼λ⁶§⪪”|″:αuxkτT↷K[ï�↔ς↨?◧BZ@C←↑⊞A⧴M✂↶ºKf÷H#S⦃J&≔⁰∧5À³≕r‹▷”³λ× ⁹M⁴←⪫EθooO--(_)--Ooo¦-

在线尝试!链接是详细版本的代码。说明:

E²⪫Eθ

循环输入两次。然后,每个结果都隐式地打印在其自己的行上。

⎇ι(o o)

在第二个循环中,只需生成眼睛即可。

⪫ײ§ -⁼λ⁶

将发型6包裹在-s中,将其他发型包裹在空间中。

§⪪”|″:αuxkτT↷K[ï�↔ς↨?◧BZ@C←↑⊞A⧴M✂↶ºKf÷H#S⦃J&≔⁰∧5À³≕r‹▷”³λ

从压缩的字符串中提取三个发型字符。

× ⁹

在每根头发或眼睛之间插入九个空格。

M⁴←

向左移动4个空格。

⪫EθooO--(_)--Ooo¦-

打印其余的面孔,并用组合-


6

[R 413个 391字节

感谢Giuseppe减少了22个字节,并将其减少到400个字节以下。

function(s,n=length(s)){I=intToUtf8
U=utf8ToInt
R=rep
K=cat
a=U("_,o=+#^*|&)(x")
b=c("@__","((_",">X<","'*`","",")|(","\\|/","","-*~*-","_/7")
s[s==7]=22;s[s==10]=23;s[s==18]=7;s[s==21]=10
for(i in s)K(I(c(rep(32,4+(i!=22)),"if"(i<14,R(a[i],3),U(b[i-13])),R(32,5+(i!=22)))))
K("
",I(R(c(R(32,3),40,111,32,111,41,R(32,6)),n)),"
")
K(I(40+R(c(x<-c(71,71,39,5,5),0,55,1,rev(x),5),n)[-(14*n)]))}

在线尝试!


你或许应该别名utf8ToIntintToUtf8
朱塞佩


@Giuseppe好点!我为自己的指数互换感到it愧,因为它是如此昂贵。我会努力的。
JayCe '18年

@JayCe您错过了另外一个rep缩短的时间:for(i in s)K(I(c(rep<--
Kirill L.

谢谢@KirillL。!当我最终有时间查看此代码时,请确保将其包括在内。
JayCe '18年

5

的JavaScript(ES6),200个 199字节

期望输入1索引。

a=>[1,0,2].map(y=>a.map(n=>s=y&2?'ooO--(_)--Ooo':`    ${p='( -'[y*n-7?y:2]}${"o o___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*`^^^)|(\\|/&&&".substr(y*n*3,3)}${y?p:')'}    `).join(s[3])).join`
`

在线尝试!

已评论

a =>                              // given the input array a[]
  [1, 0, 2].map(y =>              // for each row y:
    a.map(n =>                    //   for each integer n in a[]:
      s =                         //     let s be the content of this row
        y & 2 ?                   //     if this is the 3rd row:
          'ooO--(_)--Ooo'         //       use a hardcoded string
        :                         //     else:
          `    ${                 //       append 4 spaces
            p = '( -'[            //       append and save in p:
              y * n - 7 ? y : 2   //         '(' if y = 0 (2nd row)
            ]                     //         ' ' if y = 1 and n != 7
          }${                     //         '-' if y = 1 and n = 7
            "o o___,,,ooo(...)"   //       append the middle pattern (NB: truncated string)
            .substr(y * n * 3, 3) //       which is always the eyes if y = 0
          }${                     //
            y ? p : ')'           //       append p for the 1st row or ')' for the 2nd row
          }    `                  //       append 4 spaces
    ).join(s[3])                  //   join with the 4th character of s (space or hyphen)
  ).join`\n`                      // join with line-feeds

4

红宝石,164字节

->a{puts a.map{|i|j="_,o=+# *| )(x    ^  &"[i];(j<?!?%w{@__ ((_ >X< '*` -*~*- )|( \|/ _/7}[i%11-2]:j*3).center(14)}*"","    (o o)     "*k=a.size,"ooO--(_)--Ooo-"*k}

零索引。在线尝试!

所有困难的事情都发生在最上面。

"_,o=+# *| )(x ^ &"包含具有3个相同字符的所有发型,从中选择i第一个字符j

如果j不是空格,则以下表达式返回该字符的3个副本。如果是空格,则从中选择正确的发型%w{}。“奇数”发型是数字6,9,13,14,15,16,18,19,并且i%11-20..7

j<?!?%w{@__ ((_ >X< '*` -*~*- )|( \|/ _/7}[i%11-2]:j*3

剩下的就是将其填充到14个空格(居中)并打印适当数量的中间/底部。


您可以在括号中center(14)
加上

2

Python 2,204字节

i=input();l=len(i)
for l in[' '*4+' -'[x==6]+"_,o=+#**|_)(x@(>'^)\\&_,o=+#~*|/)(x_(X*^||&_,o=+#**|7)(x__<`^(/&"[x::21]+' -'[x==6]+' '*5for x in i],['    (o o)     ']*l,['ooO--(_)--Ooo-']*l:print''.join(l)

在线尝试!


2

Java的8,273个 263字节

a->{String r[]={"","",""},s="    ",t="ooO--(_)--Ooo",u="(o o)";for(int i:a){r[0]+=s+(i==7?"-":" ")+"___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*`^^^)|(\\|/&&&".split("(?<=\\G...)")[i]+(i==7?"-":" ")+s+" ";r[1]+=s+u+s+" ";r[2]+=t+"-";}return t.join("\n",r);}

在线尝试。

说明:

a->{                       // Method with integer-array parameter and String return-type
  String r[]={"","",""},   //  Result-String, starting at three empty rows
         s="    ",         //  Temp-String of four spaces for the first and second rows
         t="ooO--(_)--Ooo",//  Temp-String for the third row
         u="(o o)";        //  Temp-String for the second row
  for(int i:a){            //  Loop over the input-array
    r[0]+=                 //   Append to the first row:
          s                //    Four spaces
          +(i==7?          //    If the number is 7 (edge-case):
             "-"           //     Append "-"
            :              //    Else:
             " ")          //     Append a single space
          +"___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*`^^^)|(\\|/&&&".split("(?<=\\G...)")[i]
                           //    Append the correct hat based on `i`
          +(i==7?"-":" ")  //    If the number is 7, append "-" again, else a space
          +s+" ";          //    And append five spaces
    r[1]+=                 //   Append to the second row:
          s                //    Four spaces
          +u               //    The head
          +s+" ";          //    Five spaces
    r[2]+=                 //   Append to the third row:
          t                //    The hands and bodies
          +"-";}           //    And the stitch "-"
  return t.join("\n",r);}  //  Return the three rows as single newline delimited String

2

R247242字节

function(a,n=length(a)){for(i in a)cat(format(h[i],,,,"c",14+!20-i))
cat("
","   (o o)     "*n,"
")
cat("ooO--(_)--Ooo"*n,sep="-")}
"*"=rep
h=readLines(,21)
___
,,,
ooo
===
+++
###
-*~*-
***
|||
_/7
)))
(((
xxx
@__
((_
>X<
'*`
^^^
)|(
\|/
&&&

在线尝试!

现在,尝试使R的字节数更易于管理...

由于在R中进行字符操作非常冗长,因此我决定完全列出所有面部和发型样式。为了漂亮地打印发型,我将formatfunction与配合使用justify="centre"。不幸的是,我们需要使用一个额外的填充字符,i==20因为format计算填充时就好像转义了反斜杠一样,例如\\|/

目前的版本并没有使用尾部连字符。

编辑:归功于JayCe为-2和Giuseppe为-3字节。


爱您的直接方法!我不知道justify="centre"我可能会重用它。减去两个字符"/"=rep
JayCe

再下两个字节:format(h[i],,,,"c",14+!20-i)
朱塞佩

@Giuseppe实际上是-3,所以更好。@JayCe非常好,实际上我们也不使用乘法,因此覆盖*看起来更好-现在,它类似于string * number许多其他语言通用的操作!
Kirill L.

2

C!C-Wow 1.1.0),251字节

(需要在程序执行时传递参数,以空格分隔)

SS("     (o o)     \nooO--(_)--Ooo-",'\n') SS("___A,,,AoooA===A+++A###A-*~*-A***A|||A_/7A)))A(((AxxxA@__A((_A>X<A'*`A^^^A)|(A\\|/A&&&",'A') F(MR("0",A(0),"23"),W("?");E) I(AC,W("     ");RI(TN(A(i))+2);W("     ")); WL I(AC,W(RI(0))); WL I(AC,W(RI(1)));

非高尔夫版本:

STRSPLIT("     (o o)     \nooO--(_)--Ooo-", '\n')
STRSPLIT("___A,,,AoooA===A+++A###A-*~*-A***A|||A_/7A)))A(((AxxxA@__A((_A>X<A'*`A^^^A)|(A\\|/A&&&", 'A')
IF(MATHRANGE("0", ARGS(0), "23"), PRINT("?"); E)
LOOP(ARGC, PRINT("     "); READI(TONUM(ARGS(i)) + 2); PRINT("     "));
PRINTL
LOOP(ARGC, PRINT(READI(0)));
PRINTL
LOOP(ARGC, PRINT(READI(1)));

1

333个 319字节

func[x][h: copy[]i: 0
foreach[k l m]{___,,,ooo===+++###   ***|||_/7)))(((xxx@__((_>X<'*`^^^^^^)|(\|/&&&}[alter h
pad pad/left either 7 = i: i + 1["-*~*-"][rejoin[" "k l m" "]]9
14]foreach y x[prin h/(y)]print append/dup copy"^/"{    (o o)     }l: length? x
print take/part append/dup copy""{ooO--(_)--Ooo-}l 14 * l - 1]

在线尝试!


1

红宝石,163字节

->a{puts a.map{|i|(i==6?"-*~*-":i<9?"_,o=+#~*|"[i]*3:"_/7)))(((xxx@__((_>X<'*`^^^)|(\\|/&&&"[3*i-27,3]).center 14}*"","    (o o)     "*k=a.size,"ooO--(_)--Ooo-"*k}

在线尝试!

0索引。我弄弄了Level River St的答案,发现了另一种编码发型的方法,显然具有类似的高尔夫球感。在这里,我们将“最长”的5个字符组成的发型作为一种特殊情况,列表的第一部分中的琐碎模式分别由1个字符编码,在第二部分中,所有3个字符模式都按字面意义列出,无论如何-那些字符是否不同。最后是猴子脸样板。


1

C(gcc) 210的212个字节

-4个字节 ceilingcat。(当我修复原始代码所具有的错误时,这种情况再次增加。)

非常简单。

#define r(s)for(i=!puts("");i<n;printf(s,c,"___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*`^^^)|(\\|/&&&"+x*3,c=x^6?32:45,x=l[i++]));
x,c,i;f(l,n)int*l;{r("%5c%.3s%-6c")r("    (o o)     ")r("ooO--(_)--Ooo-")}

在线尝试!



1

PowerShell187171字节

-16字节感谢mazzy

''+($args|%{($x=' '*4)+($y=' -'[$_-eq6])+("___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*``^^^)|(\|/&&&"|% s*g($_*3)3)+$y+$x;$z++})
"$x(o o)$x "*$z
"ooO--(_)--Ooo-"*$z

在线尝试!

0索引,带有连字符。

展开:

''+($args|%{
    ($x=' '*4) + ($y=' -'[$_-eq6]) + 
    ("___,,,ooo===+++###*~****|||_/7)))(((xxx@__((_>X<'*``^^^)|(\|/&&&"|% substring ($_*3) 3) +
    "$y$x ";
    $z++
    })
"$x(o o) $x"*$z
"ooO--(_)--Ooo-"*$z

没什么好看的。只有第一行包含一些不错的逻辑。它使用索引到头发字符串中,并使用$current_entry_value*3挖出该块s ubstring,然后将所有块连接成一条大行。遇到`逃脱下一个插入号的问题,让我想知道为什么我遇到了IndexOutOfBounds错误,但已解决。现在使用一种更好的方法来组合第一行。

195个字节以遵循无前导/尾随连字符的规范


1
不错7.您可以节省一些字节在线尝试!
mazzy

1
还有更多在线尝试!
mazzy

1

Python 3,240个字节

h=[x*3for x in"_,o=+#*|)(x^&"]
for i,*l in(6,"-*~*-"),(9,"_/7"),(13,"@__","((_",">X<","'*`"),(18,")|(","\|/"):h[:i]+=l
*x,=map(int,input().split())
l=len(x)
p=print
p(*(h[i].center(13)for i in x))
p("    (o o)     "*l)
p("ooO--(_)--Ooo-"*l)

在线尝试!


0

符文附魔,313字节

B6?>8b2*B0il2)?\B" "9a2*
{" ___ "D
{" ,,, "D
{" ooo "D
{" === "D
{" +++ "D
{" ### "D
{"-*~*-"D
{" *** "D
{" ||| "D
{" _/7 "D
{" ))) "D
{" ((( "D
{" xxx "D
{" @__ "D
{" ((_ "D
{" >X< "D
{" '*` "D
{" ^^^ "D
{" )|( "D
{" \|/ "D\
{" &&& "D{
{"    " LLRB͍!{
"-(_)--Ooo-"{*@\~4-:l͍e,:{$ak$"    (o o)     "{*$ak$"ooO-"

在线尝试!

就尽可能压缩字符串和重新使用段以及在B牧场时将输入值用作直接跳转偏移而言,合理紧凑。

如果允许多余的尾随空间,则可以通过省略4-最后一行的来将其缩短2个字节。+2个字节(1-如果最后一个)-不打算出现)(匹配规格,违反示例)。

" (o o) "是令人讨厌的,无法压缩,因为使用诸如" "4*最终得到的字节数完全相同的构造它。

传递> 21的输入会很有趣。例如,单人22刮胡子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.