[WEIHNACHTSTHEMA HAFTUNGSAUSSCHLUSS HIER]


86

Hinweis für Mods, wenn der Titel nicht stimmt, ändere ihn auf was auch immer, ich fand es lustig.


Du hast die Aufgabe, die Lichter für diese Weihnachtszeit aufzuhängen, und deine Familie hat beschlossen, dass du mindestens zwei Weihnachtslichter an deinem Haus aufhängen musst, damit es ein frohes Weihnachtsfest wird. Ihre Herausforderung besteht also darin, bei einer bestimmten Anzahl 1 < ndie entsprechende Anzahl von Weihnachtslichtern auszugeben, die Sie gemäß den folgenden Spezifikationen aufhängen werden ...


Hier ist die Struktur eines grundlegenden Weihnachtslichts:

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

Der einzige ungewisse Teil ist das Fragezeichen. Je nachdem, wo das Licht in der Kette landet, unterscheidet sich die Verbindung erheblich.

Für das erste Licht in der Kette müssen Sie Folgendes ausgeben:

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

Für das letzte Licht in der Kette müssen Sie Folgendes ausgeben:

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

Und für alle Lichter in der Mitte:

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

Beispiel:

N = 2 :

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

N = 6 :

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

Kredit

ASCII-Art wurde entnommen aus: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Es wurde von einem Benutzer namens "jgs" entwickelt, der für rund 40% des Inhalts dieser Website verantwortlich ist.


Regeln

  • Nachgestellte Leerzeichen sind in Ordnung, genau wie eine nachgestellte Newline.
  • Zwischen der ersten und der letzten Glühlampe des Restes der Kette ist 1 Platz mehr.
  • Sie können nur 1 Ganzzahl als Eingabe verwenden, und die Ausgabe MUSS eine Zeichenfolge sein, keine Arrays.
  • Ihr Programm verfügt möglicherweise über undefinierte Funktionen für Werte unter 2.

Dies ist , die niedrigste Anzahl an Bytes gewinnt.


Sanbox post link hier.


Was ist, wenn Strings Synonyme für Arrays von Zeichen sind?
Urous

36
Das grundlegende Weihnachtslicht sieht lächerlich ähnlich wie die Granate :)
Nicael

18
@nicael Alternative Herausforderungsbeschreibung: Der Weihnachtsmann geht in diesem Jahr hart gegen böse Kinder vor und für jede böse Tat erhält das Kind eine Handgranate. Als nachdenklicher Anbieter von Geschenken hat der Weihnachtsmann die Granaten zusammengebunden, damit die bösen Kinder der Welt sie nicht versehentlich verlieren!
Magic Octopus Urn

@MagicOctopusUrn Ähm, 3 Leerzeichen links und rechts und 2 Leerzeichen sonst? Ich wünschte, der Abstand wäre konsistent. Dies ist ein hässlicher Granatengürtel.
polkovnikov.ph

1
@ polkovnikov.ph entweder das oder die Punkte über den Klammern (was seltsam aussieht) oder die Klammern nicht in Klammern. IMO ist dies der am besten aussehende (wenn auch nicht der am besten Golf spielende) Ansatz.
Dzaima

Antworten:


35

SOGL V0.12 , 73 71 70 66 Bytes

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

Probieren Sie es hier aus!

-4 Bytes durch Schleifen über einen String (YYY)wie die Charcoal-Antwort

63 Bytes würden funktionieren, wenn 2 nicht behandelt werden müssten: /


9
[Geist geblasen.]
Robert Harvey

2
Das ist absolut lächerlich. (Vor allem, wenn es über ein Telefon gemacht wurde.) +1
Joe

10
Ich bin mir zu 90% sicher, dass ich diesen genauen Code schon einmal gesehen habe, als ich nicht initialisierten Speicher gedruckt habe.
Nic Hartley

Das sind 113 Bytes, 70 Zeichen.
polkovnikov.ph

@ polkovnikov.ph Wenn Sie auf die save SOGL codepage encoded fileSchaltfläche klicken , erhalten Sie eine 70-Byte-Datei, die Sie auch dort laden können (auch wenn die Schaltfläche zum Durchsuchen nicht intuitiv erreichbar ist und das behebt). SOGL verwendet dazu eine benutzerdefinierte Codepage. (Die Codepage ist im Header der Antwort
verlinkt

26

Python 3, 200 195 191 190 186 Bytes

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 von dylnan
-4 Byte von Rod

Übernimmt die Eingabe für stdin.

Probieren Sie es online!

Erläuterung:

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

Zusätzliche festliche Version!


Ändern Sie die letzte Zeile, um for s in l:print(s,s*x,s)ein Byte zu speichern.
Dylnan

Danke für die Erklärung, Python sieht für mich bizarr aus ... lol
ArtisticPhoenix

1
@ArtisticPhoenix Ironischerweise ist Python eine der am wenigsten bizarr aussehenden Sprachen, wenn man nicht Golf spielt.
jpmc26


15

JavaScript (ES6), 180 Byte

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

Prüfung

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 Bytes

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


1
Sie können einige Zeichen speichern, indem Sie sie .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.durch${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@KuilinLi Ich müsste Nnach dem ersten Anruf zu dekrementieren r, aber das klappt prima .
darrylyeo

13

Kohle , 78 74 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 2 Bytes gespart, indem die Art und Weise, wie die Verkabelung gedruckt wird, vereinfacht wird. 2 Byte gespart, da der neue Code die Eingabe automatisch in eine Ganzzahl umwandelt. Erläuterung:

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

Drucken Sie die Verkabelung aus, indem Sie die Schnur nehmen .--.__, sie auf Länge 9 formen und sie dann für jede Verbindung einmal wiederholen und mit einem Finale abschließen, .bevor Sie zum Beginn der nächsten Zeile für die Lampen übergehen.

F⪫()×Y⁻貫

Schleife über eine Reihe von Anschlüssen: (und )an den Enden und Ys in der Mitte.

M⁼ι)→

Bewegen Sie sich ein Zeichen nach rechts, wenn dies die letzte Glühbirne ist.

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

Drucken Sie den Körper der Glühbirne, ohne den Cursor zu bewegen.

  _ι_

Bedrucken Sie den Sockel der Glühbirne mit dem Stecker.

M⁺⁴⁼ι(→

Gehen Sie zum Anfang der nächsten Glühbirne (ein zusätzliches Zeichen, wenn dies die erste Glühbirne ist).


Das sind 74 Zeichen, keine Bytes.
polkovnikov.ph

@ polkovnikov.ph Charcoal verwendet eine benutzerdefinierte Codepage , mit der jedes Zeichen als einzelnes Byte gezählt werden kann.
Dzaima

13

Excel VBA, 224 207 205 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich [A1]und Ausgaben in das VBE-Direktfenster übernimmt .

Druckt die Lampen zeilenweise von links oben nach rechts unten

?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

Beispiel-E / A

[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 dank @ YowE3k

-2 Bytes für das Hinzufügen einer temporären Variablen b


2
Oh, ich liebe Antworten in Papierkram-Software-Makrosprachen! Andererseits habe ich gegen VBA verloren. +1
Οurous

1
(Du hast mich dazu gebracht, dich anzumelden, damit ich diesen Kommentar hinterlassen kann!) Das : [Rept(B1,A1-2)]kurz vor dem Start der Schleife wird nicht verwendet.
YowE3K

@ YowE3K - Du hast recht! Vielen Dank, dass Sie das abgefangen haben - es wurde korrigiert
Taylor Scott

10

C  279   278  272  262  259 Bytes

Vielen Dank an @NieDzejkob für das Speichern von sechs Bytes!

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

Probieren Sie es online!

Abgerollt:

#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, wunderbar! (:
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);}

Lesbare Version zum Testen:

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

Überprüfen Sie die verkleinerte Version hier

Überprüfen Sie die lesbare Version hier

AKTUALISIEREN

Hüllte es in eine Funktion,



2
Der alte JavaScript-Tipp , Digit als Trennzeichen zu verwenden, funktioniert auch in PHP einwandfrei, nur dass Sie \ das Zeichen vor der Trennziffer entfernen müssen, um nur 1 Zeichen zu sparen. Sie können , indem den Leerzeichen Teil der gleichen größeren Zeichenfolge, mit dem Ausdruck in der Mitte als Erweiterung noch 2 Zeichen sparen: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
Handarbeit

@manatwork - danke für den Tipp Aktualisiert
ArtisticPhoenix

1
@manatwork - auch wenn ich ein 9als Trennzeichen benutze , wird kein Escapezeichen benötigt, wahrscheinlich funktioniert das mit anderen Nummern einfach nicht0
ArtisticPhoenix

1
Und eine andere ist, dass Sie die $r()Lambda-Funktion als regulär definieren function r()könnten (könnte sich an derselben Stelle befinden, Funktion in Funktion ist möglich). Sie müssen das String-Parsing korrigieren: " {r("")} "funktioniert nicht. Weitere -7 Bytes;)
7ochem

8

Java, 310 307 300 275 Bytes

Vielen Dank an DevelopingDeveloper für die Konvertierung in einen Lambda-Ausdruck

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

Erweitert:

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

Wir haben nach kürzeren Wegen gesucht, um Zeichenfolgen zu multiplizieren, und festgestellt, dass Streams überraschend ausführlicher sind

Probieren Sie es online!


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

@manatwork Danke, habe das verpasst
phflack

2
@phflack Ich habe es auf 290 gebracht, wenn Sie einen Lamda-Ausdruck verwenden
DevelopingDeveloper

1
@phflack Auch sagte der OP es muss nur die Zeichenkette zurück, es nicht zu der Konsole drucken, so können Sie es Drop - Down - 279 , dies zu tun
DevelopingDeveloper

1
@DevelopingDeveloper Cool, ich habe auch einen Weg gefunden, j=#aus den for-Loops heraus zu
golfen

5

Sauber , 305 292 288 275 Bytes

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

Probieren Sie es online!


3

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

-21 dank FlipTack

-43 dank ovs

-6 danke an 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)

Probieren Sie es online!




Ich denke, Sie haben vergessen, das bytecount nach der Bearbeitung im letzten Vorschlag zu aktualisieren.
NieDzejkob

1

Kotlin , 261 Bytes

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

Verschönert

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

Prüfung

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

Anonyme Arbeitsblattfunktion, die Eingaben aus dem Bereich A1und Ausgaben in die aufrufende Zelle übernimmt

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.