[NOEL'İN BURADA YASAL UYARI]


86

Modlara dikkat edin, eğer başlık adalet yapmazsa, neye göre değiştirelim, komik olduğunu düşündüm.


Bu Noel sezonu için ışıkları asmakla görevlisiniz ve aileniz mutlu bir Noel olması için evinize en az 2 Noel ışığı asmanız gerektiğine karar verdi. Bu yüzden, bir zorluk verildiğinde 1 < n, aşağıdaki özelliklere göre asacağınız ilgili Noel ışıklarının sayısını çıkarıp vermeniz ...


İşte temel bir Noel ışığının yapısı:

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

Belirsiz olan tek kısım, zincirdeki ışığın nereye indiğine bağlı olarak bağlantı büyük ölçüde farklılık gösterecek olan soru işaretidir.

Zincirdeki ilk ışık için aşağıdakileri yapmanız gerekir:

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

Zincirdeki son ışık için aşağıdakileri yapmanız gerekir:

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

Ve ortadaki bütün ışıklar için:

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

Örnek:

N = 2 :

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

N = 6 :

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

Kredi

ASCII-Art şuradan alınmıştır: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Bu sitedeki içeriğin yaklaşık% 40'ından sorumlu olan "jgs" adlı bir kullanıcı tarafından geliştirilmiştir.


kurallar

  • Sondaki boşluklar sondaki yeni satırla aynıdır.
  • İlk ve son ampul arasında, zincirin geri kalanından 1 boşluk daha var.
  • Girdi olarak sadece 1 tamsayı alabilir ve çıktı bir dize olmalı, diziler olmamalıdır.
  • Programınız 2'den küçük değerler için tanımsız fonksiyonlara sahip olabilir.

Bu , en düşük bayt sayısı kazanır.


Sanbox posta bağlantısı burada.


Dizeler, karakter dizilerinin eş anlamlılarıysa?
Büyük

36
Bu temel yılbaşı ışık saçma el bombası gibi görünüyor :)
nicael

18
@nicael Alternatif zorluk açıklaması: Noel Baba bu yıl kötü çocuklara zarar veriyor ve her yaramazlık için çocuk canlı el bombası alacak. Oldukça düşünceli bir hediye sağlayıcısı olan Santa, el bombalarını birbirine bağladı, böylece dünyanın kötü çocukları kazayla onları kaybetmeyecek!
Sihirli Ahtapot Urn

@ MagicOctopusUrn Uhm, solda ve sağda 3 boşluk, aksi takdirde 2 boşluk? Keşke aralık tutarlı olsaydı. Bu çirkin bir el bombası kemeri.
polkovnikov.ph

1
@ polkovnikov.ph ya bu parantezlerin üzerinde (ya da tuhaf görünen) parantezlerin üzerinde ya da parantezlerin içinde değildi. IMO bu, en iyi görünen (en çok golf oynamak mümkün olmasa da) yaklaşımdır.
dzaima

Yanıtlar:


35

SOGL V0.12 , 73 71 70 66 bayt

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

Burada dene!

Kömür cevabı(YYY) gibi bir dize üzerinde döngü tarafından -4 bayt

2'nin ele alınması gerekmiyorsa 63 bayt işe yarar: /


9
[zihin şişmiş.]
Robert Harvey,

2
Bu kesinlikle saçma. (Özellikle bir telefonda yapıldıysa) +1
Joe

10
Başlatılmamış bir hafıza yazdırdığımda, bu kodu daha önce gördüğümden% 90 eminim.
Nic Hartley

Bu 113 bayt, 70 karakter.
polkovnikov.ph

@ polkovnikov.ph save SOGL codepage encoded filedüğmesini tıklarsanız, size oraya da yükleyebileceğiniz 70 baytlık bir dosya verir (göz at düğmesinin istenmeden uzak olmasına rağmen, bunu düzeltir ). SOGL bunu yapmak için özel bir kod sayfası kullanır. (kod sayfası, cevabın başlığında bulunur)
dzaima

26

Python 3, 200 195 191 190 186 bayt

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'dan -1 bayt Çubuk'tan
-4 bayt

Stdin'de girdi alır.

Çevrimiçi deneyin!

Açıklama:

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

Ek Festival Versiyonu!


for s in l:print(s,s*x,s)Bir bayttan tasarruf etmek için son satırın değiştirilmesi .
dylnan

Açıklama için teşekkürler, Python bana tuhaf geliyor ... lol
ArtisticPhoenix

1
@ ArtistikPhoenix İronik olarak, golf oynamadığı zaman, Python en tuhaf görünümlü dillerden biridir.
jpmc26


15

JavaScript (ES6), 180 bayt

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

Ölçek

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 bayt

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İlk çağrıdan sonra azaltmak zorunda kaldım r, ancak bu iyi sonuç veriyor .
darrylyeo

13

Kömür , 78 74 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: Kablonun yazdırılma şeklini basitleştirerek 2 bayt kaydedildi. 2 byte kaydedildi, çünkü yeni kod girişi otomatik olarak tamsayıya aktarıyor. Açıklama:

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

Kabloyu, ipi alarak, .--.__uzunluğu 9'a kadar kalıplayarak, ardından her bir birleşim için bir kez tekrarlayarak ., ampuller için bir sonraki çizginin başlangıcına geçmeden önce bir finalle bitirerek yazdırın .

F⪫()×Y⁻貫

: Bağlantıların bir dize üzerinde döngü (ve )uçlarında ve Yortada s.

M⁼ι)→

Bu son ampul ise, bir karakter sağa hareket ettirin.

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

İmleci hareket ettirmeden ampulün gövdesini yazdırın.

  _ι_

Konektör dahil ampulün kapağını yazdırın.

M⁺⁴⁼ι(→

Bir sonraki ampulün başlangıcına hareket edin (bu ilk ampul ise ekstra bir karakter).


Bu 74 karakter, bayt değil.
polkovnikov.ph

@ polkovnikov.ph Kömür, her karakteri tek bir bayt olarak saymasına izin veren özel bir kod sayfası kullanır .
dzaima

13

Excel VBA, 224 207 205 Bayt

Menzilden girdi alan [A1]ve VBE acil durum penceresine çıkan anonim VBE acil durum pencere işlevi .

Ampulleri, satır başından sola, aşağıdan sağa doğru yazdırır

?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

Örnek G / Ç

[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 Bayt @ YowE3k sayesinde

Geçici değişkenin eklenmesi için -2 bayt b


2
Ben evrak yazılımı makro dillerinde cevapları seviyorum! Öte yandan VBA'ya kaybettim. +1
17'de

1
(Benim kaydolmamı sağladın, bu yüzden bu yorumu bırakabilirim!) : [Rept(B1,A1-2)]Döngünün başlangıcından hemen önce kullanılmaz.
YowE3K

@ YowE3K - Haklısın! Bunu yakaladığın için teşekkürler - düzeltildi
Taylor Scott

10

C,  279   278  272  262  259 bayt

Altı bayt tasarrufu için @NieDzejkob'a teşekkürler!

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

Çevrimiçi deneyin!

unrolled:

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


9

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

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

Test için okunabilir sürü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);
}

Küçültülmüş sürümü buradan kontrol edin

Burada okunabilir versiyonu kontrol et

GÜNCELLEME

Bir fonksiyona sarılmış,



2
Ayırıcı olarak basamak kullanmanın eski JavaScript ipucu da PHP'de iyi çalışır \ , ayırıcı basamaktan önce kaçmak zorunda kalacağınız için sadece 1 karakter kaydeder. Sen genişleme olarak ortada ifadesini içeren, aynı büyük dizesinin uzay karakterler kısmını yaparak başka 2 karakter kaydedebilirsiniz: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
Manatwork

@ manatwork - bahşiş için teşekkürler Güncelleme
SanatsalPhoenix

1
@manatwork - ayrıca bir 9sınırlayıcı olarak bir kaçış gerektirmezsem de kullanırsam, muhtemelen bu diğer numaralarla da işe yaramaz0
ArtisticPhoenix

1
Bir diğeri ise $r()lambda fonksiyonunu düzenli olarak tanımlayabilmenizdir function r()(aynı yerde olabilir, fonksiyonda fonksiyon mümkündür). Dize ayrıştırma düzeltmeniz gerekir: " {r("")} "işe yaramaz. Başka bir -7 bayt;)
7:

8

Java, 310 307 300 275 bayt

Lambda ifadesine dönüştürdüğü için DevelopingDeveloper'a teşekkürler

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

Expanded:

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

Dizeleri çoğaltmanın daha kısa yollarını araştırmak ve akımların şaşırtıcı derecede daha ayrıntılı olduğunu bulmak

Çevrimiçi deneyin!


2
String o="";+ o+=" .";=String o=" .";
yapay çalışma

@ manatwork Teşekkürler, bunu özledim
phflack


1
@phflack Ayrıca OP sadece konsola yazmyorsun, Dize dönmek gerektiğini kaydetti, bu yüzden için aşağı bırakabilirsiniz bunu 279
DevelopingDeveloper

1
Gelişen Gelişen Cool, aynı zamanda j=#döngüler için golf
oynamak

5

Temiz , 305 292 288 275 bayt

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

Çevrimiçi deneyin!


3

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

-21 FlipTack sayesinde

-43 sayesinde OVS

-6 Bay Xcoder'a teşekkürler

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)

Çevrimiçi deneyin!




Son öneride düzenleme yaptıktan sonra bayt sayısını güncellemeyi unuttuğunuzu düşünüyorum.
NieDzejkob,

1

Kotlin , 261 bayt

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

beautified

{
    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çek

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 Sayfaları, 190 Bayt

Aralıktan girdi alan A1ve çağıran hücreye çıktı alan adsız çalışma işlevi

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.