[DISCLAIMER DEL TEMA DI NATALE QUI]


86

Nota alle mod, se il titolo non rende giustizia, cambiarlo in qualunque cosa, ho pensato che fosse divertente.


Hai il compito di appendere le luci per questo periodo di Natale e la tua famiglia ha deciso che per essere un buon Natale, devi appendere almeno 2 luci di Natale a casa tua. Quindi, la tua sfida è, dato un numero 1 < n, emettere il numero corrispondente di luci di Natale che appendi in base alle seguenti specifiche ...


Ecco la struttura di una luce natalizia di base:

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

L'unica parte incerta è il punto interrogativo, poiché a seconda di dove la luce atterra nella catena, la connessione differirà notevolmente.

Per la prima luce nella catena, dovrai emettere:

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

Per l'ultima luce nella catena, dovrai emettere:

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

E per tutte le luci nel mezzo:

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

Esempio:

N = 2 :

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

N = 6 :

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

Credito

ASCII-Art è stata tratta da: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

È stato sviluppato da un utente di nome "jgs", responsabile di circa il 40% dei contenuti di quel sito.


Regole

  • Gli spazi finali vanno bene, lo stesso con una nuova riga finale.
  • C'è 1 spazio in più tra il primo e l'ultimo bulbo dal resto della catena.
  • È possibile accettare solo 1 numero intero come input e l'output DEVE essere una stringa, senza array.
  • Il tuo programma potrebbe avere funzioni indefinite per valori inferiori a 2.

Questo è , il conteggio dei byte più basso vince.


Link post di Sanbox qui.


Cosa succede se le stringhe sono sinonimi di matrici di caratteri?
Οurous

36
Quella luce natalizia di base sembra ridicolmente simile alla granata :)
nicael

18
@nicael Descrizione alternativa della sfida: quest'anno Babbo Natale si reprime con i bambini cattivi e per ogni azione cattiva commessa il bambino riceverà una bomba a mano dal vivo. Come premuroso fornitore di regali che è, Babbo Natale ha legato le granate in modo che i bambini cattivi del mondo non le perderanno per caso!
Magic Octopus Urn il

@MagicOctopusUrn Uhm, 3 spazi a sinistra e a destra e 2 spazi in caso contrario? Vorrei che la spaziatura fosse coerente. Questa è una brutta cintura di granate.
polkovnikov.ph il

1
@ polkovnikov.ph o era quello, o i punti erano sopra le parentesi (che sembra strano), o le parentesi non erano tra parentesi. IMO questo è l'approccio più bello (anche se non il più giocabile).
dzaima,

Risposte:


35

SOGL V0.12 , 73 71 70 66 byte

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

Provalo qui!

-4 byte eseguendo il ciclo su una stringa (YYY)come la risposta Charcoal

63 byte funzionerebbero se 2 non dovessero essere gestiti: /


9
[soffiando la mente.]
Robert Harvey il

2
Questo è assolutamente ridicolo. (Soprattutto se è stato fatto su un telefono.) +1
Joe

10
Sono sicuro al 90% di aver visto questo codice esatto prima, da quando ho stampato un po 'di memoria non inizializzata.
Nic Hartley,

Sono 113 byte, 70 caratteri.
polkovnikov.ph il

@ polkovnikov.ph se fai clic sul save SOGL codepage encoded filepulsante, ti dà un file di 70 byte, che puoi caricare anche lì (anche se il pulsante Sfoglia è involontariamente distante, risolvendolo). SOGL utilizza una tabella codici personalizzata per farlo. (la tabella codici è collegata nell'intestazione della risposta)
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 da dylnan
-4 byte da Rod

Accetta input su stdin.

Provalo online!

Spiegazione:

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

Versione festiva aggiuntiva!


Cambiando l'ultima riga per for s in l:print(s,s*x,s)salvare un byte.
Dylnan,

Grazie per la spiegazione, Python mi sembra strano ... lol
ArtisticPhoenix

1
@ArtisticPhoenix Ironia della sorte, quando non viene giocato a golf, Python è una delle lingue meno bizzarre.
jpmc26


15

JavaScript (ES6), 180 byte

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>


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
Puoi salvare alcuni personaggi sostituendoli .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.con${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@KuilinLi Dovrei decrementare Ndopo la prima chiamata a r, ma funziona bene.
darrylyeo,

13

Carbone , 78 74 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Modifica: salvato 2 byte semplificando la modalità di stampa del cablaggio. Salvato 2 byte perché il nuovo codice lancia automaticamente l'input su intero. Spiegazione:

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

Stampa il cablaggio prendendo la stringa .--.__, modellandola alla lunghezza 9, quindi ripetendola una volta per ogni unione, terminando con un finale .prima di passare all'inizio della riga successiva per le lampadine.

F⪫()×Y⁻貫

Passa sopra una serie di connettori: (e )alle estremità, e Ys nel mezzo.

M⁼ι)→

Sposta a destra di un carattere se questa è l'ultima lampadina.

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

Stampa il corpo della lampadina senza spostare il cursore.

  _ι_

Stampa il cappuccio della lampadina incluso il connettore.

M⁺⁴⁼ι(→

Passa all'inizio della lampadina successiva (un carattere in più se questa è la prima lampadina).


Sono 74 caratteri, non byte.
polkovnikov.ph il

@ polkovnikov.ph Charcoal utilizza una tabella codici personalizzata , che consente di contare ogni carattere come un singolo byte.
dzaima,

13

Excel VBA, 224 207 205 byte

Funzione di finestra immediata VBE anonima che accetta input dalla gamma [A1]e output alla finestra immediata VBE.

Stampa le lampadine riga per riga, dall'alto in alto a sinistra in basso a destra

?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

I / O di esempio

[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 grazie a @ YowE3k

-2 byte per l'aggiunta della variabile temporanea b


2
Ooh, adoro le risposte nei linguaggi macro del software per i documenti! D'altra parte ho perso con VBA. +1
Οurous

1
(Mi hai fatto iscrivere, solo per poter lasciare questo commento!) Il : [Rept(B1,A1-2)]poco prima dell'inizio del loop non viene utilizzato.
YowE3K il

@ YowE3K - Hai ragione! Grazie per averlo scoperto - è stato corretto
Taylor Scott il

10

C,  279   278  272  262  259 byte

Grazie a @NieDzejkob per aver salvato sei 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));}

Provalo online!

srotolato:

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


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

Versione leggibile per i test:

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

Controlla la versione ridotta qui

Controlla la versione leggibile qui

AGGIORNARE

Avvolto in una funzione,



2
Il vecchio suggerimento JavaScript di usare digit come delimitatore funziona bene anche in PHP, solo che dovrai scappare \ prima della cifra del separatore, quindi risparmierai solo 1 carattere. È possibile salvare altri 2 caratteri, rendendo la parte caratteri di spazio della stessa stringa più grande, che contiene l'espressione a metà come espansione: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
arte

@manatwork - grazie per il suggerimento Aggiornato
ArtisticPhoenix il

1
@manatwork - anche se uso un 9delimitatore, non è necessario scappare, probabilmente funziona con altri numeri, no0
ArtisticPhoenix

1
E un altro è che potresti definire la $r()funzione lambda come normale function r()(potrebbe essere nello stesso posto, la funzione in funzione è possibile). È necessario correggere l'analisi delle stringhe: " {r("")} "non funzionerà. Altri -7 byte;)
7

8

Java, 310 307 300 275 byte

Grazie a DevelopingDeveloper per averlo convertito in un'espressione 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;};

Allargato:

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

Cercando modi più brevi per moltiplicare le stringhe e abbiamo scoperto che i flussi sono sorprendentemente più dettagliati

Provalo online!


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

@manatwork Grazie, ho perso
phflack il

2
@phflack L'ho portato a 290 se usi un'espressione lamda
DevelopingDeveloper

1
@phflack Inoltre, l'OP ha detto che deve solo restituire String, non stamparlo sulla console, quindi è possibile farlo scendere a 279 facendo questo
DevelopingDeveloper

1
@DevelopingDeveloper Fantastico, ho anche trovato un modo per giocare a golf j=#fuori dai circuiti
phflack

5

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

Provalo online!


3

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

-21 grazie a FlipTack

-43 grazie agli ovs

-6 grazie a 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)

Provalo online!




Penso che ti sia dimenticato di aggiornare il bytecount dopo averlo modificato nell'ultimo suggerimento.
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()}}

abbellito

{
    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


1

Fogli Google, 190 byte

Funzione del foglio di lavoro anonima che accetta input dall'intervallo A1e output nella cella chiamante

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.