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


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:

""""
 ()
 ()
 ()
 ()
 ()
/__\

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

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

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

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



2

JavaScript ES6, 34 байта

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

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

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

|==|
 ()
 ()
 ()
 ()
 ()
/__\

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
 ()
 ()
 ()
/__\

1

JQ: 30 символов

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

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

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

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

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





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

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
 ()
 ()
 ()
 ()
/__\

красивый абажур)
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
 ()
 ()
 ()
 ()
 ()
/__\

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

Выход:

####
 ()
 ()
/__\



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|
 ()
 ()
 ()
/__\

2
Не могли бы вы предоставить ссылку на среду онлайн-тестирования, чтобы можно было легко запустить вашу заявку?
Джонатан Фрех

@JonathanFrech TIO ссылка теперь доступна
улитка


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.