Буква Е с Е


19

Ваша задача состоит в том, чтобы отобразить нижнюю букву "E" в форме ASCII, учитывая пять входов.

Примеры:

Ввод: 7,2,+,|,-(Примечание: вам не обязательно следовать этому точному формату ввода, и если вы его не используете, вы должны объяснить, как работает ваш собственный формат ввода)

Объяснение:

  • 7 общая ширина, включая символы левого и правого края.

  • 2 Количество вертикальных символов.

  • + Символ, который должен отображаться по краям.

  • | Символ, который должен отображаться вертикально между краями.

  • - Символ, который должен отображаться горизонтально.

Вывод приведенного выше примера:

+-----+ 
|
|
+-----+
|
|
+-----+


Другие примеры:

Входные данные: 7,2,@,|,-

Выход:

@-----@
|
|
@-----@
|
|
@-----@


Входные данные: 7,2,+,|,#

Выход:

+#####+
|
|
+#####+
|
|
+#####+


Входные данные: 8,3,+,|,#

Выход:

+######+
|
|
|
+######+
|
|
|
+######+


Входные данные: 8,3,+,@,#

Выход:

+######+
@
@
@
+######+
@
@
@
+######+


Входные данные: 9,4,^,$,!

Выход:

^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^


Обман и стандартные лазейки не допускаются.

Ваш код не должен ничего печатать в STDERR.

Ваш код может принимать любую кодировку символов, которую вы выбираете в качестве ввода, но любая выбранная кодировка символов должна, как минимум, поддерживать все 95 печатных символов ASCII.

Самый короткий код, в байтах, который успешно завершает эту задачу, является выигрышным кодом.

Leaderboard


27
Мне не нравится особый случай «без ввода данных». На мой взгляд, это ничего не добавляет к проблеме и сильно усложняет.
Yytsi

3
Является ли название, потому что вы могли бы дать Eв качестве входных данных, и сделать Eс Eс?
Трихоплакс

3
Несмотря на то, что мне это не нравится, что на самом деле означает «нет информации»? Мое решение Floroid будет висеть до конца вечности, если вы не пройдете ввод. Чтобы мое решение конкурировало, вам нужно будет пройти 5 нулей, а мне нужно проверить, являются ли входы нулями, и обработать соответственно ...? -1.
Yytsi

4
@TheBitByte Посмотрите мой второй комментарий, чтобы увидеть, что я на самом деле не так с ним. Теперь, когда вы отредактировали это, +1.
Yytsi

1
@ Кевин Ага. У меня просто была небольшая путаница с интерпретацией «нет информации». Пустая строка не равна «нет ввода» в моем уме. И я так привык запускать код внутри интерпретатора, на котором я буквально жду подачи ввода, поэтому я и добавил это.
Yytsi

Ответы:


6

05AB1E , 16 14 байтов

Í×s.ø©|`×`»D®»

объяснение

Í×                  # create a string of the correct nr of horizontal chars
  s.ø               # add the corner char on both sides
     ©              # save in register while keeping it on the stack
      |`            # push the remaining inputs to the top of the stack
        ×`          # push the correct nr of vertical chars on the stack
          »         # join on newline (joining the top vertical and horizontal sections)
           D        # duplicate this
            ®       # push the horizontal part again
             »      # join everything on newline

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

Сохранено 4 байта благодаря Аднану.


1
Из любопытства, почему вы используете ©регистр: p?
Аднан

1
@ Аднан: Хорошо поймать! Я собирался, но закончил тем, что не использовал это и забыл удалить это :)
Emigna

1
@muddyfish: Читая объяснение из вопроса, эта часть не была очевидна, поэтому я пропустил это. Спасибо, что дали мне знать!
Эминья

1
Там также специальная объемная команда , которая работает здесь: Í×s.øU×S»X»D»Xr».
Аднан

2
@Adnan: Ты прав. Хорошая мысль! Я никогда не использовал это раньше :)
Emigna

6

Python, 53 51 55 байт

lambda a,b,c,d,e:d.join("\n"*-~b).join([c+e*(a-2)+c]*3)

+4 байта благодаря @nimi

анонимная лямбда-функция, чтобы вызвать ее, напишите f=перед ней. Пример:

>>> print f(4,1,"€","|","-")
€--€
|
€--€
|
€--€

альтернатива, 53 байта

lambda a,b,c,d,e:((c+e*a+c+"\n"+(d+"\n")*b)*3)[:-b*2]

старая версия со специальным случаем без ввода, 69 65 63 байта

можно изменить требования mid-challenge ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)

2
Небольшая ошибка: первый аргумент ( 2в вашем примере) - это общая длина линии, включая углы, поэтому правильный ввод для вашей фигуры f(4,1 ...).
Ними,

@nimi спасибо за совет. (+4 байта :() Первый пример OP немного сбивает с толку. (У некоторых других ответов также есть эта ошибка)
KarlKastor

4

C 167 161 159 байтов

Да.

#define p putchar
i,j;g(a,c,e){p(c);for(i=2;i++<a;)p(e);p(c);p(10);}h(b,d){for(i=0;i++<b;){p(d);p(10);}}f(a,b,c,d,e){g(a,c,e);h(b,d);g(a,c,e);h(b,d);g(a,c,e);}

Попробуйте это на Ideone, с некоторыми тестами


2
ставит ("") -> p ('\ n')? или даже p (10), если это сработает
RiaD

Как я это пропустил! Спасибо, @RiaD.
Betseg

Также, если вы начнете цикл с 2, вы сохраните больше байтов
RiaD

3

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

->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}

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

Например,

f=->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}
puts f[6, 2, 'Ø', 'V', '>']

печать

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø

3

Javascript (ES6), 64 байта

(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

пример

let f =
(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

console.log(f(8,3,'+','@','#'))


Это обрабатывает особый случай отсутствия ввода?
Конор О'Брайен

{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }когда запустить в строке.
noɥʇʎԀʎzɐɹƆ

@AgentCrazyPython - запустить на IE? Он не имеет никакой поддержки для.repeat()
Arnauld

@Arnauld naw, сафари
noɥʇʎԀʎzɐɹƆ

о, это ES6 ...
noɥʇʎԀʎzɐɹƆ


3

R, 80 байт

Довольно повторяющееся:

function(h,v,a,b,c)cat(t<-c(a,rep(c,h),a,"\n"),d<-rep(c(b,"\n"),v),t,d,t,sep="")

Ungolfed:

function(h,v,a,b,c)

cat(t<-c(a,rep(c,h),a,"\n"),
    d<-rep(c(b,"\n"),v),
    t,d,t,
    sep="")


2

Pyth, 19 байт

jP*3,++Jw*-E2wJj*Ew

Программа, которая принимает разделенный новой строкой ввод в STDIN углового символа, количества горизонтальных символов, горизонтального символа, количества вертикальных символов и вертикального символа и печатает результат.

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

Как это устроено

jP*3,++Jw*-E2wJj*Ew  Program.
       Jw            Get the corner character. Store in J
           E         Get the number of horizontal characters
          - 2        -2
         *   w       Get the horizontal character and repeat it that many times
      +              Add J at the beginning of that
     +         J     and at the end
                 E   Get the number of vertical characters
                * w  Get the vertical character and repeat it that many times
               j     Join the above on newlines
    ,                Construct a 2-element list from the horizontal and vertical strings
  *3                 Repeat it 3 times
 P                   Everything except the last element
j                    Join the above on newlines
                     Implicitly print

2

MATLAB, 95 92 91 85 81 байт

Функция MATLAB 'E'. (редактировать: не работает в Октаве)

function a=e(n,m,c,h,v);a(1:n)=h;a=[c a c];a(2:m+1,1)=v;a=[a;a;a];a=a(1:3+2*m,:);

И безглым

function a=e(n,m,c,h,v); %Declare the function
a(1:n)=h;                %Initialise return with top line excluding the corners
a=[c a c];               %Then add corner pieces
a(2:m+1,1)=v;            %Next add the first vertical part
a=[a;a;a];               %Repeat three times vertically to get an E with a tail
a=a(1:3+2*m,:);          %And then lop off the tail

Функция должна быть вызвана так:

e(5,2,'*','-','|')

Который вернется:

+-----+
|      
|      
+-----+
|      
|      
+-----+

Возможно, это можно немного упростить, я буду продолжать над этим работать. Мне не нравится иметь полное объявление функции для получения ввода, поэтому посмотрим, смогу ли я улучшить это.


  • Сохранено 3 байта за счет упрощения генерации первой строки, чтобы сначала сделать строку без углов, а затем добавить углы, поскольку это сокращает число раз, когда требуется индексация.

  • Еще один байт сохранен, начиная с первого угла.

  • Еще 6 байтов, заменив repmat(a,3,1)вызов на [a;a;a].

  • Сохранено 4 байта при использовании aбез специальной инициализации (это уже объявлено в объявлении функции) - спасибо @LuisMendo


1
@LuisMendo интересно. Первоначально я был a=[c a c]там, но удалил его, чтобы уменьшить его, так как обычно вы не можете индексировать доступ к несуществующей переменной и создавать ее в процессе. Я забыл, что это была функция, поэтому aона уже объявлена ​​в объявлении функции как возвращаемое значение. Спасибо :)
Том Карпентер

Фактически, вы можете сделать это, даже если не в функции - индексирование несуществующей переменной действительно создает ее. Учиться новым вещам каждый день.
Том Карпентер

2

Perl, 40 + 1 (-n ) = 41 байт

Спасибо @Ton Hospel за сохранение 14 байтов и разрешение программе работать с входом больше 10.

/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3

Нужно -nтак же, как -E(или -M5.010) бежать. Например :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'

1
@TheBitByte Хорошо, отлично, все готово, спасибо.
Дада

2
Это уже очень хорошо. Но вы можете играть немного с форматом ввода , а также решить недостаток , что проблема не говорит , что повторы < 10, помещая /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3в файл (так как он использует $') и вызов с perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(использованием реальных перевода строки) , который считается, что 48 байт (2 экстра гандикап, поскольку его нельзя сочетать с -e)
Тон Хоспел

@TonHospel Спасибо. Да, я даже не заметил, что это не будет работать с числами >10. Отличная работа с форматом ввода, спасибо.
Дада

Это приближается к злоупотреблению свободой выбора входного формата, но: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'составляет 41 байт (не более $'), а также избавляет от ложного конечного перевода строки
Ton Hospel

@TonHospel Действительно, я пришел к этому решению после вашего первого предложения, но мне было не очень удобно из-за формата ввода ... Так как мы оба подумали об этом, я изменил свой ответ, но все же я чувствую, что это немного обманывают ...
Дада

2

Дьялог АПЛ , 31 29 байт

Запросы для горизонтального символа, ширины, символа соединения, высоты, вертикального символа - в этом порядке.

h↓⊃⍪/3/⊂↑(⍞⍴⍨h←⎕),⊂⍞{∊⍺⍵⍺}⎕⍴⍞

⎕⍴⍞символ ввода-горизонтальный и повторное значение ширины ввода ( ниже)

⍞{... }символ ввода-соединения, который будет в функции ...

∊⍺⍵⍺ сплющить [[соединение], [горизонтали], [соединение]]

инкапсулировать, чтобы он мог быть частью списка

(... ),готовиться ...

h←⎕ ввод высота

⍞⍴⍨ введите вертикальный символ и повторите это много раз

сделать список строк в таблицу символов

инкапсулировать (чтобы можно было повторить в целом)

3/ повтори это три раза

    
┗━ ┗━ ┗━

⍪/ соединить три части по вертикали


┣━
┣━
┗━

(это тоже их инкапсулирует, поэтому нам нужно ...)

удалить инкапсуляцию

h↓отбросить первые ч (строки)

┏━
┣━
┗━

Попробуй APL онлайн!


2

C, 130 байтов

#define p putchar
#define E for(o=0;o++<O;p(10))p(S);
#define W for(p(P),D=0;D++<C-2;)p(_);p(P);p(10);
f(C,O,P,S,_,D,o){W E W E W}

Использование:

main(){f(7,2,'+','|','-');}

Выход

+-----+
|
|
+-----+
|
|
+-----+

Удаление точки defineс запятой в s и добавление ее в качестве f(C,O,P,S,_,D,o){W;E;W;E;W;}сохранения байта.
Betseg

2

C #, 108 байт

(m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

Анонимная функция, которая генерирует каждую горизонтальную и вертикальную линию и создает окончательный результат.

Неуправляемая функция:

(m,n,e,v,h)=>
{
    string x = e + new string(h, m - 2) + e + "\n",
        y = new string(v, n).Replace(v + "", v + "\n");
    return x + y + x + y + x;
};

Полная программа с тестовыми примерами:

using System;

namespace LetterEWithoutE
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,int,char,char,char,string>f= (m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

            Console.WriteLine(f(7,2,'+','|','-'));
            Console.WriteLine(f(7,2,'@','|','-'));
            Console.WriteLine(f(7,2,'@','|','#'));
            Console.WriteLine(f(8,3,'+','|','#'));
            Console.WriteLine(f(8,3,'+','@','#'));
            Console.WriteLine(f(9,4,'^','$','!'));
        }
    }
}

2

MATL , 15 байт

Спасибо @muddyfish за исправление

2-Y"yv!iiY"!yyy

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

объяснение

Содержимое стека после каждого шага указано для ясности, используя первый пример в задании.

2-    % Implicitly input number of repetitions of the char of the horizontal line.
      % Subtract 2
      %   STACK: 5
Y"    % Implicitly input char of the horizontal line. Apply run-length decoding
      %   STACK: '-----' (string)
y     % Implicitly input (from below) the char of the corners. Duplicate onto the top
      %   STACK: '+', '-----', '+'
v!    % Concatenate all the stack horizontally. We now have the horizontal line
      % including the corners
      %   STACK: '+-----+'
iiY"  % Take two inputs: char of the vertical line and number of repetitions
      %   STACK: '+-----+', '||'
!     % Transpose. This tranforms the string into a vertical char array, which
      % gives the vertical line
      %   STACK: '+-----+', ['|';'|'] (vertical char array)
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+'
y     % Duplicate from below: this pushes a new copy of the vertical line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'],
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'], '+-----+'
      % Implicitly display

1

Bash + coreutils, 105 байт

printf -- "$3`printf -- "$4%.0s" $(seq $1)`$3`printf "\n$5%.0s" $(seq $2)`%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

Предполагая, что файл, в котором он хранится, называется A.sh, использование будет:

bash A.sh <Horizontal Segment Length w/out Edge Chars> <Vertical Segment Length> '<Left/Right Edge Char>' '<Char Between Edges>' '<Vertical Char>'

Они --необходимы, на случай, если один из входных символов окажется a -, и, printfочевидно, не очень хорошо обрабатывает дефисы в начале строки без двойных тире.

объяснение

Предполагая, что вход 5 2 + * |...

  1. $3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)

    Создайте первый горизонтальный сегмент и вертикальный сегмент все вместе. Это приведет к:

    +*****+
    |
    |
    
  2. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}

    Повторите ранее созданную часть 3раз. Это теперь приводит к:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    |
    |
    
  3. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

    Наконец, передайте предыдущий вывод, чтобы sedизбавиться от последних 2-х линейных сегментов, выводя только первые <Vertical Segment Length>*2+3строки E. Мы наконец получаем то, Eчто хотим:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    

1

PowerShell v2 +, 60 59 байт

param($a,$b,$c,$d,$e)(,($x="$c$($e*($a-2))$c")+,$d*$b)*2;$x

Принимает ввод как отдельные аргументы командной строки. Создает горизонтальную строку, сохраняет ее $xдля последующего использования, затем формирует в массив с помощью оператора запятой ,. Выполняет конкатенацию массива (т.е. добавление элементов в конец)$d сформулированного в массив $bэлементов. Это, в свою очередь, формулируется в виде массива из двух элементов с другим оператором запятой и остается на конвейере. Затем горизонталь $xостается на конвейере. Злоупотребляет форматированием по умолчанию Write-Outputдля вставки новой строки между элементами.

пример

PS C:\Tools\Scripts\golfing> .\the-letter-e-without-e.ps1 5 3 "z" "v" "d"
zdddz
v
v
v
zdddz
v
v
v
zdddz

1

Python 3, 60 байт

Функция

def p(a,b,c,d,e):q=c+e*(a-2)+c;return(q+'\n'+(d+'\n')*b)*2+q

Прецедент

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+

у вас есть 2 слишком много тире на выходе
Blue

1

Brainf * ck, 147 байт

,>,>++++++++[<------<------>>-]<<-->>>,>,>,>+++>++>++++++++++<<[-<<<.<<<[->>+>>>.<<<<<]>>[-<<+>>]>.>>>>>.<[-<<<<<<[->+>>.>>>>.<<<<<<<]>[<+>-]]>>>>]

Принимает ввод из стандартного ввода в качестве первых 5 введенных символов. Первые два имеют 48 вычтенных из их кода ASCII, поэтому 0-9 ведут себя, как и ожидалось. Для чисел> 9 добавьте 48 к числу и используйте соответствующий символ. Остальные три персонажа соответствуют заданию.

Я уверен, что это не оптимальное решение, но жизнь слишком коротка для игры в гольф.

С комментариями:

[
    Input: number number corner vertical horizontal
    Numbers are single digits; add 48 and use the ASCII character corresponding
    to the number you want for numbers > 9.
    First number is the number of characters across. Second is the number down.

    Layout: {first number-2} {second number} {temp} {a} {b} {c}
]

,>,>++++++++[<------<------>>-]<<-->>>,>,>,
now we should have the first five cells with the specified layout
the 6th will hold 3 as a counter and the 7th 2 and the 8th 10 '\n'

>+++>++>++++++++++<<
[  while the 6th cell is not 0
    -
    <<<.    print corner
    <<<[->>+>>>.<<<<<]  print horizontal characters
    >>[-<<+>>]         copy temp back to 1st cell
    >.>>>>>.           print corner and newline
    <
    [ If the second counter is not zero
        -
        <<<<<<[->+>>.>>>>.<<<<<<<]  print vertical and newline n times
        >[<+>-]           copy temp back to 2nd cell
    ]
    >>>>
]

Пример выполнения:

sean@SEANSBOX:~/Dropbox/Code/BF$ ./bf E.b
94^$!
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^

1

PHP, 97 байт

list(,$w,$h,$c,$v,$r)=$argv;echo$b=str_pad($a=str_pad($c,++$w,$r)."$c\n",--$h*2+$w,"$v\n"),$b,$a;

нет петли, только встроенные.

Беги с php -r '<code>' <parameters>.


1

Java 7, 205 129 байт

String c(int w,int h,String a,char b,char c){String r=a,n="\n",l="";for(;w-->2;r+=c);r+=a+n;for(;h-->0;l+=b+n);return r+l+r+l+r;}

-76 байт благодаря анонимному незнакомцу.
PS: не ходите редактировать посты других людей в следующий раз. Если у вас есть что-то для игры в гольф, пожалуйста, оставьте это в качестве комментария, или если он использует совершенно другой подход, вы можете сделать свой собственный ответ. Тем не менее, спасибо за игру в гольф все эти байты, кто бы вы ни были ..

Ungolfed и тестовые случаи:

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

class M {
    static String c(int w, int h, String a, char b, char c){
        String r = a,
               n = "\n",
               l = "";
        for(; w-- > 2; r += c);
        r += a+n;
        for( ;h-- > 0; l += b+n);
        return r+l+r+l+r;
    }

    public static void main(String[] a) {
        System.out.print(c(7, 2, "+", '|', '-'));
        System.out.print(c(9, 4, "?", '¡', '¿'));
    }
}

Выход:

+-----+
|    
|    
+-----+
|    
|    
+-----+

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?

0

Ракетка 124 байта

(λ(w h a b c)(for((i 3))(display a)(for((i w))(display c))(display a)(when(< i 2)(displayln "")(for((j h))(displayln b)))))

Более читаемая форма:

(define(f w h a b c)
  (for((i 3))
    (display a)
    (for((i w))
      (display c))
    (display a)
    (when(< i 2)
      (displayln "")
      (for((j h))
        (displayln b)))))

Тестирование:

(f 7 2 "+" "|" "-" )

+-------+
|
|
+-------+
|
|
+-------+

0

C ++, 121 байт

#import<string>
#import<iostream>
#define f(w,h,C,W,H){std::string s(w,W),t;s=C+s+C+"\n";for(int i=h;i--;)t=t+H+"\n";std::cout<<s+t+s+t+s;}

Ungolfed:

#import<string>
#import<iostream>
#define f(w,h,C,W,H){
    std::string s(w,W),t;  //define two strings, one empty, one with horizontal characters
    s = C+s+C+"\n";        //assemble a horizontal bar
    for(int i=h;i--;) 
        t=t+H+"\n";        //assemble a vertical bar
    std::cout<<s+t+s+t+s;  //print
}

В C ++ не разрешается объявлять функции без типа, как в C. Но макросы, которые ведут себя так же, как функция, вполне возможны. Также обратите внимание, что версия без заглавных букв не скомпилируется, пока вы не добавите «\» к каждой строке макроса, кроме последней. Вы можете сохранить два дополнительных байта, удалив {}, но тогда вы не сможете использовать макрос дважды подряд.

Использование:

int main() {
    f(4,2,'+','-','|')
    f(2,1,'@','#','i')
    return 0;
}

Выход:

+----+
|
|
+----+
|
|
+----+
@##@
i
@##@
i
@##@

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


0

CJam , 23 байта

riri)N*r2*\r*\@r**a3*\*

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

Входные данные в указанном порядке, но должны быть разделены пробелами, а не запятыми. Некоторая трудность заключается в получении правильного порядка ввода для операции соединения* CJam ; для сравнения перестановка ввода может сэкономить 4 байта .

Если входные данные дублированы, A B C D Eпрограмма работает примерно так:

ri     e# get A as integer
ri)N*  e# create B+1 newlines
r2*    e# create 2 Cs
\r*    e# join newlines with D (hereafter ND)
\@     e# bring A & Cs to the front
r*     e# create A Es
*      e# join, puts Es between Cs (hereafter CEC)
a3*    e# makes 3 copies of CEC strings
\*     e# join, puts NDs between CECs

0

Lua (5,2), 144 байта

k,a,p,q=loadstring,arg,io.write,print l,d=k"for i=3,a[1]do p(a[5])end",k"for i=1,a[2]do q(a[4])end"b=a[3]p(b)l()q(b)d()p(b)l()q(b)d()p(b)l()p(b)

Попробуйте онлайн! (Кодирование Земли)

Это должно вывести что-то подобное прямо сейчас:

+@@@@@+
l
l
+@@@@@+
l
l
+@@@@@+

Собственный вклад: 7 2 + l @

Вы можете изменить входные данные в параметрах проекта-> компиляции, и там изменить значения, каждое значение как в примере, но не через запятую, а через пробел.


0

QBIC, 44 байта

::;;;X=A[q,a-2|X=X+C]X=X+A ?X[1,2|[1,b|?B]?X

объяснение

::;;;                 Get the input parameters, 2 numbers and 3 strings
X=A[q,a-2|X=X+C]X=X+A Build the horizontal string: The corner string, x-2 times the filler string and another corner
?X                    Print the horizontal string
[1,2|                 Do the next thing twice
[1,b|?B]?X            Print the right number of vertical strings, then the horizontal string.

0

PHP, 94 байта

<?list($v,$h,$p,$d,$r)=$_GET[a];for($h++;$i<=2*$h;)echo$i++%$h?$d:str_pad($p,$v-1,$r).$p,"\n";

Формат ввода массива в том же порядке, что и предложенная строка


Если вы используете ,"\n"вместо ."\n", вы можете бросить парены для троичного.
Тит

for($h++;$i<=2*$h;)и $i++%$hсохраняет еще один байт.
Тит

$v-1дает только 3 горизонтальных символа для [5,2,+,|,-]. Количество горизонтальных символов, не включая символы левого и правого края
Тит

@ Правильно, у меня есть откат вашего редактирования. 5 по горизонтали означает 3 символа с 2 ребрами = 5. Посмотрите на вопрос. И за идеи других Спасибо
Йорг Хюльсерманн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.