Мій світяться лампи


13

Під час руху я розбив лампу. Тепер мені потрібна нова. Ваша робота зробити мені світильник! Я не впевнений, якого розміру я хочу, хоча знаю, що хочу чітко.

Ваша програма / функція повинна брати номер вводу та роздрукувати лампу з такою великою кількістю зубців / ударів.

Приклади:

Вхід:2

Вихід:

/ - \
 ()
 ()
/ __ \

Вхід:3

Вихід:

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

Вхід:5

Вихід:

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

Правила:

  • 0 і мінус значення не мають значення
  • Щоб надати лампам (це завдання) більше різноманітності, потрібно змінити відтінок лампи.
    • Вони повинні бути 4 символи в ширину і 1 символ у висоту.
    • Вони можуть бути будь-якої форми, включаючи форми, що не мають відтінку світильника.
    • Вони не повинні містити пробілів.
    • Основа повинна залишатися такою ж.
  • Ви повинні показати приклад введення та виведення з відтінком лампи.
  • Найкоротший код виграє!

Але це зовсім не хитається! Мені б сподобалося, якби введення> 5 зробило його хитанням.
Оптимізатор

22
Я відмовився. Я думаю, що це нудне мистецтво ASCII. У середині є повторний відрізок і немає перекриттів між частинами, які також занадто короткі для стиснення. Він просто має форму ABBB..BBBC. Вимога змінити розділ означає, що люди будуть використовувати коротку вбудовану рядок.
xnor

7
Ви вже можете припинити заборону! Я думаю, що ОП отримало повідомлення.
xnor

1
@xnor Мені шкода бідолахи. Це, мабуть, одне з найбільш прихильних питань коли-небудь: / i.stack.imgur.com/T4A7X.jpg
бета-версія занепаду

1
Я жодним чином не проголосував, але з огляду на схожість з Намалюйте блискавку ASCII , я можу зрозуміти низку. Деякі маленькі повороти, як, наприклад, більша основа для вищої лампи, або повторне прикраса лише на кожній n-й скруті, зробили б це трохи інакше.
манатура

Відповіді:


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

EDIT 1 : -2 байти завдяки коментарю @manatwork.
EDIT 2 : -6 байт. Повний кредит знову надходить на @manatwork


1
Не змінюється нічого, крім зовнішнього вигляду: " /_\\"повинно бути "/__\\". До речі, це \rпотрібно?
манатура

@manatwork Це змінило форму лапки лампи, зробивши її більш стійкою + ваше зауваження про \rврятовані мені два байти! Повинен був перечитати мій код! Спасибі !
Фредерік

1
Хм ... Дивний інструмент. Не можна змусити його працювати неінтерактивно. У будь-якому випадку, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")здається, працює.
манастирство

@manatwork: ну ... я ніколи не думав, що це може працювати! Це дійсно приємне рішення. R сповнений сюрпризів!
Фредерік

Bonjour Frédéric, якщо ви все ще активні в PPCG, ви можете зекономити 5 байт
JayCe

3

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

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

Використовуйте '--'як відтінок світильника, введіть одинарний тепер у десяткових


Як це працює?
Conor O'Brien

@BetaDecay * тому не конкурує
Conor O'Brien


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

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

On-line тест (Проходження -rURL-адреси не підтримується - перевірте 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 's 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/__\\"
Олексій



0

Джулія, 36 байт

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

Це створює неназвану функцію, яка приймає ціле число як вхід і друкує для stdout.

Приклад:

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 посилання зараз доступне
snail_


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.