[AVERTISSEMENT SUR LE THÈME DE NOËL ICI]


86

Note aux mods, si le titre ne rend pas justice, changez-le, peu importe, je trouvais ça drôle.


Vous devez suspendre les lumières pour cette saison de Noël et votre famille a décidé que pour que ce soit un joyeux Noël, vous devez accrocher au moins deux lumières de Noël sur votre maison. Donc, votre défi est, à partir d’un nombre 1 < n, d’émettre le nombre correspondant de lumières de Noël que vous allez suspendre selon les spécifications suivantes ...


Voici la structure d'une lumière de Noël de base:

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

La seule partie incertaine est le point d'interrogation, car selon l'endroit où la lumière se pose dans la chaîne, la connexion sera très différente.

Pour le premier feu de la chaîne, vous devrez générer:

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

Pour le dernier feu de la chaîne, vous devrez générer:

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

Et pour toutes les lumières au milieu:

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

Exemple:

N = 2 :

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

N = 6 :

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

Crédit

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

Il a été développé par un utilisateur nommé "jgs", qui est responsable d'environ 40% du contenu de ce site.


Règles

  • Les espaces de fin sont bons, pareil avec une nouvelle ligne.
  • Il y a 1 espace supplémentaire entre le premier et le dernier bulbe du reste de la chaîne.
  • Vous ne pouvez prendre qu'un seul entier en entrée et la sortie DOIT être une chaîne, pas de tableaux.
  • Votre programme peut avoir des fonctions non définies pour des valeurs inférieures à 2.

C’est du , le nombre d’octets le plus faible gagne.


Sanbox post link ici.


Et si les chaînes de caractères sont des synonymes de tableaux de caractères?
urous

36
Cette lumière de Noël de base ressemble ridiculement à la grenade :)
nicael

18
@nicael Description du défi alternatif: le père Noël s'attaque aux mauvais enfants cette année et, pour chaque acte vicieux commis, l'enfant recevra une grenade à main vivante. En tant que fournisseur réfléchi de cadeaux, le Père Noël a lié les grenades afin que les mauvais enfants du monde ne les perdent pas par accident!
Urne Magique Octopus

@MagicOctopusUrn Uhm, 3 espaces à gauche et à droite et 2 espaces sinon? Je souhaite que l'espacement était cohérent. C'est une ceinture de grenade moche.
polkovnikov.ph

1
@ polkovnikov.ph c'était soit ça, soit les points au-dessus des parenthèses (qui ont l'air bizarre), soit les parenthèses n'étaient pas des parenthèses. OMI, c’est la meilleure approche (mais pas la plus golfable).
dzaima

Réponses:


35

SOGL V0.12 , 73 71 70 66 octets

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

Essayez-le ici!

-4 octets en boucle sur une chaîne, (YYY)comme la réponse Charcoal

63 octets fonctionneraient si 2 n'avaient pas besoin d'être traités: /


9
[l'esprit renversé.]
Robert Harvey

2
C'est absolument ridicule. (Surtout si cela a été fait sur un téléphone.) +1
Joe

10
Je suis sûr à 90% que j'ai vu ce code exact auparavant, depuis l'impression d'une mémoire non initialisée.
Nic Hartley

C'est 113 octets, 70 caractères.
polkovnikov.ph

@ polkovnikov.ph si vous cliquez sur le save SOGL codepage encoded filebouton, cela vous donnera un fichier de 70 octets, que vous pourrez aussi y charger (même si le bouton de navigation est trop lointain, ce qui corrige cela). SOGL utilise une page de code personnalisée pour le faire. (la page de codes est liée dans l'en-tête de la réponse)
dzaima

26

Python 3, 200 195 191 190 186 octets

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 octet de dylnan
-4 octets de Rod

Prend une entrée sur stdin.

Essayez-le en ligne!

Explication:

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

Version festive supplémentaire!


Changer la dernière ligne pour for s in l:print(s,s*x,s)enregistrer un octet.
dylnan

Merci pour l'explication, Python me semble bizarre ... lol
ArtisticPhoenix

1
@ArtisticPhoenix Ironiquement, lorsqu'il n'est pas joué au golf, Python est l'une des langues les moins bizarres.
jpmc26


15

JavaScript (ES6), 180 octets

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

Tester

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 octets

N=>`     ${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
   _(_    ${N--,r(`   _Y_   `)}    _)_
`+` [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.split`
`.map(x=>`${x=` ${x} `} ${r(x)} `+x).join`
`


1
Vous pouvez sauvegarder quelques caractères en les remplaçant .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.par${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@KuilinLi je devrais décrémenter Naprès le premier appel à r, mais cela fonctionne très bien.
darrylyeo

13

Charbon de bois , 78 74 octets

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

Essayez-le en ligne! Le lien est vers la version verbeuse du code. Edit: 2 octets enregistrés en simplifiant la façon dont le câblage est imprimé. 2 octets enregistrés car le nouveau code convertit automatiquement l'entrée en entier. Explication:

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

Imprimez le câblage en prenant la ficelle .--.__, en la moulant à la longueur 9, puis en la répétant une fois pour chaque jointure, en terminant par une finale .avant de passer au début de la ligne suivante pour les ampoules.

F⪫()×Y⁻貫

Boucle sur une chaîne de connecteurs: (et )aux extrémités, et Ys au milieu.

M⁼ι)→

Déplacez le caractère droit si c'est la dernière ampoule.

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

Imprimer le corps de l'ampoule sans déplacer le curseur.

  _ι_

Imprimer le capuchon de l'ampoule, y compris le connecteur.

M⁺⁴⁼ι(→

Aller au début de la prochaine ampoule (un caractère supplémentaire s'il s'agit de la première ampoule).


C'est 74 caractères, pas octets.
polkovnikov.ph

@ polkovnikov.ph Charcoal utilise une page de codes personnalisée , ce qui lui permet de compter chaque caractère comme un seul octet.
dzaima

13

Excel VBA, 224 207 205 octets

Fonction de fenêtre immédiate VBE anonyme qui prend les entrées de la plage [A1]et les envoie à la fenêtre immédiate VBE.

Imprime les ampoules ligne par ligne, de haut en bas à droite.

?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

Échantillon I / O

[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 octets grâce à @ YowE3k

-2 octets pour l'ajout d'une variable temporaire b


2
Ooh j'adore les réponses dans les langages macro de paperasserie-logiciel! D'autre part j'ai perdu à VBA. +1
urous

1
(Vous devez m'inscrire, juste pour que je puisse laisser ce commentaire!) Le : [Rept(B1,A1-2)]peu avant le début de la boucle n'est pas utilisé.
YowE3K

@ YowE3K - Vous avez raison! Merci d'avoir remarqué - sa correction a été faite
Taylor Scott

10

C,  279   278  272  262  259 octets

Merci à @NieDzejkob d'avoir économisé six octets!

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

Essayez-le en ligne!

Déroulé:

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


9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 octets

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

Version lisible pour les tests:

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

Vérifiez la version abrégée ici

Vérifiez la version lisible ici

MISE À JOUR

Enveloppé dans une fonction,



2
L'ancienne astuce JavaScript relative à l' utilisation de digit comme délimiteur fonctionne également bien en PHP. Seulement, vous devrez vous échapper du \ chiffre précédant le séparateur et ne sauvegarder qu'un caractère. Vous pouvez enregistrer 2 autres caractères en faisant les caractères d'espace partie de la même chaîne plus grande, contenant l'expression au milieu que l' expansion: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
manatwork

@manatwork - merci pour le tuyau Actualisé
ArtisticPhoenix

1
@manatwork - aussi si j'utilise un 9comme délimiteur, aucune évasion n'est nécessaire, probablement cela fonctionne avec d'autres chiffres mais pas0
ArtisticPhoenix

1
Et un autre est que vous pouvez définir la $r()fonction lambda comme une régulière function r()(peut être au même endroit, la fonction est possible). Vous devez corriger l'analyse de la chaîne: " {r("")} "cela ne fonctionnera pas. -7 octets
supplémentaires

8

Java, 310 307 300 275 octets

Merci à DevelopingDeveloper pour la conversion en une expression 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;};

Étendu:

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

Rechercher des moyens plus courts de multiplier les chaînes et découvrir que les flux sont étonnamment plus prolifiques

Essayez-le en ligne!


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

@manatwork Merci, j'ai raté ça
phflack

2
@phflack Je l'ai eu jusqu'à 290 si vous utilisez une expression lamda
DevelopingDeveloper

1
@phflack En outre, l'OP a déclaré qu'il lui suffisait de renvoyer la chaîne, et non de l'imprimer sur la console. Vous pouvez donc la passer à 279
DevelopingDeveloper

1
@DevelopingDeveloper Cool, j'ai aussi trouvé un moyen de j=#jouer au golf hors des boucles for
phflack

5

Propre , 305 292 288 275 octets

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

Essayez-le en ligne!


3

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

-21 grâce à FlipTack

-43 grâce aux ovs

-6 merci à M. 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)

Essayez-le en ligne!




Je pense que vous avez oublié de mettre à jour le décompte après la modification dans la dernière suggestion.
NieDzejkob

1

Kotlin , 261 octets

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

Embellies

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

Tester

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

Feuilles Google, 190 octets

Fonction de feuille de travail anonyme qui prend en entrée les plages A1et les sorties dans la cellule appelante

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.