[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.