[CHRISTMAS THEME TUYÊN BỐ TỪ CHỐI TẠI ĐÂY]


86

Lưu ý với các mod, nếu tiêu đề không công bằng, hãy đổi nó thành bất cứ điều gì, tôi nghĩ nó thật buồn cười.


Bạn có nhiệm vụ treo đèn cho mùa Giáng sinh này và gia đình bạn đã quyết định rằng đó là một Giáng sinh vui vẻ, bạn cần treo ít nhất 2 đèn Giáng sinh trong nhà. Vì vậy, thách thức của bạn là, được đưa ra một số 1 < n, xuất ra số lượng đèn Giáng sinh tương ứng bạn sẽ treo theo các thông số kỹ thuật sau đây ...


Đây là cấu trúc của một ánh sáng Giáng sinh cơ bản:

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

Phần không chắc chắn duy nhất là dấu hỏi, vì tùy thuộc vào nơi ánh sáng chiếu vào chuỗi, kết nối sẽ khác nhau rất nhiều.

Đối với ánh sáng đầu tiên trong chuỗi, bạn sẽ cần xuất ra:

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

Đối với ánh sáng cuối cùng trong chuỗi, bạn sẽ cần xuất ra:

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

Và cho tất cả các đèn ở giữa:

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

Thí dụ:

N = 2 :

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

N = 6 :

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

tín dụng

ASCII-Art được lấy từ: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Nó được phát triển bởi một người dùng có tên "jss", người chịu trách nhiệm cho khoảng 40% nội dung trên trang web đó.


Quy tắc

  • Không gian lưu trữ là tốt, cùng với một dòng mới.
  • Có thêm 1 khoảng trống giữa bóng đèn đầu tiên và cuối cùng từ phần còn lại của chuỗi.
  • Bạn chỉ có thể lấy 1 số nguyên làm đầu vào và đầu ra PHẢI là một chuỗi, không có mảng.
  • Chương trình của bạn có thể có các hàm không xác định cho các giá trị nhỏ hơn 2.

Đây là , thắng byte thấp nhất.


Liên kết bài Sanbox ở đây.


Nếu chuỗi là từ đồng nghĩa cho mảng ký tự thì sao?
Οurous

36
Ánh sáng Giáng sinh cơ bản đó trông thật lố bịch giống như lựu đạn :)
nicael

18
@nicael Mô tả thử thách thay thế: Ông già Noel đang trừng trị những đứa trẻ xấu trong năm nay và với mỗi hành động nghịch ngợm, đứa trẻ sẽ nhận được một quả lựu đạn trực tiếp. Là người cung cấp những món quà chu đáo mà ông là, ông già Noel đã buộc những quả lựu đạn lại với nhau để những đứa trẻ xấu số trên thế giới sẽ không mất chúng một cách tình cờ!
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Uhm, 3 khoảng trắng ở bên trái và bên phải và 2 khoảng trắng khác? Tôi muốn khoảng cách là nhất quán. Đây là một vành đai lựu đạn xấu xí.
polkovnikov.ph

1
@ polkovnikov.ph đó là hoặc dấu chấm nằm trên dấu ngoặc đơn (trông lạ) hoặc dấu ngoặc đơn không phải là dấu ngoặc đơn. IMO đây là cách tiếp cận tốt nhất (mặc dù không phải là môn thể thao nhất).
dzaima

Câu trả lời:


35

SOGL V0.12 , 73 71 70 66 byte

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

Hãy thử nó ở đây!

-4 byte bằng cách lặp qua một chuỗi như (YYY)như câu trả lời than

63 byte sẽ hoạt động nếu 2 không cần xử lý: /


9
[tâm trí bị thổi bay.]
Robert Harvey

2
Điều này là hoàn toàn vô lý. (Đặc biệt nếu nó được thực hiện trên điện thoại.) +1
Joe

10
Tôi chắc chắn 90% tôi đã thấy mã chính xác này trước đây, từ khi tôi in một số bộ nhớ chưa được khởi tạo.
Nic Hartley

Đó là 113 byte, 70 ký tự.
polkovnikov.ph

@ polkovnikov.ph nếu bạn nhấp vào save SOGL codepage encoded filenút, nó sẽ cung cấp cho bạn tệp 70 byte, bạn cũng có thể tải ở đó (mặc dù nút duyệt không ở xa một cách vô ý, khắc phục điều đó). SOGL sử dụng một bảng mã tùy chỉnh để làm điều đó. (bảng mã được liên kết trong tiêu đề của câu trả lời)
dzaima

26

Python 3, 200 195 191 190 186 byte

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)

-1 byte từ dylnan
-4 byte từ Rod

Đưa đầu vào vào stdin.

Hãy thử trực tuyến!

Giải trình:

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

Phiên bản lễ hội bổ sung!


Thay đổi dòng cuối cùng để for s in l:print(s,s*x,s)tiết kiệm một byte.
dyl Nam

Cảm ơn lời giải thích, Python trông kỳ quái với tôi ... lol
ArtisticPhoenix

1
@ArtisticPhoenix Trớ trêu thay, khi không được chơi gôn, Python là một trong những ngôn ngữ trông kỳ quái nhất.
jpmc26

18

Pyth , 113 107 byte

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

Hãy thử trực tuyến!

Không chính xác là phiên bản golf nhất ...


11
Không chơi gôn? Có lẽ. Chính xác? Đúng. FGITW? Chắc chắn rồi.
Bạch tuộc ma thuật Urn

Vâng, không phải là người chơi gôn nhất, đặc biệt là với một nhân vật dấu vết không cần thiết. : P
Erik the Outgolfer 23/12/17

15

JavaScript (ES6), 180 byte

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

Kiểm tra

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 byte

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


1
Bạn có thể lưu một vài ký tự bằng cách thay thế .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.bằng${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@KuilinLi Tôi sẽ phải giảm Nsau cuộc gọi đầu tiên r, nhưng nó hoạt động tốt.
darrylyeo

13

Than , 78 74 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 2 byte bằng cách đơn giản hóa cách in dây. Đã lưu 2 byte vì mã mới tự động chuyển đầu vào thành số nguyên. Giải trình:

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

In dây bằng cách lấy chuỗi .--.__, đúc nó thành chiều dài 9, sau đó lặp lại một lần cho mỗi lần nối, kết thúc bằng một lần cuối cùng .trước khi chuyển sang bắt đầu dòng tiếp theo cho bóng đèn.

F⪫()×Y⁻貫

Vòng qua một chuỗi các đầu nối: ()ở cuối, và Ys ở giữa.

M⁼ι)→

Di chuyển đúng một ký tự nếu đây là bóng đèn cuối cùng.

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

In phần thân của bóng đèn mà không di chuyển con trỏ.

  _ι_

In nắp của bóng đèn bao gồm cả đầu nối.

M⁺⁴⁼ι(→

Di chuyển đến điểm bắt đầu của bóng đèn tiếp theo (một ký tự phụ nếu đây là bóng đèn đầu tiên).


Đó là 74 ký tự, không phải byte.
polkovnikov.ph

@ polkovnikov.ph Than sử dụng một bảng mã tùy chỉnh , cho phép nó đếm từng ký tự dưới dạng một byte.
dzaima

13

VBA Excel, 224 207 205 byte

Chức năng cửa sổ ngay lập tức VBE ẩn danh nhận đầu vào từ phạm vi [A1]và đầu ra cho cửa sổ ngay lập tức VBE.

In các bóng đèn theo từng dòng, từ trên trái sang dưới phải

?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

Mẫu 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_       _)_
 [___]     [___]    [___]    [___]    [___]    [___]     [___]   
 /:' \     /:' \    /:' \    /:' \    /:' \    /:' \     /:' \   
|::   |   |::   |  |::   |  |::   |  |::   |  |::   |   |::   |  
\::.  /   \::.  /  \::.  /  \::.  /  \::.  /  \::.  /   \::.  /  
 \::./     \::./    \::./    \::./    \::./    \::./     \::./   
  '='       '='      '='      '='      '='      '='       '='    

-17 Byte nhờ @ YowE3k

-2 byte để thêm biến tạm thời b


2
Ôi tôi thích câu trả lời bằng ngôn ngữ macro phần mềm giấy tờ! Mặt khác, tôi thua VBA. 1
Οurous

1
(Bạn đã cho tôi đăng ký, để tôi có thể để lại nhận xét này!) Ngay : [Rept(B1,A1-2)]trước khi bắt đầu vòng lặp không được sử dụng.
YowE3K

@ YowE3K - Bạn nói đúng! Cảm ơn vì đã nắm bắt được điều đó - nó đã được sửa chữa
Taylor Scott

10

C,  279   278  272  262  259 byte

Cảm ơn @NieDzejkob vì đã lưu sáu byte!

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

Hãy thử trực tuyến!

Chưa được kiểm soát:

#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, tuyệt vời! (:
SilverWolf


9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 byte

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

Phiên bản dễ đọc để thử nghiệm:

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

Kiểm tra phiên bản rút gọn ở đây

Kiểm tra phiên bản có thể đọc được ở đây

CẬP NHẬT

Gói nó trong một chức năng,



2
Mẹo JavaScript cũ của việc sử dụng chữ số làm dấu phân cách cũng hoạt động tốt trong PHP, chỉ là bạn sẽ phải thoát \ trước chữ số phân cách, do đó sẽ chỉ tiết kiệm được 1 char. Bạn có thể lưu 2 ký tự khác bằng cách đặt các ký tự khoảng trắng thành một chuỗi lớn hơn, chứa biểu thức ở giữa dưới dạng mở rộng : $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork

@manatwork - cảm ơn vì mẹo được cập nhật
ArtisticPhoenix

1
@manatwork - Ngoài ra nếu tôi sử dụng một 9dấu phân cách thì không cần thoát, có lẽ điều này hoạt động với các số khác chỉ là không0
ArtisticPhoenix

1
Và một điều nữa là bạn có thể định nghĩa $r()hàm lambda là một hàm thông thường function r()(có thể ở cùng một vị trí, chức năng trong hàm là có thể). Bạn cần sửa lỗi phân tích chuỗi: " {r("")} "sẽ không hoạt động. Một -7 byte khác;)
7ochem

8

Java, 310 307 300 275 byte

Cảm ơn DevelopDeveloper đã chuyển đổi nó thành biểu thức lambda

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

Mở rộng:

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

Nhìn vào các cách ngắn hơn để nhân chuỗi và thấy rằng các luồng dài hơn đáng ngạc nhiên

Hãy thử trực tuyến!


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

@manatwork Cảm ơn, đã bỏ lỡ điều đó
phflack

2
@phflack tôi đã nhận nó xuống 290 nếu bạn sử dụng một biểu lamda
DevelopingDeveloper

1
@phflack Ngoài ra, OP nói nó chỉ cần phải trả lại String, không in nó vào giao diện điều khiển, vì vậy bạn có thể thả nó xuống 279 làm điều này
DevelopingDeveloper

1
@DevelopingDeveloper Cool, tôi cũng tìm thấy một cách để chơi golf j=#từ các vòng lặp
phflack

5

Sạch sẽ , 305 292 288 275 byte

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

Hãy thử trực tuyến!


3

Python 2 (PyPy) , 365 316 315 251 245 byte

-21 nhờ FlipTack

-43 nhờ vào lò nướng

-6 cảm ơn ông 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)

Hãy thử trực tuyến!




Tôi nghĩ rằng bạn đã quên cập nhật bytecount sau khi chỉnh sửa trong đề xuất cuối cùng.
NieDzejkob

1

Kotlin , 261 byte

{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()}}

Làm đẹp

{
    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()
    }
}

Kiểm tra

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

Dùng thử


1

Google Sheets, 190 byte

Hàm bảng tính ẩn danh nhận đầu vào từ phạm vi A1và đầu ra cho ô gọi

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.