Моя волнистая лампа

13

Двигаясь, я разбил свою лампу. Теперь мне нужен новый. Твоя работа - сделать мне лампу! Я не уверен, какой размер я хочу, хотя я знаю, что хочу волнистую.

Ваша программа / функция должна принимать числовой ввод и распечатывать лампу с таким количеством загогулинов / ударов.

Примеры:

Входные данные:2

Выход:

/ - \
 ()
 ()
/ __ \

Входные данные:3

Выход:

/ - \
 ()
 ()
 ()
/ __ \

Входные данные:5

Выход:

/ - \
 ()
 ()
 ()
 ()
 ()
/ __ \

Правила:

  • 0 и отрицательные числа не имеют значения
  • Чтобы придать светильникам (это вызов) больше разнообразия, вы должны изменить абажур.
    • Они должны быть 4 символа в ширину и 1 символ в высоту.
    • Они могут быть любой формы, в том числе не абажурной формы.
    • Они не должны содержать пробелов.
    • База должна оставаться прежней.
  • Вы должны показать пример ввода и вывода с абажуром.
  • Самый короткий код выигрывает!
фаза
источник
Но это совсем не шатается! Любил бы, если бы входы> 5 заставили это заморозить.
Оптимизатор
22
Я понизил. Я думаю, что это скучное искусство ASCII. Посередине имеется повторяющаяся секция, которая не перекрывается между деталями, которые также слишком короткие для сжатия. Это просто имеет форму ABBB..BBBC. Требование изменить раздел означает, что люди будут использовать короткую встроенную строку.
xnor
7
Вы уже можете прекратить понижать голосование! Я думаю, что ОП получил сообщение.
xnor
1
@xnor Мне жаль бедного парня. Вероятно, это один из самых недооцененных вопросов: / i.stack.imgur.com/T4A7X.jpg
Бета-распад
1
Я не голосовал никоим образом, но, учитывая сходство с Draw ASCII Lightning Bolt , я могу понять, что это не так. Небольшой поворот, например, наличие большей базы для более высокой лампы или повторяющиеся декорации только на каждом n-м загогулине, сделал бы его немного другим.
manatwork

Ответы:

4

Pyth - 16 байт

Использует кавычки для тени, так как N предварительно инициализирован для этого.

*N4VQ+d`();"/__\

Попробуйте это онлайн здесь .

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

Образец для 5:

""""
 ()
 ()
 ()
 ()
 ()
/__\
Maltysen
источник
7

Снеговик 0.2.0 , 42 символа

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

Образец прогона:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

Поэтому я только заметил, что забыл реализовать возможность избежать обратного слеша в строках, когда решил эту задачу. Это определенно произойдет в следующей версии, но сейчас, вот что я сделал, чтобы напечатать последнюю строку:

"/__"sP92wRsP

92является кодом ASCII для обратной косой черты, wRоборачивает его в массив, и теперь я могу напечатать его, sPпотому что «строки» в Snowman на самом деле являются просто массивами чисел.

Дверная ручка
источник
7
Вы хотите построить снежную лампу?
Алекс А.
3

> <> , 43 41 38 байт

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

Ввод через кодовую точку, например, пробел 32. При этом часть собственного кода программы используется в качестве абажура, в результате чего получается нечто, похожее на спутниковую антенну:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(Предложение благодаря @randomra)

Для еще трех байтов мы можем изменить третью строку, добавив немного больше настроек:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

Это производит одну из тех ламп, которые стреляют светом вверх, из-за отсутствия лучшего способа поместить это:

\__/
 ()
 ()
 ()
 ()
 ()
/__\
Sp3000
источник
3

R, 54 52 46 байт

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

В этой версии ввод и вывод практически смешаны:

{in / out} PUT:

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

РЕДАКТИРОВАТЬ 1 : -2 байта благодаря комментарию @manatwork.
РЕДАКТИРОВАТЬ 2 : -6 байт. Полный кредит снова идет на @manatwork

Фредерик
источник
1
Ничего не меняется, кроме внешнего вида: " /_\\"должно быть "/__\\". Кстати, это \rнеобходимо?
manatwork
@manatwork Это изменило форму ножки лампы, сделав ее более устойчивой + ваше замечание о \rспасении меня на два байта! Надо было перечитать мой код! Благодарность !
Фредерик
1
Хм ... Странный инструмент. Не могу заставить его работать не в интерактивном режиме. Во всяком случае, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")похоже на работу.
manatwork
@ Manatwork: ну ... я никогда не думал, что это может сработать! Это действительно хорошее решение. R полон сюрпризов!
Фредерик
Добрый день, Фредерик, если вы все еще активны в PPCG, вы можете сэкономить 5 байтов
JayCe
3

Солома , 26 байт (не конкурирует)

<#~('--'
)>( ()
)-*>(/__\)>

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

TuxCrafting
источник
Как это работает?
Конор О'Брайен
@BetaDecay * поэтому неконкурентоспособен
Конор О'Брайен
2

JavaScript ES6, 34 байта

i=>`|==|
${` ()
`.repeat(i)}/__\\`

Новые строки значимы

Пример с вводом 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\
Downgoat
источник
2

sed, 28 байт

s#.# ()\n#g
s#^\|$#/__\\\n#g

Принимает участие в одинарных. Тень является очевидным выбором (так же, как и база).

Тестовый забег

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\
Деннис
источник
1

Гема: 30 символов

*=gema\n@repeat{*;\ ()\n}/__\\

Образец прогона:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\
manatwork
источник
1

JQ: 30 символов

(29 символов кода + 1 символ командной строки.)

8888,(range(.)|" ()"),"/__\\"

Образец прогона:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

Он-лайн тест (пропуск -rчерез URL не поддерживается - проверьте Raw Output самостоятельно.)

manatwork
источник
1

Пробел , 169 байт

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

Буквы S(пробел), T(табуляция) и N(новая строка) добавляются только как подсветка.
[..._some_action]добавлено только в качестве объяснения.

Попробуйте онлайн (только с пробелами, вкладками и новыми строками).

Объяснение в псевдокоде:

Помещает все символы в обратном порядке в стек, а затем печатает их в цикле.

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

ПРИМЕЧАНИЕ: iв приведенном выше псевдокоде сохраняется в куче на каждой итерации LOOP, потому что мы не хотим оставлять его в стеке для печати в конце.

Кевин Круйссен
источник
1

Холст , 8 байт

(×_¶/e⟳║

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

Объяснение:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap
dzaima
источник
1

05AB1E , 17 15 13 11 байт

„ (и„/_.ø)˜∞

-2 байта (17 → 15) благодаря @EriktheOutgolfer .
-2 байта (13 → 11) после того, как вдохновлен ответом @dzaima на Canvas .

Крышка такая же, как у основания ( /__\).

Объяснение:

 (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
             # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
              # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

Старый 13-байтовый ответ:

„/_D (Iиs)˜∞

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

Кевин Круйссен
источник
1

Excel, 31 байт

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

Эта лампа музыкальная - и поможет оживить и осветить ваш день.

="/\
"&REPT(" ()
",A1)&"/__\"

Выход

Я люблю лампу

Тейлор Скотт
источник
1

PowerShell 5.1, 28 26 байт

Спасибо Mazzy за 2 байта

8008;," ()"*"$args";"/__\"

Поскольку тень может содержать любые 4 символа, использование числа экономит пару кавычек. Самым сложным было найти красивый оттенок.

Выход:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\
Veskah
источник
красивый абажур)
Mazzy
1
попробуйте это8008;," ()"*"$args";"/__\"
mazzy
1

Python 2, 36 байт

print"-"*4+"\n ()"*input()+"\n/__\\"

Для ввода 4:

----
 ()
 ()
 ()
 ()
/__\

Обратите внимание, что для Python любой абажур с использованием трубок меньше байта.

-1 байт благодаря @Alex!

Бета распад
источник
1
Я думаю, что если вы измените абажур на один символ и умножите его на 4, вы можете сохранить один байт:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex
0

SWI-Пролог, 73 60 байт

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). выходы

golf
 ()
 ()
 ()
 ()
 ()
/__\
Fatalize
источник
0

Юлия, 36 байт

n->print("|~~|\n"*" ()\n"^n*"/__\\")

Это создает безымянную функцию, которая принимает целое число в качестве входных данных и печатает в стандартный вывод.

Пример:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\
Алекс А.
источник
0

Bash + coreutils, 37 байт

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

Новые строки необходимы и учитываются в общем количестве байтов. GNU sed требуется.

Бегать:

./squiggly_lamp.sh 2

Выход:

####
 ()
 ()
/__\
seshoumara
источник
0

Рубин, 42 байта

i=gets.to_i
puts "|--|\n#{" ()\n"*i}/__\\"
dkudriavtsev
источник
0

Java 7 11, 84 83 37 байт

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

Попробуйте онлайн. (ПРИМЕЧАНИЕ: Java 11 пока не поддерживается в TIO, поэтому String.repeat(int)эмулировалась с repeat(String,int)таким же количеством байтов.)

Используется i!!iкак шапка. ¡!!¡выглядит лучше , но на два байта больше.

Объяснение:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"
Кевин Круйссен
источник
0

Впереди 38 байтов

I"|MM|"Wr
~W" ()"oN<s!:-1~
@W"/__\"oN<

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

образцы

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

3
|MM|
 ()
 ()
 ()
/__\
snail_
источник
2
Не могли бы вы предоставить ссылку на среду онлайн-тестирования, чтобы можно было легко запустить вашу заявку?
Джонатан Фрех
@JonathanFrech TIO ссылка теперь доступна
улитка