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