[DISCLAIMER TEMA NATAL DI SINI]


86

Catatan untuk mod, jika judulnya tidak adil, ubah ke apa pun, saya pikir itu lucu.


Anda ditugaskan menggantung lampu untuk musim Natal ini, dan keluarga Anda telah memutuskan bahwa untuk itu menjadi Natal yang meriah, Anda harus menggantung setidaknya 2 lampu Natal di rumah Anda. Jadi, tantangan Anda adalah, mengingat angka 1 < n, menampilkan jumlah lampu Natal yang sesuai yang akan Anda gantung sesuai dengan spesifikasi berikut ...


Berikut adalah struktur lampu Natal dasar:

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

Satu-satunya bagian yang tidak pasti adalah tanda tanya, karena tergantung di mana cahaya mendarat di rantai, koneksi akan sangat berbeda.

Untuk cahaya pertama dalam rantai, Anda harus mengeluarkan:

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

Untuk lampu terakhir dalam rantai, Anda harus mengeluarkan:

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

Dan untuk semua lampu di tengah:

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

Contoh:

N = 2 :

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

N = 6 :

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

Kredit

ASCII-Art diambil dari: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Ini dikembangkan oleh pengguna bernama "jgs", yang bertanggung jawab atas sekitar 40% konten di situs itu.


Aturan

  • Ruang trailing baik-baik saja, sama dengan garis baru tambahan.
  • Ada 1 lebih banyak ruang antara bohlam pertama dan terakhir dari sisa rantai.
  • Anda hanya dapat mengambil 1 integer sebagai input, dan output HARUS berupa string, tanpa array.
  • Program Anda mungkin memiliki fungsi yang tidak ditentukan untuk nilai kurang dari 2.

Ini adalah , kemenangan byte-count terendah.


Tautan pos Sanbox di sini.


Bagaimana jika string adalah sinonim untuk array karakter?
Surous

36
Cahaya Natal dasar itu terlihat sangat mirip dengan granat :)
nicael

18
@nicael Deskripsi tantangan alternatif: Santa menindak anak-anak nakal tahun ini, dan untuk setiap perbuatan nakal yang dilakukan anak akan menerima granat tangan hidup. Sebagai pemberi hadiah yang bijaksana, Santa telah mengikat granat sehingga anak-anak jahat di dunia tidak akan kehilangan mereka secara tidak sengaja!
Magic Gurita Guci

@ MagicOctopusUrn Uhm, 3 spasi di kiri dan kanan dan 2 spasi sebaliknya? Saya berharap spasi konsisten. Ini adalah sabuk granat jelek.
polkovnikov.ph

1
@ polkovnikov.ph entah itu, atau titik di atas tanda kurung (yang terlihat aneh), atau tanda kurung tidak menjadi tanda kurung. IMO ini adalah pendekatan yang tampak terbaik (meskipun bukan yang paling golf).
dzaima

Jawaban:


35

SOGL V0.12 , 73 71 70 66 byte

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

Coba Di Sini!

-4 bytes dengan mengulangi string seperti (YYY)seperti jawaban Charcoal

63 byte akan berfungsi jika 2 tidak perlu ditangani: /


9
[mind blown.]
Robert Harvey

2
Ini benar-benar konyol. (Terutama jika itu dilakukan pada telepon.) +1
Joe

10
Saya 90% yakin saya telah melihat kode yang tepat ini sebelumnya, dari saat saya mencetak beberapa memori yang tidak diinisialisasi.
Nic Hartley

Itu 113 byte, 70 karakter.
polkovnikov.ph

@ polkovnikov.ph jika Anda mengklik save SOGL codepage encoded filetombolnya, ia memberi Anda file 70 byte, yang dapat Anda muat di sana juga (walaupun tombol telusuri tidak jauh dari situ, perbaiki itu). SOGL menggunakan codepage khusus untuk melakukan itu. (codepage ini ditautkan dalam tajuk jawaban)
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 dari dylnan
-4 byte dari Rod

Mengambil input pada stdin.

Cobalah online!

Penjelasan:

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

Versi Perayaan Tambahan!


Mengubah baris terakhir untuk for s in l:print(s,s*x,s)menghemat satu byte.
dylnan

Terima kasih atas penjelasannya, Python terlihat aneh bagi saya ... lol
ArtisticPhoenix

1
@ArtisticPhoenix Ironisnya, ketika tidak sedang bermain golf, Python adalah salah satu bahasa yang tampak paling aneh.
jpmc26


15

JavaScript (ES6), 180 byte

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

Uji

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
Anda dapat menyimpan beberapa karakter dengan menggantinya .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.dengan${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@ KuilinLi saya harus mengurangi Nsetelah panggilan pertama r, tapi itu berhasil.
darrylyeo

13

Arang , 78 74 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte dengan menyederhanakan cara kabel dicetak. Disimpan 2 byte karena kode baru secara otomatis memasukkan input ke integer. Penjelasan:

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

Cetak kabel dengan mengambil tali .--.__, cetak hingga panjang 9, lalu ulangi sekali untuk setiap sambungan, akhiri dengan final .sebelum pindah ke awal baris berikutnya untuk bohlam.

F⪫()×Y⁻貫

Ulangi rangkaian konektor: (dan )di ujung, dan Ys di tengah.

M⁼ι)→

Pindahkan satu karakter ke kanan jika ini bohlam terakhir.

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

Cetak badan bohlam tanpa menggerakkan kursor.

  _ι_

Cetak tutup bohlam termasuk konektornya.

M⁺⁴⁼ι(→

Pindah ke awal bohlam berikutnya (karakter tambahan jika ini bohlam pertama).


Itu 74 karakter, bukan byte.
polkovnikov.ph

@ polkovnikov.ph Charcoal menggunakan codepage khusus , yang memungkinkannya untuk menghitung setiap karakter sebagai satu byte.
dzaima

13

Excel VBA, 224 207 205 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari jarak [A1]dan keluaran ke jendela langsung VBE.

Mencetak umbi baris demi baris, dari kiri atas ke kanan bawah

?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

Contoh 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 Bytes berkat @ YowE3k

-2 byte untuk penambahan variabel sementara b


2
Ooh saya suka jawaban dalam bahasa makro dokumen-perangkat lunak! Di sisi lain saya kalah dari VBA. +1
Οurous

1
(Anda membuat saya mendaftar, supaya saya dapat meninggalkan komentar ini!) : [Rept(B1,A1-2)]Tepat sebelum awal loop tidak digunakan.
YowE3K

@ YowE3K - Anda benar! Terima kasih telah menangkapnya - yang telah dikoreksi
Taylor Scott

10

C,  279   278  272  262  259 byte

Terima kasih kepada @NieDzejkob karena telah menghemat enam 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));}

Cobalah online!

Belum dibuka:

#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, luar biasa! (:
SilverWolf


9

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

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

Versi yang dapat dibaca untuk pengujian:

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

Periksa versi yang diperkecil di sini

Periksa versi yang dapat dibaca di sini

MEMPERBARUI

Membungkusnya dalam suatu fungsi,



2
Tip JavaScript lama menggunakan digit sebagai pembatas berfungsi dengan baik di PHP juga, hanya saja Anda harus melarikan diri \ sebelum digit pemisah, jadi hanya akan menghemat 1 karakter. Anda dapat menyimpan lain 2 chars dengan membuat karakter ruang bagian dari string yang lebih besar yang sama, yang berisi ekspresi di tengah ekspansi: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork

@manatwork - terima kasih atas tipnya Diperbarui
ArtisticPhoenix

1
@manatwork - juga jika saya menggunakan 9sebagai pembatas tidak diperlukan melarikan diri, mungkin ini bekerja dengan nomor lain tidak0
ArtisticPhoenix

1
Dan yang lain adalah bahwa Anda dapat mendefinisikan $r()fungsi lambda sebagai reguler function r()(bisa di tempat yang sama, fungsi dalam fungsi dimungkinkan). Anda perlu memperbaiki penguraian string: " {r("")} "tidak akan berfungsi. Lain -7 byte;)
7ochem

8

Java, 310 307 300 275 byte

Terima kasih kepada DevelopingDeveloper karena mengubahnya menjadi ekspresi 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;};

Diperluas:

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

Melihat ke cara yang lebih pendek untuk melipatgandakan string, dan menemukan bahwa aliran secara mengejutkan lebih bertele-tele

Cobalah online!


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

@manatwork Terima kasih, melewatkannya
phflack

2
@ phflack Saya mendapatkannya hingga 290 jika Anda menggunakan ekspresi lamda
DevelopingDeveloper

1
@phflack Juga, OP mengatakan itu hanya perlu mengembalikan String, bukan mencetaknya ke konsol, sehingga Anda bisa drop ke 279 melakukan ini
DevelopingDeveloper

1
@DevelopingDeveloper Keren, saya juga menemukan cara untuk bermain golf j=#untuk loop
phflack

5

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

Cobalah online!


3

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

-21 Berkat FlipTack

-43 Berkat ovs

-6 terima kasih kepada Tn. 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)

Cobalah online!




Saya pikir Anda lupa memperbarui bytecount setelah mengedit saran terakhir.
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()}}

Yg diperindahkan

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

Uji

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 Sheets, 190 Bytes

Fungsi lembar kerja anonim yang mengambil input dari jangkauan A1dan keluaran ke sel panggilan

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.