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


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.