Баннер самолета 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- Введите программу, которая генерирует левую плоскость для левой, и программу, которая генерирует правую плоскость для правой.
Даррильо

Ответы:


6

JavaScript (ES6), 141 138 байт

Строка и направление вводятся через синтаксис карри.
'/\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)


Ха, жесткое кодирование части выходных данных кажется эксплуатацией лазейки, но это кажется хорошим, основываясь на заданной задаче. Умная!
Рик Хичкок

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 возможно
Эрик Outgolfer

@MagicOctopusUrn на самом деле нет, это не сработает ...
Эрик Аутгольфер

@MagicOctopusUrn Попробуйте изменить 0вторую строку на a 1.
Эрик Outgolfer

Ах, ведущий космос ...
Волшебная Урна Осьминога

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↓

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


Подробная версия, кажется, имеет проблемы.
Эрик Outgolfer

@EriktheOutgolfer Deverbosifier был недавно сломан; У TIO, похоже, еще нет решения.
Нил

2

Желе , 68 65 байт

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

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

Принимает 1 справа, 0 слева.

-3 байта благодаря @JonathanAllan ( grr, я всегда забываю, 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
В питоне ' '.join(s)работает. Конечно, что можно использовать в древесном угле?
полностью человек

1
@totallyhuman тоже Joinработает со строками.
Эрик Outgolfer

Хм, я думаю, что это был абсолютно человек, который на самом деле предложил это.
Эрик Outgolfer

@EriktheOutgolfer О, я неверно истолковал предложение @ totallyhuman как сделать вызов Python's ' '.joinв Charcoal. Я буду признателен вам обоим.
notjagan

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


1

Python 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).
Мистер Кскодер,

Опечатка, это не xor, это побитовое или, на самом деле.
Мистер Кскодер,

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 и 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 Sheets, 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.