[ISENÇÃO DE TEMAS DE NATAL AQUI]


86

Nota para os mods, se o título não faz justiça, mude para qualquer que seja, eu achei engraçado.


Você está encarregado de pendurar as luzes para esta temporada de Natal, e sua família decidiu que, para ser um feliz Natal, você precisa pendurar pelo menos 2 luzes de Natal em sua casa. Portanto, seu desafio é, dado um número 1 < n, emitir o número correspondente de luzes de Natal que você pendurará de acordo com as seguintes especificações ...


Aqui está a estrutura de uma luz de natal básica:

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

A única parte incerta é o ponto de interrogação, pois dependendo de onde a luz pousa na corrente, a conexão será muito diferente.

Para a primeira luz da cadeia, você precisará gerar:

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

Para a última luz da cadeia, você precisará gerar:

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

E para todas as luzes no meio:

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

Exemplo:

N = 2 :

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

N = 6 :

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

Crédito

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

Foi desenvolvido por um usuário chamado "jgs", responsável por cerca de 40% do conteúdo desse site.


Regras

  • Os espaços à direita são bons, o mesmo com uma nova linha à direita.
  • Há mais 1 espaço entre a primeira e a última lâmpada do resto da cadeia.
  • Você pode usar apenas 1 número inteiro como entrada e a saída DEVE ser uma string, sem matrizes.
  • Seu programa pode ter funções indefinidas para valores menores que 2.

Este é o , o menor número de bytes ganhos.


Sanbox postar link aqui.


E se as strings forem sinônimos para matrizes de caracteres?
— Οurous

36
Essa luz básica natal parece ridiculamente semelhante à granada :)
— nicael

18
@nicael Descrição alternativa do desafio: Papai Noel está reprimindo garotos maus este ano, e por cada ato impertinente cometido, a criança receberá uma granada de mão ao vivo. Como o fornecedor atencioso de presentes que ele é, o Papai Noel amarrou as granadas para que as crianças más do mundo não as percam por acidente!
— Magic Octopus Urn

@MagicOctopusUrn Uhm, 3 espaços à esquerda e à direita e 2 espaços caso contrário? Eu gostaria que o espaçamento fosse consistente. Este é um cinto de granada feio.
— polkovnikov.ph

1
@ polkovnikov.ph foi isso, ou os pontos estão entre parênteses (o que parece estranho), ou os parênteses não estão entre parênteses. Na IMO, essa é a abordagem mais bonita (embora não seja a mais praticável).
— Dzaima

Respostas:


35

SOGL V0.12 , 73 71 70 66 bytes

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

Experimente aqui!

-4 bytes rodando sobre uma string (YYY)como a resposta do carvão vegetal

63 bytes funcionariam se 2 não precisassem ser manipulados: /


9
[mente soprada.] #
— 1011 Robert Harvey

2
Isso é absolutamente ridículo. (Especialmente se tiver sido feito por telefone.) +1
— Joe

10
Tenho 90% de certeza de que já vi esse código exato antes, a partir de quando imprimi alguma memória não inicializada.
— Nic Hartley

São 113 bytes, 70 caracteres.
— polkovnikov.ph

@ polkovnikov.ph se você clicar no save SOGL codepage encoded filebotão, ele fornecerá um arquivo de 70 bytes, que você poderá carregar também (embora o botão de navegação esteja muito longe, corrigindo isso). SOGL usa uma página de código personalizada para fazer isso. (a página de código está ligado no cabeçalho da resposta)
— 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

Recebe entrada em stdin.

Experimente online!

Explicação:

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

Versão Festiva Adicional!


Alterar a última linha para for s in l:print(s,s*x,s)salvar um byte.
— dylnan

Obrigado pela explicação, Python parece bizarro para mim ... lol
— ArtisticPhoenix

1
@ArtisticPhoenix Ironicamente, quando não está jogando golfe, o Python é uma das linguagens menos bizarras.
— jpmc26

18

Pitão , 113 107 bytes

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

Experimente online!

Não é exatamente a versão mais golfista ...


11
Não é golfista? Talvez. Corrigir? Sim. FGITW? Definitivamente.
— Magic Octopus Urn

Sim, não é o jogador de golfe, especialmente com um personagem de fuga desnecessário. : 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:'  _)_'}`)

Teste

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
Você pode salvar alguns caracteres substituindo .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.por${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
— Kuilin Li

@KuilinLi Eu teria que diminuir Napós a primeira chamada r, mas isso funciona bem.
— darrylyeo

13

Carvão , 78 74 bytes

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

Experimente online! Link é a versão detalhada do código. Editar: salvou 2 bytes simplificando a maneira como a fiação é impressa. 2 bytes salvos porque o novo código lança automaticamente a entrada para número inteiro. Explicação:

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

Imprima a fiação pegando a corda .--.__, moldando-a no comprimento 9 e repetindo-a uma vez para cada junção, terminando com uma final .antes de passar para o início da próxima linha das lâmpadas.

F⪫()×Y⁻貫

Faça um loop sobre uma série de conectores: (e )nas extremidades Yes no meio.

M⁼ι)→

Mova para a direita um caractere se esta for a última lâmpada.

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

Imprima o corpo da lâmpada sem mover o cursor.

  _ι_

Imprima a tampa da lâmpada, incluindo o conector.

M⁺⁴⁼ι(→

Vá para o início da próxima lâmpada (um caractere extra se esta for a primeira lâmpada).


São 74 caracteres, não bytes.
— polkovnikov.ph

@ polkovnikov.ph O carvão vegetal usa uma página de código personalizada , permitindo contar cada caractere como um único byte.
— Dzaima

13

Excel VBA, 224 207 205 bytes

Função de janela imediata anônima do VBE que leva as entradas do intervalo [A1]e as saídas para a janela imediata do VBE.

Imprime as lâmpadas linha por linha, do canto superior esquerdo para o canto inferior direito

?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

E / S de amostra

[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 graças a @ YowE3k

-2 bytes para adição de variável temporária b


2
Ooh, eu amo respostas em macro linguagens de papelada e software! Por outro lado, perdi para o VBA. +1
— Οurous

1
(Você precisa me inscrever, para que eu possa deixar esse comentário!) O : [Rept(B1,A1-2)]pouco antes do início do loop não é usado.
— YowE3K

@ YowE3K - Você está certo! Obrigado por capturar isso - está sendo corrigido #
— Taylor Scott

10

C,  279   278  272  262  259 bytes

Obrigado a @NieDzejkob por salvar 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));}

Experimente online!

Desenrolado:

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

Versão legível para teste:

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

Confira a versão reduzida aqui

Confira a versão legível aqui

ATUALIZAR

Embrulhado em uma função,



2
A dica antiga do JavaScript de usar o dígito como delimitador também funciona bem no PHP, apenas que você terá que escapar \ antes do dígito do separador, portanto, economizará apenas 1 caractere. Você pode economizar mais 2 caracteres, fazendo a parte caracteres de espaço da mesma cadeia maior, contendo a expressão no meio como expansão: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
— manatwork

@manatwork - obrigado pela dica Atualizado
— ArtisticPhoenix

1
@manatwork - também se eu usar um 9como delimitador não é necessário escapar, provavelmente, isso funciona com outros números só não0
— ArtisticPhoenix

1
E outra é que você pode definir a $r()função lambda como regular function r()(pode estar no mesmo lugar, a função na função é possível). Você precisa corrigir a análise de string: " {r("")} "não funcionará. Outro -7 bytes;)
— 7ochem

8

Java, 310 307 300 275 bytes

Agradecimentos ao DevelopingDeveloper por convertê-lo em uma expressão 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;
};

Procurando maneiras mais curtas de multiplicar strings, descobriu que os streams são surpreendentemente mais detalhados

Experimente online!


2
String o="";+ o+=" .";=String o=" .";
— manatwork

@manatwork Obrigado, perdi isso #
— phflack 20/12

2
@phflack eu entendi até 290 se você usar uma expressão lambda
— DevelopingDeveloper

1
@phflack Além disso, o OP disse que só precisa de retornar o String, não imprimi-lo para o console, assim que você pode deixá-lo cair para baixo para 279 fazendo isso
— DevelopingDeveloper

1
@DevelopingDeveloper Legal, eu também encontrei uma maneira de jogar golfe j=#fora dos loops for
— phflack

5

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

Experimente online!


3

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

-21 graças ao FlipTack

-43 graças a ovs

-6 agradecimentos 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)

Experimente online!




Acho que você esqueceu de atualizar o número de bytes após a edição na última sugestão.
— 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()}}

Embelezado

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

Teste

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

Planilhas Google, 190 bytes

Função de planilha anônima que recebe entrada do intervalo A1e saídas para a célula chamadora

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.