[РОЗДІЛ ТЕМИ ВІДМОВА ТУТ]


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 Uhm, 3 пробіли зліва та справа та 2 пробіли в іншому випадку? Я хочу, щоб інтервал був послідовним. Це потворний гранатовий пояс.
polkovnikov.ph

1
@ polkovnikov.ph це було чи то, або крапки над дужками (що виглядає дивним чином), або дужки не є дужками. ІМО - це найкращий (хоча і не самий грізний) підхід.
dzaima

Відповіді:


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 не потрібно було обробляти: /


9
[розум здутий.]
Роберт Харві

2
Це абсолютно смішно. (Особливо, якщо це було зроблено по телефону.) +1
Джо

10
Я на 90% впевнений, що бачив цей точний код і раніше, з того часу, коли надрукував деяку неініціалізовану пам'ять.
Нік Хартлі

Це 113 байт, 70 символів.
polkovnikov.ph

@ polkovnikov.ph, якщо натиснути save SOGL codepage encoded fileкнопку, він надає файл на 70 байтів, який ви також можете завантажити там (хоча кнопка перегляду ненавмисно віддалена, це виправити). Для цього SOGL використовує власну кодову сторінку. (кодова сторінка пов'язана у заголовку відповіді)
dzaima

26

Пітон 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 байт від дилнан
-4 байти від Rod

Здійснює введення на stdin.

Спробуйте в Інтернеті!

Пояснення:

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)збереження байта.
dylnan

Дякую за пояснення, 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
Ерік Аутгольфер

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))(`.--.__.--`)}.
Kuilin Li

@KuilinLi Мені довелося б декрементувати Nпісля першого дзвінка r, але це виходить чудово.
darrylyeo

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 Деревне вугілля використовує користувацьку кодову сторінку , що дозволяє рахувати кожен символ як один байт.
dzaima

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
C, чудово! (:
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;};

Розширено:

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 Спасибі, пропустив це
phflack

2
@phflack Я знизив його до 290, якщо ви використовуєте вираз lamda
DevelopingDeveloper

1
@phflack Також ОП заявив, що потрібно просто повернути String, а не надрукувати його на консолі, так що ви можете опустити її до 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)

Спробуйте в Інтернеті!




Я думаю, ви забули оновити базовий рахунок після редагування в останній пропозиції.
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)
}

ТІО

TryItOnline


1

Google Таблиці, 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.