[クリスマステーマの免責事項はこちら]


86

MODに注意してください。タイトルが正義を果たさない場合は、何にでも変更してください。面白いと思いました。


あなたはこのクリスマスシーズンの照明を切ることを任されており、あなたの家族はそれをメリークリスマスにするには、少なくとも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から取得されました

このサイトのコンテンツの約40%を担当する「jgs」というユーザーによって開発されました。


ルール

  • 末尾のスペースは問題ありませんが、末尾の改行と同じです。
  • チェーンの残りの部分の最初と最後の電球の間にもう1つのスペースがあります。
  • 入力として1つの整数のみを使用でき、出力は配列ではなく文字列でなければなりません。
  • プログラムには、2未満の値に対して未定義の関数がある場合があります。

これは、バイト数が最も少なくなります。


Sanboxの投稿リンクはこちら。


文字列が文字の配列の同義語である場合はどうなりますか?
Οurous

36
その基本的なクリスマスライトは
手g弾に途方

18
@nicael代替チャレンジの説明:今年、サンタは悪い子供たちを取り締まります。思いやりのある贈り物の提供者として、サンタは手g弾を結び付けて、世界の悪い子供たちが偶然それらを失うことがないようにしています!
魔法のタコUr

@MagicOctopusUrnうーん、左右に3スペース、それ以外は2スペース?間隔が一定であることを望みます。これはい手g弾ベルトです。
polkovnikov.ph

1
@ polkovnikov.phそれは、それか、ドットが括弧の上にある(奇妙に見える)か、括弧が括弧ではないかのいずれかでした。IMOこれは、最も見栄えの良い(ただし、最もゴルフに適した方法ではありません)アプローチです。
dzaima

回答:


35

SOGL V0.1273 71 70 66 バイト

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

ここで試してみてください!

チャコールの回答のよう(YYY)な文字列をループすることにより、-4バイト

2を処理する必要がない場合、63バイトが機能します:/


9
[心が吹き飛ばされた。]
ロバートハーベイ

2
これは絶対にばかげています。(特に電話で行われた場合)+1
ジョー

10
初期化されていないメモリを印刷したときから、この正確なコードを見たことは90%確信しています。
ニックハートリー

これは113バイト、70文字です。
polkovnikov.ph

@ polkovnikov.phをクリックするsave SOGL codepage encoded fileと、70バイトのファイルが表示され、そこに読み込むこともできます(ただし、参照ボタンは直感的には遠く、それを修正します)。SOGLは、カスタムコードページを使用してこれを実行します。(コードページは、回答のヘッダーに連結されている)
dzaima

26

Pythonの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)てバイトを節約します。
ディルナン

説明をありがとう、Pythonは私には奇妙に見えます... lol
ArtisticPhoenix

1
@ArtisticPhoenix皮肉なことに、ゴルフをしていないときは、Pythonは最も奇妙な言語の1つです。
jpmc26

18

Pyth113 107バイト

+"    ."*=tQ"--.__.--."++"  _(_ "j"_Y_"*Q]*6d" _)_"jms[d;jd*Q]*2;;d)c5" /:' \ |::   |\::.  / \::./   '='  "

オンラインでお試しください!

最も正確なゴルフバージョンではありません...


11
ゴルフではない?多分。正しい?はい。FGITW?絶対に。
魔法のタコUr

ええ、ゴルファーではなく、特に不要なトレーリングキャラクターがあります。:P
エリック・ザ・アウトゴルファー

15

JavaScript(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

JavaScriptの(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に成形してから配線を印刷します。次に、結合ごとに1回繰り返し、最後.に終了してから電球の次の行の先頭に移動します。

F⪫()×Y⁻貫

:コネクターの文字列をループ(し、)端部であり、Y中央での。

M⁼ι)→

これが最後の電球である場合は、1文字右に移動します。

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

カーソルを動かさずに電球の本体を印刷します。

  _ι_

コネクタを含む電球のキャップを印刷します。

M⁺⁴⁼ι(→

次の電球の先頭に移動します(これが最初の電球の場合は追加の文字)。


これはバイトではなく74文字です。
polkovnikov.ph

@ polkovnikov.ph Charcoalはカスタムコードページを使用して各文字を1バイトとしてカウントできるようにします。
dzaima

13

エクセルVBA、224 207 205のバイト

範囲から入力を受け取り[A1]、VBEイミディエイトウィンドウに出力する匿名VBEイミディエイトウィンドウ関数。

電球を左上から右下に1行ずつ印刷します

?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
Οurous

1
(あなたは私にこのコメントを残せるようにサインアップさせてくれました!): [Rept(B1,A1-2)]ループの開始の直前は使用されません。
YowE3K

@ YowE3K-あなたは正しいです!それをキャッチしてくれてありがとう-その修正
テイラースコット

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、276307303301293283280、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 -先端に感謝更新
ArtisticPhoenix

1
@manatwork -私が使用している場合も、9何のエスケープは必要ありません区切りとして、おそらくこれは単に他の番号でないと動作します0
ArtisticPhoenix

1
もう1つは、$r()ラムダ関数を通常の関数として定義できることですfunction r()(同じ場所にある可能性があり、関数内の関数が可能です)。文字列の解析を修正する必要があります:" {r("")} "動作しません。別の-7バイト;)
7ochem

8

Java、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ありがとう、それを見逃した
phflack

2
あなたが使用している場合@phflack私は290にそれを降りてラムダ式を
DevelopingDeveloper

1
@phflackはまた、OPは、それはちょうどあなたがそれをドロップダウンすることができますので、コンソールにそれを印刷しないで、文字列を返す必要があると述べ、これを行う279
DevelopingDeveloper

1
クール@DevelopingDeveloper、私はまた、ゴルフへの道を発見したj=#forループの外に
phflack


3

Python 2(PyPy)365 316 315 251 245バイト

-21 FlipTackに感謝

-43 ovsに感謝

-6 Mr. Xcoderに感謝

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

Kotlin、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.