묵시록의 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-

규칙

  • 줄 바꿈 / 공백 / 하이픈 앞과 뒤에는 괜찮습니다.
  • 입력에서 얼굴이 두 번 이상 나타날 수 있습니다.
  • 입력에 유효하지 않은 숫자가 있으면 정의되지 않은 동작이있을 수 있습니다.
  • 바느질 :
    • 스티칭 된면은 하단 (3) 줄에 단일 하이픈으로 연결됩니다.
    • 면은 첫 번째 도면과 달리 모든 선에 표시됩니다.
  • 입력은 0 또는 1 인덱싱 될 수 있으며 20은 0의 최대 값이고 21은 1의 최대 값입니다.
  • 이것은 , 가장 낮은 바이트 수의 승리입니다.


7
숫자 7은 "얼굴은 다음과 같습니다"부분을 위반 한 것 같습니다
boboquack

10
모든 테스트 사례에는 후행 "스티칭"하이픈이 포함되어있어 사양과 모순되는 것으로 보입니다.
Shaggy

3
킬로 이는 여기에있었습니다.
msh210

2
@MagicOctupusUrn, 위에서 제기 한 후행 하이픈 문제를 해결할 수 있습니까?
Shaggy

답변:


9

JAPT -R , 122 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
우리가 원했던 챠트 미러 방식은 정말 유용 할 것입니다.
Oliver

또한 &활용하기위한 포장 은 천재였습니다. 특히 그 이후로 1 기반으로 만들었습니다.
Oliver

그것은 다른 길 '둥근'이었다; 나는 내가 움직일 수 실현 &있다면 나는 그것이 1 기반했다) 또 여기 저기 더 골프의하지만 내일 '때까지 기다려야 그래서 늦게 느낀다.
얽히고 설킨

6

파이썬 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‹▷”³λ

압축 된 문자열에서 세 개의 헤어 스타일 문자를 추출하십시오.

× ⁹

각 머리카락이나 눈 사이에 9 개의 공백을 삽입하십시오.

M⁴←

4 칸 왼쪽으로 이동하십시오.

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

로 결합 된 나머지면을 인쇄합니다 -.


6

R , 413 391 바이트

22 바이트가 적고 400 바이트 미만으로 Giuseppe에게 감사드립니다.

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
주세페


@ 주세페 좋은 지적! 인덱스 스왑이 너무 비싸서 부끄럽습니다. 나는 그것을 할 것입니다.
JayCe

@JayCe 당신은 rep짧게 한 가지를 더 놓쳤다 :for(i in s)K(I(c(rep<--
Kirill L.

감사합니다 @KirillL. ! 마지막 으로이 코드를 검토 할 시간이있을 때 이것을 포함 시키겠습니다.
JayCe

5

자바 스크립트 (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}

인덱스가 0입니다. 온라인으로 사용해보십시오!

모든 어려운 일은 최상위 라인에서 발생합니다.

"_,o=+# *| )(x ^ &" 3 개의 동일한 문자로 된 모든 헤어 스타일을 포함합니다. i 번째 문자는 j.

j공백이 아닌 경우 다음 표현식은 3 개의 문자 사본을 리턴합니다. 그것이 공간이라면, 우리는 사이에서 올바른 헤어 스타일을 선택합니다 %w{}. "홀수"헤어 스타일은 숫자 6,9,13,14,15,16,18,19이며 i%11-2완벽한 해시를 제공합니다.0..7

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

남은 것은 14 칸 (중앙)까지 채우고 적절한 수의 중간 / 바닥을 인쇄하는 것입니다.


당신은 괄호를 제거 할 수 있습니다center(14)
키릴 L.


2

자바 (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

R , 247242 바이트

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에서 문자 조작을하는 것은 절망적으로 장황하기 때문에 모든 얼굴과 헤어 스타일 패턴을 그대로 나열했습니다. 헤어 스타일을 예쁘게 인쇄하려면을 사용하여 format기능을 사용하십시오 justify="centre". 불행히도 백 슬래시가 이스케이프 된 것처럼 패딩을 계산 하기 i==20때문에 추가 패딩 문자를 사용해야합니다 .format\\|/

현재 버전은 하지 후행 하이픈을 사용 .

편집 : -2의 경우 JayCe, -3 바이트의 경우 Giuseppe에 대한 크레딧.


직접 접근을 사랑하십시오! 나는 justify="centre"아마도 그것을 재사용 할 수 있다는 것을 몰랐다 . 빼기 두 문자 :"/"=rep
JayCe

또 다른 2 바이트 다운 :format(h[i],,,,"c",14+!20-i)
Giuseppe

@Giuseppe 실제로 -3이므로 훨씬 좋습니다. @JayCe는 매우 훌륭합니다. 사실 우리는 곱셈도 사용하지 않으므로 재정의 *가 훨씬 좋아 보입니다. 이제는 string * number다른 많은 언어에 공통적 인 연산 과 비슷 합니다!
Kirill L.

2

씨! ( 와우 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

PowerShell , 187 바이트

mazzy 덕분에 -16 바이트

''+($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

너무 멋진 것은 없습니다. 첫 번째 줄에만 알맞은 논리가 있습니다. 를 사용하여 헤어 스트링에 색인을 생성하고 ubstrin $current_entry_value*3을 사용하여 해당 청크를 s퍼냅니다.g모든 청크를 하나의 큰 줄로 결합하기 전에 . `다음 캐럿을 이스케이프 처리하는 문제에 부딪 치면서 왜 IndexOutOfBounds 오류가 발생했는지 궁금해했습니다. 이제 더 나은 방법을 사용하여 첫 번째 줄을 결합하십시오.

선행 / 트레일 링 하이픈이없는 사양을 따르는 195 바이트


1
nice 7. 바이트를 절약 할 수 있습니다. 온라인으로 사용해보십시오!
mazzy



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 바이트 단축 할 수 있습니다 . 1-결승전 -이 없을 경우 +2 바이트 (사양 일치, 예제 위반)

청크 " (o o) "는 압축하는 것이 짜증나 며, 같은 것을 사용하여 구성하는 " "4*것은 정확히 같은 바이트 수입니다.

입력 값이 21을 초과하면 재미있는 일을합니다. 예를 들어 싱글 22는 밀착 면도를 제공합니다 .

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