[ZRZECZENIE SIĘ ŚWIĄTECZNYM TEMATEM]

86

Uwaga dla modów, jeśli tytuł nie oddaje sprawiedliwości, zmień go na cokolwiek, myślałem, że to zabawne.


Twoim zadaniem jest powieszenie lampek na ten sezon świąteczny, a twoja rodzina zdecydowała, że ​​aby było wesołych świąt, musisz zawiesić co najmniej 2 lampki świąteczne w domu. Twoim wyzwaniem jest podanie 1 < nodpowiedniej liczby lampek choinkowych, które powiesisz zgodnie z następującymi specyfikacjami ...


Oto struktura podstawowego światła bożonarodzeniowego:

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

Jedyną niepewną częścią jest znak zapytania, ponieważ w zależności od tego, gdzie światło wyląduje w łańcuchu, połączenie będzie się znacznie różnić.

W przypadku pierwszego światła w łańcuchu musisz wygenerować:

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

Aby uzyskać ostatnie światło w łańcuchu, musisz wygenerować:

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

I dla wszystkich świateł w środku:

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

Przykład:

N = 2 :

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

N = 6 :

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

Kredyt

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

Został opracowany przez użytkownika o nazwie „jgs”, który jest odpowiedzialny za około 40% treści w tej witrynie.


Zasady

  • Końcowe spacje są w porządku, to samo z końcowym znakiem nowej linii.
  • Jest jeszcze 1 miejsce pomiędzy pierwszą i ostatnią żarówką od reszty łańcucha.
  • Jako dane wejściowe możesz wziąć tylko 1 liczbę całkowitą, a wynik MUSI być ciągiem, bez tablic.
  • Twój program może mieć niezdefiniowane funkcje dla wartości mniejszych niż 2.

Jest to , wygrywa najmniej bajtów.


Link do posta Sanbox tutaj.

Urna Magicznej Ośmiornicy
źródło
Co jeśli ciągi są synonimami tablic znaków?
Οurous
36
To podstawowe świąteczne światełko wygląda absurdalnie podobnie do granatu :)
nicael
18
@nicael Alternatywny opis wyzwania: Święty Mikołaj rozprawia się ze złymi dziećmi w tym roku, a za każdy popełniony niegrzeczny czyn dziecko otrzyma granat ręczny na żywo. Będąc troskliwym dostawcą prezentów, Mikołaj związał granaty razem, aby złe dzieciaki świata nie zgubiły ich przypadkiem!
Magic Octopus Urn
@MagicOctopusUrn Uhm, 3 spacje po lewej i prawej stronie oraz 2 spacje w przeciwnym razie? Chciałbym, żeby odstępy były spójne. To brzydki pas granatu.
polkovnikov.ph
1
@ polkovnikov.ph albo to albo albo kropki nad nawiasami (co wygląda dziwnie), albo nawiasy nie są nawiasami. IMO jest to najlepiej wyglądające (choć nie najbardziej golfowe) podejście.
dzaima,

Odpowiedzi:

35

SOGL V0.12 , 73 71 70 66 bajtów

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

Wypróbuj tutaj!

-4 bajty, zapętlając ciąg znaków (YYY)jak w odpowiedzi na węgiel drzewny

63 bajty działałyby, gdyby nie trzeba było obsługiwać 2: /

dzaima
źródło
9
[umysł oszołomiony.]
Robert Harvey
2
To jest absolutnie śmieszne. (Zwłaszcza jeśli dokonano tego na telefonie.) +1
Joe
10
Jestem w 90% pewien, że widziałem już dokładnie ten kod, od kiedy wydrukowałem trochę niezainicjowanej pamięci.
Nic Hartley,
To 113 bajtów, 70 znaków.
polkovnikov.ph
@ polkovnikov.ph, jeśli klikniesz save SOGL codepage encoded fileprzycisk, otrzymasz plik 70-bajtowy, który możesz tam również załadować (chociaż przycisk przeglądania jest nieinicjalnie odległy, to naprawia). SOGL używa do tego niestandardowej strony kodowej. (strona kodowa znajduje się w nagłówku odpowiedzi)
dzaima
26

Python 3, 200 195 191 190 186 bajtów

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 bajt z dylnan
-4 bajty z Rod

Pobiera dane wejściowe na standardowe wejście.

Wypróbuj online!

Wyjaśnienie:

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

Dodatkowa świąteczna wersja!

pizzapanty184
źródło
Zmiana ostatniej linii w celu for s in l:print(s,s*x,s)zapisania bajtu.
dylnan,
Dzięki za wyjaśnienie, Python wygląda dla mnie dziwnie ... lol
ArtisticPhoenix
1
@ArtisticPhoenix Jak na ironię, Python jest jednym z najmniej dziwacznie wyglądających języków.
jpmc26,
18

Pyth , 113 107 bajtów

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

Wypróbuj online!

Niezupełnie najbardziej golfowa wersja ...

Leaky Nun
źródło
11
Nie golfa? Może. Poprawny? Tak. FGITW? Zdecydowanie.
Magic Octopus Urn
Tak, nie najbardziej golfowy, zwłaszcza z niepotrzebną postacią. : P
Erik the Outgolfer,
15

JavaScript (ES6), 180 bajtów

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

Test

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>

edc65
źródło
13

JavaScript (ES6), 204 201 196 194 192 bajtów

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

darrylyeo
źródło
1
Możesz uratować kilka postaci, zastępując .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.je${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li,
@ KuilinLi musiałbym się zmniejszyć Npo pierwszym wezwaniu do r, ale to działa dobrze.
darrylyeo
13

Węgiel drzewny , 78 74 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 2 bajty, upraszczając sposób drukowania okablowania. Zapisano 2 bajty, ponieważ nowy kod automatycznie rzutuje dane wejściowe na liczby całkowite. Wyjaśnienie:

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

Wydrukuj okablowanie, biorąc sznurek .--.__, formując go do długości 9, a następnie powtarzając go raz dla każdego połączenia, kończąc końcem .przed przejściem do początku następnej linii żarówek.

F⪫()×Y⁻貫

Pętla nad ciągiem łączników: (i )na końcach, a Yna środku.

M⁼ι)→

Przesuń w prawo o jedną postać, jeśli jest to ostatnia żarówka.

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

Wydrukuj korpus żarówki bez poruszania kursorem.

  _ι_

Wydrukuj nasadkę żarówki wraz ze złączem.

M⁺⁴⁼ι(→

Przejdź na początek następnej żarówki (dodatkowa postać, jeśli jest to pierwsza żarówka).

Neil
źródło
To 74 znaki, a nie bajty.
polkovnikov.ph
@ polkovnikov.ph Węgiel drzewny używa niestandardowej strony kodowej , dzięki czemu może liczyć każdy znak jako pojedynczy bajt.
dzaima,
13

Excel VBA, 224 207 205 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu [A1]i wyjścia do bezpośredniego okna VBE.

Drukuje żarówki linia po linii, od górnego lewego do dolnego prawego

?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

Próbki we / wy

[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 Bajtów dzięki @ YowE3k

-2 bajty dla dodania zmiennej tymczasowej b

Taylor Scott
źródło
2
Ooch Uwielbiam odpowiedzi w językach makro oprogramowania biurowego! Z drugiej strony przegrałem z VBA. +1
bolesny
1
(Zmusiłeś mnie do zarejestrowania się, abym mógł zostawić ten komentarz!) : [Rept(B1,A1-2)]Tuż przed rozpoczęciem pętli nie jest używany.
YowE3K
@ YowE3K - Masz rację! Dzięki, że złapałeś
Taylor Scott
10

C  279   278  272  262  259 bajtów

Dzięki @NieDzejkob za zapisanie sześciu bajtów!

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

Wypróbuj online!

Rozwinięty:

#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));
}
Steadybox
źródło
1
C, wspaniale! (:
SilverWolf,
272 bajty
NieDzejkob
9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 bajtów

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

Czytelna wersja do testowania:

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

Sprawdź zminimalizowaną wersję tutaj

Sprawdź czytelną wersję tutaj

AKTUALIZACJA

Zawinął to w funkcję,

Artystyczny Feniks
źródło
2
Stara wskazówka JavaScript dotycząca używania cyfry jako separatora działa również dobrze w PHP, tylko że musisz uciec \ przed cyfrą separatora, więc zaoszczędzisz tylko 1 znak. Można zapisać kolejne 2 znaki uzależniając spacjami część tej samej większego łańcucha, zawierający wyraz w środku jak rozszerzenie: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork
@manatwork - dzięki za podpowiedź Zaktualizowano
ArtisticPhoenix
1
@manatwork - także jeśli użyję znaku 9jako separatora, nie trzeba używać znaku ucieczki, prawdopodobnie działa to z innymi liczbami, po prostu nie0
ArtisticPhoenix
1
Kolejnym jest to, że można zdefiniować funkcję $r()lambda jako regularną function r()(może znajdować się w tym samym miejscu, funkcja w funkcji jest możliwa). Musisz naprawić parsowanie ciągu: " {r("")} "nie będzie działać. Kolejne -7 bajtów;)
7ochem
8

Java, 310 307 300 275 bajtów

Dzięki DevelopingDeveloper za przekształcenie go w wyrażenie 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;};

Rozszerzony:

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

Patrząc na krótsze sposoby pomnożenia łańcuchów i odkryłem, że strumienie są zaskakująco bardziej szczegółowe

Wypróbuj online!

phflack
źródło
2
String o="";+ o+=" .";=String o=" .";
manatwork
@manatwork Dzięki, przegapiłem
phflack
2
@phflack Zrobiłem to do 290, jeśli używasz wyrażenia lamda
DevelopingDeveloper
1
@phflack OP powiedział również, że musi tylko zwrócić ciąg, a nie wydrukować go na konsoli, abyś mógł to zrobić
DevelopingDeveloper
1
@DevelopingDeveloper Fajnie, znalazłem też sposób na grę w golfa j=#z pętli for
phflack
5

Czysty , 305 292 288 275 bajtów

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

Wypróbuj online!

Obrzydliwe
źródło
3

Python 2 (PyPy) , 365 316 315 251 245 bajtów

-21 dzięki FlipTack

-43 dzięki ovs

-6 dzięki 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)

Wypróbuj online!

FantaC
źródło
1
-21 bajtów
FlipTack
1
245 bajtów .
Pan Xcoder,
Myślę, że zapomniałeś zaktualizować bytecount po edycji w ostatniej sugestii.
NieDzejkob
1

Kotlin , 261 bajtów

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

Upiększony

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

Test

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

jrtapsell
źródło
1

Arkusze Google, 190 bajtów

Anonimowa funkcja arkusza roboczego, która pobiera dane wejściowe z zakresu A1i danych wyjściowych do komórki wywołującej

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Taylor Scott
źródło