[AVISO DE TEMA DE NAVIDAD AQUÍ]

86

Nota para los mods, si el título no le hace justicia, cámbielo a lo que sea, pensé que era divertido.


Tienes la tarea de colgar las luces para esta temporada navideña, y tu familia ha decidido que para que sea una feliz Navidad, debes colgar al menos 2 luces navideñas en tu casa. Entonces, su desafío es, dado un número 1 < n, generar el número correspondiente de luces navideñas que colgará de acuerdo con las siguientes especificaciones ...


Aquí está la estructura de una luz navideña básica:

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

La única parte incierta es el signo de interrogación, ya que dependiendo de dónde aterrice la luz en la cadena, la conexión será muy diferente.

Para la primera luz de la cadena, deberá generar:

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

Para la última luz en la cadena, deberá generar:

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

Y para todas las luces en el medio:

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

Ejemplo:

N = 2 :

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

N = 6 :

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

Crédito

ASCII-Art fue tomado de: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Fue desarrollado por un usuario llamado "jgs", que es responsable de alrededor del 40% del contenido de ese sitio.


Reglas

  • Los espacios finales están bien, lo mismo con una nueva línea final.
  • Hay 1 espacio más entre la primera y la última bombilla del resto de la cadena.
  • Solo puede tomar 1 entero como entrada, y la salida DEBE ser una cadena, no matrices.
  • Su programa puede tener funciones indefinidas para valores inferiores a 2.

Este es , el menor recuento de bytes gana.


Enlace de publicación de Sanbox aquí.

Urna de pulpo mágico
fuente
¿Qué pasa si las cadenas son sinónimos de matrices de caracteres?
Οurous
36
Esa luz navideña básica se ve ridículamente similar a la granada :)
nicael
18
@nicael Descripción del desafío alternativo: Santa está tomando medidas enérgicas contra los niños malos este año, y por cada acción traviesa que cometa, el niño recibirá una granada de mano viva. Como el cuidadoso proveedor de regalos que es, ¡Santa ha atado las granadas para que los niños malos del mundo no las pierdan por accidente!
Urna mágica del pulpo
@MagicOctopusUrn Uhm, 3 espacios a la izquierda y derecha y 2 espacios de lo contrario? Deseo que el espacio sea consistente. Este es un cinturón de granadas feo.
polkovnikov.ph
1
@ polkovnikov.ph fue eso, o los puntos sobre los paréntesis (lo que parece extraño), o los paréntesis no son paréntesis. En mi opinión, este es el enfoque más atractivo (aunque no el más golfable).
dzaima

Respuestas:

35

SOGL V0.12 , 73 71 70 66 bytes

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

Pruébalo aquí!

-4 bytes al recorrer una cadena (YYY)como la respuesta de Charcoal

63 bytes funcionarían si 2 no necesitaran ser manejados: /

dzaima
fuente
99
[mente asombrada]
Robert Harvey
2
Esto es absolutamente ridículo. (Especialmente si se hizo por teléfono.) +1
Joe
10
Estoy 90% seguro de haber visto este código exacto antes, desde que imprimí alguna memoria no inicializada.
Nic Hartley
Eso es 113 bytes, 70 caracteres.
polkovnikov.ph
@ polkovnikov.ph si hace clic en el save SOGL codepage encoded filebotón, le da un archivo de 70 bytes, que también puede cargar allí (aunque el botón de exploración no está intuitivamente distante, lo arregla). SOGL usa una página de códigos personalizada para hacerlo. (la página de códigos está vinculada en el encabezado de la respuesta)
dzaima
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 de dylnan
-4 bytes de Rod

Toma entrada en stdin.

Pruébalo en línea!

Explicación:

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

Versión festiva adicional!

pizzapants184
fuente
Cambiar la última línea a for s in l:print(s,s*x,s)guarda un byte.
dylnan
Gracias por la explicación, Python me parece extraño ... jajaja
ArtisticPhoenix
1
@ArtisticPhoenix Irónicamente, cuando no se juega al golf, Python es uno de los lenguajes menos extraños.
jpmc26
18

Pyth , 113 107 bytes

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

Pruébalo en línea!

No es exactamente la versión más golfista ...

Monja permeable
fuente
11
No golf Tal vez. ¿Correcto? Si. FGITW? Seguro.
Urna de pulpo mágico
Sí, no el más golfista, especialmente con un personaje final innecesario. : P
Erik the Outgolfer
15

JavaScript (ES6), 180 bytes

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

Prueba

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
fuente
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`
`

Darrylyeo
fuente
1
Puede guardar algunos caracteres reemplazándolos .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.con${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li
@KuilinLi Tendría que disminuir Ndespués de la primera llamada r, pero eso funciona bien.
darrylyeo
13

Carbón , 78 74 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Editar: ahorró 2 bytes al simplificar la forma en que se imprime el cableado. Se guardaron 2 bytes porque el nuevo código convierte automáticamente la entrada a entero. Explicación:

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

Imprima el cableado tomando la cuerda .--.__, moldeándola a la longitud 9, luego repítala una vez para cada unión, terminando con una final .antes de pasar al inicio de la siguiente línea para las bombillas.

F⪫()×Y⁻貫

Pase sobre una cadena de conectores: (y )en los extremos, y Ys en el medio.

M⁼ι)→

Mueve a la derecha un personaje si esta es la última bombilla.

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

Imprime el cuerpo de la bombilla sin mover el cursor.

  _ι_

Imprima la tapa de la bombilla, incluido el conector.

M⁺⁴⁼ι(→

Muévase al comienzo de la próxima bombilla (un carácter adicional si esta es la primera bombilla).

Neil
fuente
Eso es 74 caracteres, no bytes.
polkovnikov.ph
@ polkovnikov.ph Charcoal utiliza una página de códigos personalizada , lo que le permite contar cada carácter como un solo byte.
dzaima
13

Excel VBA, 224 207 205 Bytes

Función de ventana inmediata anónima de VBE que toma la entrada del rango [A1]y las salidas a la ventana inmediata de VBE.

Imprime las bombillas línea por línea, de arriba a la izquierda a la derecha

?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

Muestra de E / S

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

-2 bytes para la adición de variable temporal b

Taylor Scott
fuente
2
¡Oh, me encantan las respuestas en lenguajes macro de software de papeleo! Por otro lado, perdí con VBA. +1
Decurous
1
(¡Tienes que inscribirme, para que pueda dejar este comentario!) : [Rept(B1,A1-2)]Justo antes del inicio del ciclo no se usa.
YowE3K
@ YowE3K - ¡Tienes razón! Gracias por atrapar eso - ha sido corregido
Taylor Scott
10

C,  279   278  272  262  259 bytes

¡Gracias a @NieDzejkob por guardar seis 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));}

Pruébalo en línea!

Desenrollado:

#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
fuente
1
C, maravilloso! (:
SilverWolf
272 bytes
NieDzejkob
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);}

Versión legible para prueba:

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

Verifique la versión minificada aquí

Verifique la versión legible aquí

ACTUALIZAR

Envuelto en una función,

Fénix Artístico
fuente
Continuemos esta discusión en el chat .
Christoph
2
La antigua sugerencia de JavaScript de usar dígitos como delimitador también funciona bien en PHP, solo que tendrá que escapar \ antes del dígito separador, por lo que solo ahorrará 1 carácter. Puede guardar otros 2 caracteres haciendo que la parte de caracteres de espacio en la misma cadena más grande, que contiene la expresión en el medio como la expansión: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork
@manatwork - gracias por el consejo Actualizado
ArtisticPhoenix
1
@manatwork - también si uso a 9como delimitador no es necesario escapar, probablemente esto funcione con otros números simplemente no0
ArtisticPhoenix
1
Y otra es que podría definir la $r()función lambda como regular function r()(podría estar en el mismo lugar, es posible la función en función). Es necesario corregir el análisis de cadenas: " {r("")} "no funcionará. Otro -7 bytes;)
7ochem
8

Java, 310 307 300 275 bytes

Gracias a DevelopingDeveloper por convertirlo a una expresión 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;};

Expandido:

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

Al buscar formas más cortas de multiplicar cadenas, descubrimos que las transmisiones son sorprendentemente más detalladas

Pruébalo en línea!

phflack
fuente
2
String o="";+ o+=" .";=String o=" .";
manatwork
@manatwork Gracias, me perdí eso
phflack
2
@phflack Lo bajé a 290 si usa una expresión lamda
DevelopingDeveloper
1
@phflack Además, el OP dijo que solo necesita devolver el String, no imprimirlo en la consola, por lo que puede bajarlo a 279 haciendo esto
DevelopingDeveloper
1
@DevelopingDeveloper Cool, también encontré una forma de jugar golf j=#fuera de los bucles for
phflack
5

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

Pruébalo en línea!

Οurous
fuente
3

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

-21 gracias a FlipTack

-43 gracias a los ovs

-6 gracias al Sr. 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)

Pruébalo en línea!

FantaC
fuente
1
-21 bytes
FlipTack
1
245 bytes .
Sr. Xcoder
Creo que olvidó actualizar el bytecount después de editar en la última sugerencia.
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()}}

Embellecido

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

Prueba

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
fuente
1

Hojas de cálculo de Google, 190 bytes

Función de hoja de trabajo anónima que toma entrada del rango A1y salidas a la celda que llama

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