[РОЖДЕСТВЕНСКАЯ ТЕМА ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ ЗДЕСЬ]


86

Обратите внимание на моды, если название не соответствует действительности, измените его на что угодно, я подумал, что это было забавно.


Перед вами стоит повесить огни на этот рождественский сезон, и ваша семья решила, что для того, чтобы это было веселое Рождество, вам нужно повесить как минимум 2 рождественских огня на вашем доме. Итак, ваша задача, учитывая число 1 < n, вывести соответствующее количество рождественских огней, которые вы собираетесь повесить, в соответствии со следующими спецификациями ...


Вот структура основного рождественского света:

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

Единственная неопределенная часть - это вопросительный знак, так как в зависимости от того, где в цепи приземляется свет, соединение будет сильно различаться.

Для первого источника света в цепочке вам необходимо вывести:

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

Для последнего источника света в цепочке вам необходимо вывести:

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

И для всех огней в середине:

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

Пример:

N = 2 :

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

N = 6 :

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

кредит

ASCII-Art был взят из: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

Он был разработан пользователем по имени "jgs", который отвечает за около 40% контента на этом сайте.


правила

  • Конечные пробелы в порядке, то же самое с завершающим переводом строки.
  • Еще один пробел между первой и последней лампочкой от остальной цепи.
  • Вы можете принять только 1 целое число в качестве входных данных, а выходные данные ДОЛЖНЫ быть строками, без массивов.
  • Ваша программа может иметь неопределенные функции для значений меньше 2.

Это , выигрывает наименьшее количество байтов.


Ссылка для публикации в Sanbox здесь.


Что если строки являются синонимами для массивов символов?
— Οurous

36
Этот основной рождественский свет выглядит смехотворно похожим на гранату :)
— nicael

18
@nicael Описание альтернативного вызова: Санта в этом году расправляется с плохими детьми, и за каждый непослушный поступок ребенок получит живую ручную гранату. Будучи вдумчивым поставщиком подарков, Санта связал гранаты вместе, чтобы плохие дети мира не потеряли их случайно!
— Волшебная Урна Осьминога

@MagicOctopusUrn Хм, 3 пробела слева и справа и 2 пробела в противном случае? Я хотел бы, чтобы расстояние было последовательным. Это уродливый гранатометный пояс.
— polkovnikov.ph

1
@ polkovnikov.ph это было либо так, либо точки над круглыми скобками (что выглядит странно), либо круглые скобки не являющиеся круглыми скобками. ИМО - это самый привлекательный (хотя и не самый удачный) подход.
— Дзайма

Ответы:


35

SOGL V0.12 , 73 71 70 66 байтов

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

Попробуй здесь!

-4 байта, перебирая строку (YYY)как ответ древесного угля

63 байта будут работать, если 2 не нужно обрабатывать: /



2
Это абсолютно нелепо. (Особенно, если это было сделано по телефону.) +1
— Джо

10
Я на 90% уверен, что видел этот точный код раньше, с тех пор, как я напечатал немного неинициализированной памяти.
— Ник Хартли

Это 113 байтов, 70 символов.
— polkovnikov.ph

@ polkovnikov.ph, если вы save SOGL codepage encoded fileнажмете кнопку, она даст вам 70-байтовый файл, который вы также можете загрузить туда (хотя кнопка обзора неинтуитивно удалена, исправляя это). SOGL использует собственную кодовую страницу для этого. (кодовая страница
— указана

26

Python 3, 200 195 191 190 186 байт

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 байт от dylnan
-4 байта от стержня

Принимает вход на стандартный ввод.

Попробуйте онлайн!

Объяснение:

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

Дополнительная праздничная версия!


Изменение последней строки для for s in l:print(s,s*x,s)сохранения байта.
— Дилнан

Спасибо за объяснение, Python выглядит странно для меня ... LOL
— ArtisticPhoenix

1
@ArtisticPhoenix По иронии судьбы, когда Python не играет в гольф, это один из наименее странных языков.
— jpmc26

18

Pyth , 113 107 байтов

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

Попробуйте онлайн!

Не совсем лучшая версия ...


11
Не гольф? Может быть. Верный? Да. FGITW? Определенно.
— Волшебная Осьминог Урна

Да, не самый удачный, особенно с ненужным трейлинг-характером. : P
— Эрик Outgolfer

15

JavaScript (ES6), 180 байт

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

Контрольная работа

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 байта

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


1
Вы можете сохранить несколько символов, заменив .--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.на${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
— Куйлин Ли

@KuilinLi Я бы уменьшил Nпосле первого звонка r, но это работает хорошо.
— Даррильо

13

Древесный уголь , 78 74 байта

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

Попробуйте онлайн! Ссылка на подробную версию кода. Редактировать: Сохранено 2 байта, упрощая способ печати проводки. Сохранено 2 байта, потому что новый код автоматически преобразует ввод в целое число. Объяснение:

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

Распечатайте проводку, взяв строку .--.__, отливая ее до длины 9, затем повторяя ее один раз для каждого соединения, заканчивая финалом, а .затем переходите к началу следующей строки для лампочек.

F⪫()×Y⁻貫

Зафиксируйте цепочку разъемов: (и )на концах, и Yв середине.

M⁼ι)→

Переместите вправо на один символ, если это последняя лампочка.

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

Напечатайте тело колбы, не перемещая курсор.

  _ι_

Распечатайте крышку колбы с разъемом.

M⁺⁴⁼ι(→

Перейти к началу следующей лампы (дополнительный символ, если это первая лампа).


Это 74 символа, а не байты.
— polkovnikov.ph

@ polkovnikov.ph Charcoal использует пользовательскую кодовую страницу , что позволяет ему считать каждый символ как один байт.
— Дзайма

13

Excel VBA, 224 207 205 байт

Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона [A1]и выводит в непосредственное окно VBE.

Печатает луковицы построчно, сверху вниз слева направо

?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

Образец ввода / вывода

[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 байт благодаря @ YowE3k

-2 байта для добавления временной переменной b


2
Ох, я люблю ответы на бумажном языке - программные макроязыки! С другой стороны, я проиграл VBA. +1
— Οurous

1
(Вы заставили меня зарегистрироваться, просто чтобы я мог оставить этот комментарий!) : [Rept(B1,A1-2)]Непосредственно перед началом цикла не используется.
— YowE3K

@ YowE3K - Ты прав! Спасибо, что
— Тейлор Скотт

10

C  279   278  272  262  259 байтов

Спасибо @NieDzejkob за сохранение шести байтов!

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

Попробуйте онлайн!

раскатали:

#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
С, замечательно! (:
— SilverWolf


9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 байт

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

Читаемая версия для тестирования:

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

Проверьте минимизированную версию здесь

Проверьте читаемую версию здесь

ОБНОВИТЬ

Обернул это в функцию,



2
Старый совет JavaScript по использованию цифры в качестве разделителя также отлично работает в PHP, просто вам нужно будет экранировать \ символ перед разделителем, поэтому будет сохранен только 1 символ. Вы можете сэкономить еще 2 символов, сделав пространство символов часть той же большей строки, содержащие выражение в середине , как расширение: $a[]=$r($b)." {$r($b,$n)} ".$r($b);.
— Манатворк

@manatwork - спасибо за подсказку Обновлено
— ArtisticPhoenix

1
@manatwork - также, если я использую в 9качестве разделителя, экранирование не требуется, вероятно, это работает с другими числами, просто нет0
— ArtisticPhoenix

1
И еще одно - вы можете определить $r()лямбда-функцию как обычную function r()(может быть там же, функция в функции возможна). Вам нужно исправить разбор строки: " {r("")} "не сработает. Еще -7 байт;)
— 7очем

8

Java, 310 307 300 275 байт

Спасибо DevelopingDeveloper за преобразование его в лямбда-выражение

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

Expanded:

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

Изучая более короткие способы умножения строк, мы обнаружили, что потоки на удивление более многословны

Попробуйте онлайн!


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

@manatwork Спасибо, пропустил это
— phflack

2
@phflack Я понизил его до 290, если вы используете выражение lamda
— DevelopingDeveloper

1
@phflack Кроме того, ОП сказал, что ему просто нужно вернуть строку, а не распечатать ее на консоли, так что вы можете сделать это до 279, выполняя это
— DevelopingDeveloper

1
@DevelopingDeveloper Круто, я также нашел способ j=#выйти из петель для гольфа
— phflack

5

Чистый , 305 292 288 275 байт

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

Попробуйте онлайн!


3

Python 2 (PyPy) , 365 316 315 251 245 байт

-21 благодаря FlipTack

-43 благодаря овс

-6 спасибо мистеру 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)

Попробуйте онлайн!




Я думаю, что вы забыли обновить bytecount после редактирования в последнем предложении.
— NieDzejkob

1

Котлин , 261 байт

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

украшенный

{
    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 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

Google Sheets, 190 байт

Функция анонимного рабочего листа, которая принимает данные из диапазона A1и выводит их в вызывающую ячейку

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.