ASCII Банер літака


11

З огляду на два входи - один з них непорожня друкована рядки ASCII (включаючи пробіл, за винятком символу нового рядка), інші один з двох різних, послідовних значень вашого вибору ( 1 / 0, l / r, left / rightі т.д.) - виводити ASCII мистецтва літака банер рядка, що вказує ліворуч або праворуч. Для послідовності я буду використовувати leftі rightпротягом усього опису цього завдання.

Площина або |-DI>-/( left), або \-<ID-|( right). Оскільки банер чіткий, він складається з символів рядка вводу, розділених пробілами, або зліва направо ( left), або справа наліво ( right), і оточений коробкою форми

    /--/
---<  <
    \--\

або

\--\
 >  >---
/--/

Зверніть увагу має бути один прогалиною між початком / кінцем повідомлення і >, <символами.

Наприклад, ось повідомлення HAPPY BIRTHDAY!та напрямок left:

           /-------------------------------/
|-DI>-/---< H A P P Y   B I R T H D A Y ! <
           \-------------------------------\

Ось повідомлення PPCGта напрямок right. Зауважте, що літери відображаються "назад", якщо дивитися з цієї сторони банера:

\---------\
 > G C P P >---\-<ID-|
/---------/

Правила

  • Провідні чи кінцеві рядки чи пробіли - необов’язкові, до тих пір, поки самі символи правильно вишикуються.
  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Якщо можливо, додайте посилання на онлайн-тестувальне середовище, щоб інші люди могли спробувати ваш код!
  • Стандартні лазівки заборонені.
  • Це тому застосовуються всі звичайні правила гольфу, і найкоротший код (у байтах) виграє.


2
JavaScript, 4 байти: eval- Введіть програму, яка генерує ліву площину ліворуч, і програму, яка генерує площину, направлену праворуч, праворуч.
darrylyeo

Відповіді:


6

JavaScript (ES6), 141 138 байт

Рядок і напрямок вводяться через синтаксис currying.
'/\n|-DI>-/---< 'для лівого, '/\n|-DI<-\\---> 'для правого.

t=>p=>(r=`${s='           '}/${_='-'.repeat(t.length*2+1)}${p}${[...t].join` `} ${d=p[12]} 
${s}\\${_}\\`,d>'<'?[...r].reverse().join``:r)


Ha, жорстке кодування ділянки виводу здається експлуатуванням лазівки, але це, здається, добре, грунтуючись на написаному виклику. Розумний!
Рік Хічкок

4
@RickHitchcock Кінцевою лазівкою є eval... просто надайте ліві та праві джерела функції як ваші два значення на ваш вибір. (Я думав, що в цьому є мета, але я не можу її знайти.)
Ніл

1
@Neil eval"Трюк" був би цією лазівкою по духу, навіть якщо це прямо не зазначено. Однак ця відповідь начебто хитра.
AdmBorkBork

Так, я обговорював, чи слід розміщувати це evalяк серйозну відповідь . Для вирішення таких завдань, як це, можливо, включення вхідних даних до складу кількості байтів.
darrylyeo

4

Perl 5 , 149 +1 (-p) = 150 байт

$d=<>;chomp;$_=($q=$"x11 .'/'.'-'x(1+2*length)."/\n").'|-DI>-/---< '.s/./$& /gr."<\n".$q=~y|\\/|/\\|r;if($d){y|<>|><|;$_=reverse;s/>/ >/;s|-/-|-\\-|}

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

Дворядковий вхід. По-перше, це повідомлення. Другий - 0 зліва, 1 справа.


4

V , 73 , 65 байт

Ó./& 
É ÄÒ-ys$/YGpr\$.11>Hj|R|-DI>-/³-<A< ÀñkæG|æ}-r>$BR>³-\-<

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

Не найбільший бал, але це тому, що майже половина цього відбувається за рахунок реверсування результатів.

Hexdump:

00000000: d32e 2f26 200a c920 c4d2 2d79 7324 2f59  ../& .. ..-ys$/Y
00000010: 4770 725c 242e 3131 3e48 6a7c 527c 2d44  Gpr\$.11>Hj|R|-D
00000020: 493e 2d2f b32d 3c1b 413c 201b c0f1 6be6  I>-/.-<.A< ...k.
00000030: 477c e616 7d2d 723e 2442 523e b32d 5c2d  G|..}-r>$BR>.-\-
00000040: 3c                                       <

Приймає рядок як вхід до буфера, а напрямок 0ліворуч і 1праворуч як аргументи командного рядка.


4

05AB1E , 63 байти

„\\S'-¹g·>×ýD∞2äθ‚11ú"|-DI>-/---<"¸¹ε²i∞θ}J'<«S«ð«J¸«Àε²i∞2äθ}»

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

На основі помилок, які можуть виправитись у майбутньому.


@MagicOctopusUrn можливо
Erik the Outgolfer

@MagicOctopusUrn насправді ні, це не буде працювати так ...
Ерік Вихідник

@MagicOctopusUrn Спробуйте змінити 0другий рядок на a 1.
Ерік Аутгольфер

Ах, провідний космос ...
Чарівний восьминіг Урна

4

Вугілля деревне , 44 40 39 35 байт

|-DI>-/³↗<→/-LηLη↙¹←< ¿N↷⁴‖T⮌⪫η ‖B↓

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Перший вхід - 1 для правого і 0 для лівого, другий - рядок банера. Редагувати: Збережено 1 байт, використовуючи, ReflectButterfly(:Up) оскільки вReflectButterfly(:Down) даний час помилка позиціонування курсору, але я зберег ще 4 байти, змінивши напрямок друку, і тепер не має значення, який я використовую. 38 34 32 байт-версія, якщо дзеркальне відображення банера було дозволено:

|-DI>-/³P⪫⪫<<η ↘→\-LηLη↖¹‖B↑¿N‖T

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Перший вхід - 0 для правого і 1 для лівого. Пояснення:

|-DI>-/

Роздрукуйте літак.

³↗<→/-LηLη↙¹←< 

Роздрукуйте верхню половину поля (відмітьте пробіл).

¿N↷⁴‖T

Якщо другий ввід ненульовий, поверніть напрямок друку, інакше відбийте площину та поле.

⮌⪫η 

Роздрукуйте повідомлення з додатковим пробілом (пробіл примітки). Курсор знаходиться в дальньому кінці поля від площини, тому повідомлення потрібно перевернути.

‖B↓

Поміркуйте, щоб отримати нижню половину поля.


Дослідна версія, схоже, має проблеми.
Ерік Аутгольфер

@EriktheOutgolfer Deverbosifier був зламаний нещодавно; Здається, TIO ще не має виправлень.
Ніл

2

Желе , 68 65 байт

“/\<“\/>”y
³K“|-DI>-/---< “ < ”j
LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡

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

Бере 1 праворуч, 0 ліворуч.

-3 байти завдяки @JonathanAllan ( грр, я завжди забуваю, AB+робить те саме, що B+@A)


³K“|-DI>-/---< “ < ”jзберігає байт; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡зберігає ще 2 таким же чином.
Джонатан Аллан

1

Вугілля деревне , 56 байт

-8 байтів завдяки цілкомлюдському та Еріку Побіжному!

≔⪫S θ≔⁺Lθ²η× ¹¹/η/⸿|-DI>-/³<× η<‖B↓FN«‖TM⁺η³→≔⮌θθ»↑↑Mη←θ

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

Виправлення випадків, згаданих dzaima, спричинило чималий вплив на кількість байтів. 36 байт, якщо нам дозволено перевертати символи, такі як <і /.


1
У python ' '.join(s)працює. Напевно, що можна використовувати у вугіллі?
повністюлюдсько

1
@totallyhuman теж Joinпрацює на рядках.
Erik the Outgolfer

Гм, я думаю, це був абсолютно нелюдський, хто насправді це запропонував.
Erik the Outgolfer

@EriktheOutgolfer О, я неправильно інтерпретував пропозицію @ totalhuman як дзвінок до Python's ' '.joinin Charcoal. Я вам обох буду кредитувати.
notjagan

Ви зламали процесор ast ...
Ніл


1

Пітон 2 , 137 136 133 байт

lambda s,d:'{0}/{1}-/\n|-DI{3}-{4}---{5} {2} {5} \n{0}\\-{1}\\'.format(' '*11,'--'*len(s),' '.join(s),*list('></\\<>')[d::2])[::-d|1]

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

1для правого і 0для лівого


135 байт (-1 байт) шляхом заміни 1-2*dна -d|1(заперечувати dxor 1).
Містер Xcoder

Друкарська справа, це не xor, це долота або, власне,
Містер Xcoder

1
134 байти з невеликою хитрістю:*list('></\\<>')[d::2]
jferard

1

PHP, 175 байт

[,$d,$s]=$argv;$f=str_repeat("--",strlen($s));$r="\-$f\           
 ".join(" ",str_split("><"[$d].$s)).($d?" <---/->":" >---\-<")."ID-|
/-$f/           ";echo$d?strrev($r):$r;

Запустіть -nr, перший аргумент = 0для обличчя праворуч або 1ліворуч і другий аргумент = текст
або спробуйте його в Інтернеті .



1

Корея , 51 байт

"u *:>ip.j:l)X-'/S:>"
|-DI>-/---< V< 
"h}>>`tHL`idF

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

Пояснення

Програма складається з кількох частин:

1: Ініціалізація

"u *:>ip.j:l)X-'/S:>"
"..................."   execute the inside as code
 u                      repeat
   *                    a space, 11 times
    :                   duplicate this string
     >                  write this string to the content field
      i                 take a line of input
       p                push a space
        .j              insert that space after every character
          :l)           get (length(str) + 1)
             X-         repeat a hyphen that many times
               '/       push the "/" character
                 S      surround that string with the above character
                  :>    duplicate and write that string to the content field

2: необроблений текст

Наступний текст виводиться в поле вмісту:


|-DI>-/---< V<

3: поштовий товар

"h}>>`tHL`idF
"               execute until the end of the file
 h              mirror the previous string horizontally
  }             move the modified input string to the front of the stack
   >>           write the top two strings to the content field
     `   `id    do the inside `i`nput times
      tH        reflect the content field horizontally and vertically
        L       reverse the input string
            F   save the input string in a field (default: V)
                this replaces all Vs in the code with the input string

0

Excel VBA, 198 байт

Анонімна функція негайного вікна VBE, яка приймає введення як рядок із [A1]та int з діапазону, [B1]де 1вказує, що площина знаходиться зліва та 0вказує, що площина знаходиться праворуч.

b=[B1]:a=StrConv(IIf(b,[A1],StrReverse([A1])),64):j=[Rept("-",2*Len(A1)+1)]:k="/"&j &"/":l="\"&j &"\":s=Space(11):?IIf(b,s &k,l):?IIf(b,"|-DI>-/---< "," > ")a;IIf(b,"<",">---\-<ID-|"):?IIf(b,s &l,k)

0

Google Таблиці, 210 байт

Функція анонімного робочого листа, яка приймає вхідний вхід як рядок від [A1] та int з діапазону [B1], де 1 вказує, що площина знаходиться зліва, а 0 означає, що площина знаходиться праворуч.

=If(B1,"           /","\")&Rept("-",2*Len(A1)+1)&If(B1,"/
","\
")&If(B1,"|-DI>-/---< "," > ")&RegexReplace(A1,"(.)","$1 ")&If(B1,"<
",">---\-<ID-|
")&If(B1,"           \","/")&Rept("-",2*Len(A1)+1)&If(B1,"\","/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.