[크리스마스 테마 면책 조항]


86

개조에주의하십시오. 제목이 정의를하지 않으면 다른 것으로 변경하십시오. 재미 있다고 생각했습니다.


이번 크리스마스 시즌에 조명을 끊는 임무를 맡았으며 가족은 메리 크리스마스가 되려면 적어도 2 개의 크리스마스 조명을 집에 걸어야한다고 결정했습니다. 따라서 숫자가 주어지면 1 < n다음 사양에 따라 매달려있는 크리스마스 조명 의 수 를 출력해야합니다 ...


기본 크리스마스 조명의 구조는 다음과 같습니다.

  _?_
 [___]
 /:' \ 
|::   |
\::.  /
 \::./
  '='

불확실한 유일한 부분은 물음표입니다. 체인의 빛이 어디에 도달하는지에 따라 연결이 크게 달라집니다.

체인의 첫 번째 조명을 위해서는 다음을 출력해야합니다.

    .--._ 
  _(_ 
 [___]
 /:' \ 
|::   |
\::.  /
 \::./
  '='

체인의 마지막 빛의 경우 다음을 출력해야합니다.

_.--. 
    _)_
   [___]
   /:' \ 
  |::   |
  \::.  /
   \::./
    '='

그리고 중간에있는 모든 조명에 대해 :

_.--.--._
   _Y_ 
  [___]
  /:' \ 
 |::   |
 \::.  /
  \::./
   '='

예:

N = 2 :

    .--.__.--.    
  _(_        _)_  
 [___]      [___] 
 /:' \      /:' \ 
|::   |    |::   |
\::.  /    \::.  /
 \::./      \::./ 
  '='        '='  

N = 6 :

    .--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.
  _(_       _Y_      _Y_      _Y_      _Y_       _)_
 [___]     [___]    [___]    [___]    [___]     [___]
 /:' \     /:' \    /:' \    /:' \    /:' \     /:' \
|::   |   |::   |  |::   |  |::   |  |::   |   |::   |
\::.  /   \::.  /  \::.  /  \::.  /  \::.  /   \::.  /
 \::./     \::./    \::./    \::./    \::./     \::./
  '='       '='      '='      '='      '='       '='

신용

ASCII-Art는 http://www.chris.com/ascii/index.php?art=holiday/christmas/other 에서 가져 왔습니다.

"jgs"라는 사용자가 개발했으며이 사이트의 컨텐츠 중 약 40 %를 담당합니다.


규칙

  • 후행 공백은 후행 줄 바꿈과 동일합니다.
  • 체인의 나머지 부분에서 첫 번째 전구와 마지막 전구 사이에 1 개의 공간이 더 있습니다.
  • 입력으로 1 개의 정수만 사용할 수 있으며 출력은 배열이 아닌 문자열이어야합니다.
  • 프로그램에 2보다 작은 값에 대해 정의되지 않은 함수가있을 수 있습니다.

이것은 , 가장 적은 바이트 수의 승리입니다.


Sanbox 게시물 링크는 여기에 있습니다.


문자열이 문자 배열의 동의어 인 경우 어떻게합니까?
OUurous December

36
기본적인 크리스마스 조명은 수류탄과 엄청나게 비슷해 보입니다 :)
nicael

18
@nicael 다른 도전 과제 설명 : 산타는 올해 나쁜 아이들을 단속하고 있으며, 장난 꾸러기 한 사람이 구금을 당할 때마다 수류탄을받을 것입니다. 산타는 선물을 사려 깊게 제공하면서 수류탄을 묶어 세상의 나쁜 아이들이 우연히 잃지 않도록했습니다!
Magic Octopus Urn

@MagicOctopusUrn Uhm, 왼쪽과 오른쪽에 3 칸, 그렇지 않으면 2 칸? 간격이 일정하기를 바랍니다. 이것은 못생긴 수류탄 벨트입니다.
polkovnikov.ph 2016

1
@ polkovnikov.ph 또는 괄호 위에 점이 있거나 (이상하게 보임) 괄호가 아닌 괄호입니다. IMO이 방법은 가장보기 좋지만 (가장 골프는 아니지만) 접근 방식입니다.
dzaima

답변:


35

SOGL V0.12 , 73 71 70 66 바이트

.”L7:±¹‘Ο4↕ooā.⁾ Y*¾(){"}^ņF⁵),WοΓy⅜¬κ8ΕL▓‚7m~Ε⅝Γ‘7n┼F (=f⁄2=+⁽{@┼

여기 사용해보십시오!

차콜 응답(YYY)같은 문자열을 반복하여 -4 바이트

2를 처리 할 필요가 없으면 63 바이트 가 작동합니다.


9
[마음이 불었다.]
Robert Harvey

2
이것은 절대적으로 우스운 일입니다. (특히 전화로 이루어진 경우) +1
Joe

10
초기화되지 않은 메모리를 인쇄 할 때 부터이 정확한 코드를 본 적이 있다고 90 % 확신합니다.
Nic Hartley

113 바이트, 70 자입니다.
polkovnikov.ph 2016

@ polkovnikov.ph save SOGL codepage encoded file버튼 을 클릭하면 70 바이트 파일을 제공하여 파일을로드 할 수 있습니다 (찾아보기 버튼은 직관적이지 않지만 멀리 고정되어 있음). SOGL은이를 위해 사용자 정의 코드 페이지를 사용합니다. (코드 페이지는 답변의 헤더에 연결되어 있습니다)
dzaima

26

파이썬 3 200 195 191 190 186 바이트

d,*l=" _%c_     , [___]   , /:' \   ,|::   |  ,\::.  /  , \::./   ,  '='    ".split(',')
x=int(input())-2
print(' '*3,-~x*'.--.__.--'+'.\n',d%'(',d%'Y'*x,d%')')
for s in l:print(s,s*x,s)

dylnan에서 -1 바이트
Rod에서 -4 바이트

stdin에 입력을받습니다.

온라인으로 사용해보십시오!

설명:

d,*l=" _%c_     , [___]   , /:' \   ,|::   |  ,\::.  /  , \::./   ,  '='    ".split(',')
# d is the second row, without the (, Y, or ) to connect the light to the strand
# l is the third through eighth rows in a list
x=int(input())-2
# x is the number of lights in the middle of the strand
print(' '*3,-~x*'.--.__.--'+'.\n',d%'(',d%'Y'*x,d%')')
# print x+1 wire segments and a trailing dot, starting four spaces over
# on the next line, print the connectors, _(_, then _Y_ * x, then _)_
for s in l:print(s,s*x,s)
# on the Nth line, print the Nth light row, a space,
#     x * the Nth light row, a space, and the Nth light row

추가 축제 버전!


마지막 줄을 변경하여 for s in l:print(s,s*x,s)바이트 를 저장합니다.
dylnan

설명 주셔서 감사합니다, 파이썬 나에게 기괴한 보인다 ... lol
ArtisticPhoenix

1
아이러니하게도, 골프를 치지 않을 때 파이썬은 가장 기괴한 언어 중 하나입니다.
jpmc26


15

자바 스크립트 (ES6), 180 바이트

n=>`    .${'--.__.--.'.repeat(n-1)}
`+`  _Y_  
 [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.replace(/.+/g,(r,p)=>`${p?r:'  _(_  '}  ${` ${r} `.repeat(n-2)}  ${p?r:'  _)_'}`)

테스트

var f=
n=>`    .${'--.__.--.'.repeat(n-1)}
`+`  _Y_  
 [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.replace(/.+/g,(r,p)=>`${p?r:'  _(_  '}  ${` ${r} `.repeat(n-2)}  ${p?r:'  _)_'}`)
  
function update()
{
  var n=+I.value
  P.textContent=f(n)
}  

update()
<input id=I type=number value=2 min=2 oninput='update()'>
<pre id=P></pre>


13

자바 스크립트 (ES6) 204 201 196 194 192 바이트

N=>`     ${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
   _(_    ${N--,r(`   _Y_   `)}    _)_
`+` [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.split`
`.map(x=>`${x=` ${x} `} ${r(x)} `+x).join`
`


1
다음 .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.과 같이 바꾸면 몇자를 절약 할 수 있습니다${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@KuilinLi에 N대한 첫 번째 호출 후 감소해야 r하지만 제대로 작동합니다.
darrylyeo

13

, 78 74 바이트

M⁴→×….--.__⁹⊖θ.⸿F⪫()×Y⁻貫M⁼ι)→P“ ▷υ ρ1↗N⁷Σ⭆ C✂⪪⟲⦃¬≡↘↨H℅⌕Σêλ⍘”  _ι_M⁺⁴⁼ι(→

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 편집 : 배선 인쇄 방식을 단순화하여 2 바이트를 절약했습니다. 새로운 코드가 입력을 정수로 자동 변환하기 때문에 2 바이트가 절약되었습니다. 설명:

M⁴→×….--.__⁹⊖θ.⸿

끈을 잡고 .--.__길이 9로 성형 한 다음 각 결합에 대해 한 번 반복 하여 결선을 인쇄하고 .전구의 다음 줄 시작으로 이동하기 전에 결승을 마무리 하십시오.

F⪫()×Y⁻貫

: 커넥터의 문자열을 통해 루프 ()끝에서, 그리고 Y중간의.

M⁼ι)→

마지막 전구 인 경우 한 문자 오른쪽으로 이동하십시오.

P“ ▷υ ρ1↗N⁷Σ⭆ C✂⪪⟲⦃¬≡↘↨H℅⌕Σêλ⍘”

커서를 움직이지 않고 전구의 몸체를 인쇄하십시오.

  _ι_

커넥터를 포함한 전구 캡을 인쇄하십시오.

M⁺⁴⁼ι(→

다음 전구의 시작 부분으로 이동하십시오 (첫 번째 전구 인 경우 추가 문자).


바이트가 아닌 74 자입니다.
polkovnikov.ph 2016

@ polkovnikov.ph Charcoal은 사용자 지정 코드 페이지를 사용 하여 각 문자를 단일 바이트로 계산할 수 있습니다.
dzaima

13

엑셀 VBA, 224 (207) 205 바이트

범위에서 입력 [A1]을 받고 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능 .

전구를 왼쪽에서 오른쪽 아래로 한 줄씩 인쇄합니다.

?Spc(4)[Rept(".--.__.--",A1-1)]".":?"  _(_ "[Rept("      _Y_",A1-2)]"       _)_":For i=0To 5:b=Split(" [___]   1 /:' \   1|::   |  1\::.  /  1 \::./   1  '='    ",1)(i):[B1]=b:?b" "[Rept(B1,A1-2)]" "b:Next

샘플 I / O

[A1]=7 ''  Input to worksheet, may also be done manually
?Spc(4)[Rept(".--.__.--",A1-1)]".":?"  _(_ "[Rept("      _Y_",A1-2)]"       _)_":For i=0To 5:b=Split(" [___]   1 /:' \   1|::   |  1\::.  /  1 \::./   1  '='    ",1)(i):[B1]=b:?b" "[Rept(B1,A1-2)]" "b:Next
    .--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.
  _(_       _Y_      _Y_      _Y_      _Y_      _Y_       _)_
 [___]     [___]    [___]    [___]    [___]    [___]     [___]   
 /:' \     /:' \    /:' \    /:' \    /:' \    /:' \     /:' \   
|::   |   |::   |  |::   |  |::   |  |::   |  |::   |   |::   |  
\::.  /   \::.  /  \::.  /  \::.  /  \::.  /  \::.  /   \::.  /  
 \::./     \::./    \::./    \::./    \::./    \::./     \::./   
  '='       '='      '='      '='      '='      '='       '='    

@ YowE3k 덕분에 -17 바이트

임시 변수 추가를위한 -2 바이트 b


2
나는 서류 소프트웨어 매크로 언어로 답을 좋아한다! 다른 한편으로 나는 VBA에졌다. +1
OUurous

1
(당신은 내가이 의견을 남길 수 있도록 가입하도록했습니다!) : [Rept(B1,A1-2)]루프 시작 직전은 사용되지 않습니다.
YowE3K

@ YowE3K-당신 말이 맞아요! 그것을
Taylor Scott

10

C,  279   278  272  262  259 바이트

6 바이트를 절약 해 주신 @NieDzejkob에게 감사드립니다!

#define P;printf(
i,j;f(n){char*S=" [___]   \0 /:' \\   \0|::   |  \0\\::.  /  \0 \\::./   \0  \'=\'    \0"P"    ");for(i=n--;--i P".--.__.--"))P".\n  _(_ ");for(;++i<n P"      _Y_"))P"       _)_\n%s ",S);for(;*S P"%10s\n%s ",S,S+10),S+=10)for(i=n;--i P S));}

온라인으로 사용해보십시오!

풀림 :

#define P;printf(

i, j;

f(n)
{
    char*S = " [___]   \0 /:' \\   \0|::   |  \0\\::.  /  \0 \\::./   \0  \'=\'    \0"
    P"    ");

    for (i=n--; --i P".--.__.--"))
    P".\n  _(_ ");

    for (; ++i<n P"      _Y_"))
    P"       _)_\n%s ",S);

    for (; *S P"%10s\n%s ", S, S+10), S+=10)
        for(i=n; --i P S));
}

1
C, 멋지다! (:
SilverWolf


9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 바이트

function g($n){$a=["     .--._".r("_.--.--._",$n)."_.--.",r("_(_")." ".r(_Y_,$n)." ".r("_)_")];foreach(explode(9,"[___]9/:' \9|::   |9\::.  /9\::./9'='")as$b)$a[]=r($b)." ".r($b,$n)." ".r($b);return join("\n",$a);}function r($s,$n=3){return str_repeat(str_pad($s,9," ",2),$n-2);}

테스트를위한 읽기 가능한 버전 :

function g($n){
    $a=[
         "     .--._".r("_.--.--._",$n)."_.--.",
         r("_(_")." ".r(_Y_,$n)." ".r("_)_")
    ];

    foreach(explode(9, "[___]9/:' \9|::   |9\::.  /9\::./9'='") as$b)
         $a[]=r($b)." ".r($b,$n)." ".r($b);

    return join("\n",$a);
}
function r($s,$n=3){
    return str_repeat(str_pad($s,9," ",2),$n-2);
}

축소 버전을 확인 하십시오.

여기에서 읽을 수있는 버전을 확인 하십시오

최신 정보

함수에 싸서



2
구분 기호로 숫자를 사용 하는 오래된 JavaScript 팁 은 PHP에서도 잘 작동합니다. 구분 기호 \ 앞 을 이스케이프 처리해야 하므로 1 문자 만 저장합니다. 공백 문자를 같은 큰 문자열의 일부로 만들어서 중간에 표현식을 확장으로 포함시켜 다른 2 개의 문자를 저장할 수 있습니다 $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork

@manatwork-팁 주셔서 감사합니다 업데이트
ArtisticPhoenix

1
@manatwork-또한 탈출구 9가 필요없는 구분 기호로 a 를 사용하면 아마도 다른 숫자와는 작동하지 않을 것입니다.0
ArtisticPhoenix

1
또 다른 하나는 $r()람다 함수를 규칙적으로 정의 할 수 function r()있다는 것입니다 (같은 장소에있을 수 있으며 기능이 가능합니다). 문자열 구문 분석을 수정해야합니다 " {r("")} ". 작동하지 않습니다. 다른 -7 바이트;)
7ochem

8

자바 310 307 300 275 바이트

람다 식으로 변환 한 DevelopingDeveloper 덕분에

i->{int j=1;String o="     .";for(;j++<i;)o+="--.__.--.";o+="\n   _(_    ";for(;--j>2;)o+="   _Y_   ";o+="    _)_";String[]a={"  [___]  ","  /:' \\  "," |::   | "," \\::.  / ","  \\::./  ","   '='   "};for(String b:a)for(j=0;j++<i;)o+=j==1?"\n"+b+" ":j==i?" "+b:b;return o;};

넓히는:

i->
{
    int j=1;
    String o="     .";
    for(;j++<i;)
        o+="--.__.--.";
    o+="\n   _(_    ";
    for(;--j>2;)
        o+="   _Y_   ";
    o+="    _)_";
    String[]a={"  [___]  ","  /:' \\  "," |::   | "," \\::.  / ","  \\::./  ","   '='   "};
    for(String b:a)
        for(j=0;j++<i;)
            o+=j==1?"\n"+b+" ":j==i?" "+b:b;
    return o;
};

문자열을 곱하는 짧은 방법을 살펴보면 스트림이 놀랍도록 더 장황 하다는 것을 알았습니다.

온라인으로 사용해보십시오!


2
String o="";+ o+=" .";=String o=" .";
manatwork

@manatwork 감사합니다, 그리워
phflack

2
당신이 사용하는 경우 @phflack 나는 290에 그것을 아래로 가지고 람다 식을
DevelopingDeveloper

1
@phflack는 또한, 영업 이익은 그냥 콘솔에 인쇄되지, 문자열을 반환해야했다, 그래서 당신은 그것을 내려 놓을 수 있습니다 이 일을 279
DevelopingDeveloper

1
@DevelopingDeveloper Cool, 나는 또한 j=#for 루프 에서 골프를 치는 방법을 찾았습니다
phflack

5

청소 , 305 292 288 275 바이트

import StdEnv
f c=mklines['  _',c,'_  \n [___] \n /:\' \\ \n|::   |\n\\::.  /\n \\::./ \n  \'=\'  ']
@n=flatlines[a++b++c\\a<-[['    .--._']:[e++['  ']\\e<-f'(']]&b<-map(flatten o(repeatn(n-2)))[['_.--.--._']:[[' ':e]++[' ']\\e<-f'Y']]&c<-[['_.--.    ']:[['  ':e]\\e<-f')']]]

온라인으로 사용해보십시오!


3

파이썬 2 (PyPy) , 365 316 315 251 245 바이트

FlipTack 덕분에 -21

ovs 덕분에 -43

Xcoder 에게 감사합니다 -6

v,p=' \n'
a,l,n=".--._",["[___]"," /:' \ ","|::   |","\::.  /"," \::./ ","  '='  "],input()-2
e,b=v*5+"_)_",a[::-1]
r=v*4,a,(b[:4]+a)*n,b,p+"  _(_   ",(v*4+"_Y_  ")*n,e+p+v
for i in l:b=4-2*(i in l[1:]);r+=i+v*-~b,(i+v*b)*n,v+i+p
print''.join(r)

온라인으로 사용해보십시오!




마지막 제안에서 편집 한 후 바이트 수를 업데이트하는 것을 잊었다 고 생각합니다.
NieDzejkob

1

코 틀린 , 261 바이트

{val c="  [___]\n/:' \\\n |::|\n \\::./\n  \\::./\n   '='"
(0..7).map{i->print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
(0..L-3).map{print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))}
if(i>1)print(' ')
print("_.--.\n    _)_\n$c".lines()[i])
println()}}

미화

{
    val c = "  [___]\n  /:' \\\n |::   |\n \\::.  /\n  \\::./\n   '='"

    (0..7).map {i->
        print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
        (0..L - 3).map {
            print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))
        }
        if (i > 1) print(' ')
        print("_.--.\n    _)_\n$c".lines()[i])
        println()
    }
}

테스트

fun f(L: Int)
{val c="  [___]\n/:' \\\n |::|\n \\::./\n  \\::./\n   '='"
(0..7).map{i->print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
(0..L-3).map{print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))}
if(i>1)print(' ')
print("_.--.\n    _)_\n$c".lines()[i])
println()}}

fun main(args: Array<String>) {
    f(6)
}

TIO

TryItOnline


1

Google 스프레드 시트, 190 바이트

범위에서 입력 A1을 받고 호출 셀로 출력 하는 익명의 워크 시트 함수

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.