La letra E con E

19

Su tarea es mostrar la siguiente letra "E" en forma de arte ASCII, dadas cinco entradas.

Ejemplos:

Entrada: 7,2,+,|,- (Nota: no tiene que seguir este formato de entrada exacto, y si no lo usa, debe explicar cómo funciona su propio formato de entrada)

Explicación:

  • 7 ancho total, incluidos los caracteres de borde izquierdo y derecho.

  • 2 Número de caracteres verticales.

  • + El carácter que debería mostrarse en los bordes.

  • | El carácter que debe mostrarse verticalmente entre los bordes.

  • - El personaje que debe mostrarse horizontalmente.

Salida del ejemplo anterior:

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


Otros ejemplos:

Entrada: 7,2,@,|,-

Salida:

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


Entrada: 7,2,+,|,#

Salida:

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


Entrada: 8,3,+,|,#

Salida:

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


Entrada: 8,3,+,@,#

Salida:

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


Entrada: 9,4,^,$,!

Salida:

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


La trampa y las lagunas estándar no están permitidas.

Su código no debe imprimir nada en STDERR.

Su código puede aceptar cualquier codificación de caracteres que elija como entrada, pero cualquier codificación de caracteres que elija debe, como mínimo, admitir los 95 caracteres ASCII imprimibles.

El código más corto, en bytes, que completa este desafío con éxito, es el código ganador.

Tabla de clasificación

Buffer Over Read
fuente
27
No me gusta el caso especial de 'no se da entrada'. En mi opinión, no agrega nada al desafío y complica mucho por nada.
Yytsi
3
¿Es el título porque podría dar Ecomo entrada y hacer una Econ Es?
trichoplax
3
A pesar de que no me gusta, ¿qué significa realmente "sin entrada"? Mi solución Floroid simplemente se bloqueará por el resto de la eternidad si no pasa la entrada. Para que mi solución compita, tendrías que pasar 5 ceros y tendría que verificar si las entradas son ceros y tratar en consecuencia ... -1.
Yytsi
44
@TheBitByte Vea mi segundo comentario para ver lo que creo que está realmente mal. Ahora que lo has editado, +1.
Yytsi
1
@Kevin Yup. Estaba teniendo un poco de confusión con la interpretación de 'no input'. La cadena vacía no es igual a 'no input' en mi mente. Y estaba tan acostumbrado a ejecutar el código dentro de un intérprete, en el que literalmente espero que se alimente la entrada, así que es por eso que lo arrojé allí.
Yytsi

Respuestas:

6

05AB1E , 16 14 bytes

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

Explicación

Í×                  # 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

Pruébalo en línea!

Guardado 4 bytes gracias a Adnan.

Emigna
fuente
1
Por curiosidad, ¿por qué estás usando el ©registro: p?
Adnan
1
@Adnan: ¡Buena captura! Iba a hacerlo, pero terminé sin usarlo y olvidé eliminarlo :)
Emigna
1
@muddyfish: leyendo la explicación de la pregunta esa parte no era obvia, así que me la perdí. ¡Gracias por hacérmelo saber!
Emigna
1
También hay un comando envolvente especial que trabaja aquí: Í×s.øU×S»X»D»Xr».
Adnan
2
@Adnan: Tienes razón. ¡Buen pensamiento! Nunca he usado eso antes :)
Emigna
6

Python, 53 51 55 Bytes

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

+4 bytes gracias a @nimi

función lambda anónima, para llamarlo, escriba f=antes. Ejemplo:

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

alternativa, 53 bytes

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

versión anterior con el caso especial de no entrada, 69 65 63 Bytes

yay para cambiar los requisitos a mitad del desafío ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)
KarlKastor
fuente
2
Pequeño error: el primer argumento ( 2en su ejemplo) es la longitud total de la línea, incluidas las esquinas, por lo que la entrada correcta para su forma es f(4,1 ...).
nimi
@nimi gracias por el consejo. (+4 bytes :() El primer ejemplo de OP es un poco confuso. (Algunas de las otras respuestas también tienen este error)
KarlKastor
4

C, 167 161 159 bytes

Si.

#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);}

Pruébelo en Ideone, con algunos casos de prueba

Betseg
fuente
2
pone ("") -> p ('\ n')? o incluso p (10) si eso funciona
RiaD
¿Cómo extrañé eso? Gracias, @RiaD.
betseg
Además, si comienza el bucle con 2, guardará en más bytes
RiaD
3

Rubí, 54 45 42 bytes

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

Es una función anónima que toma la parte diferente de la entrada como parámetros separados y devuelve el resultado como una cadena completa.

Por ejemplo,

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

huellas dactilares

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø
daniero
fuente
3

Javascript (ES6), 64 bytes

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

Ejemplo

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,'+','@','#'))

Arnauld
fuente
¿Esto maneja el caso especial de no entrada?
Conor O'Brien
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }cuando se ejecuta en línea.
noɥʇʎԀʎzɐɹƆ
@AgentCrazyPython - ¿Ejecutar en IE? No tiene soporte para.repeat()
Arnauld
@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ
oh, es ES6 ...
noɥʇʎԀʎzɐɹƆ
3

R, 80 bytes

Bastante repetitivo:

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="")

Sin golf:

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="")
Frédéric
fuente
2

Pyth, 19 bytes

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

Un programa que toma la entrada separada por nueva línea en STDIN del carácter de esquina, número de caracteres horizontales, carácter horizontal, número de caracteres verticales y el carácter vertical, e imprime el resultado.

Pruébalo en línea

Cómo funciona

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
TheBikingViking
fuente
2

MATLAB, 95 92 91 85 81 bytes

Función MATLAB 'E'. (editar: no funciona en Octave)

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,:);

Y sin golfos:

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

La función debe llamarse como:

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

Que volverá:

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

Esto probablemente se puede simplificar un poco, seguiré trabajando en ello. No me gusta tener toda la declaración de función para obtener la entrada, así que veré si puedo mejorar eso.


  • Se ahorraron 3 bytes al simplificar la generación de la primera línea para hacer primero la línea sin esquinas y luego agregar las esquinas, ya que esto reduce el número de veces que se requiere indexar.

  • Otro byte guardado al comenzar con la primera esquina.

  • 6 bytes más reemplazando la repmat(a,3,1)llamada con [a;a;a].

  • Guardado 4 bytes usando asin inicialización específica (ya está declarado en la declaración de función) - gracias @LuisMendo

Tom Carpenter
fuente
1
@LuisMendo interesante. Originalmente lo tenía a=[c a c]allí, pero lo eliminé para reducir las cosas, ya que normalmente no se puede indexar el acceso a una variable inexistente y crearla en el proceso. Olvidé que esta era una función, por alo que ya está declarada en la declaración de la función como valor de retorno. Gracias :)
Tom Carpenter
De hecho, puede hacerlo incluso si no está en una función: indexar una variable inexistente lo crea. Aprende cosas nuevas todos los días.
Tom Carpenter
2

Perl, 40 + 1 ( -n) = 41 bytes

Gracias a @Ton Hospel por guardar 14 bytes y permitir que el programa funcione con entradas mayores a 10.

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

Necesitar -n tan bien como -E(o -M5.010) para correr. Por ejemplo :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'
Dada
fuente
1
@TheBitByte Ok, genial, está hecho, gracias.
Dada
2
Esto ya es muy bueno. Pero puede jugar un poco con el formato de entrada y también resolver la falla que el desafío no dice que las repeticiones son < 10al colocar /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3un archivo (ya que usa $') y llamar con perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(usar líneas nuevas reales) que cuenta como 48 bytes (2 extra discapacidad ya que no se puede combinar con -e)
Ton Hospel
@TonHospel Gracias. Correcto, ni siquiera me había dado cuenta de que esto no funcionaría con números >10. Gran trabajo con el formato de entrada, gracias.
Dada
Esto se está acercando al abuso de la libertad de seleccionar el formato de entrada, pero: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'es de 41 bytes (no más $') y también se deshace de la nueva línea falsa
Ton Hospel
@TonHospel De hecho, se me ocurrió esa solución después de su primera sugerencia, pero no me sentí muy cómoda debido al formato de entrada ... Dado que ambos pensamos en ello, cambié mi respuesta, pero aún así, siento que es un poco engañoso ...
Dada
2

Dyalog APL , 31 29 bytes

Solicita caracteres horizontales, ancho, caracteres de unión, altura, caracteres verticales, en ese orden.

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

⎕⍴⍞ input-horizontal-character y repita los tiempos de ancho de entrada ( abajo)

⍞{... }input-junction-character que será en la función ...

∊⍺⍵⍺ aplanar [[unión], [horizontales], [unión]]

encapsular para que pueda ser parte de una lista

(...), anteponer ...

h←⎕ altura de entrada

⍞⍴⍨ input-vertical-character y repítelo tantas veces

hacer la lista de cadenas en una tabla de caracteres

encapsular (para que pueda repetirse como un todo)

3/ repítelo tres veces

    
┗━ ┗━ ┗━

⍪/ concatenar las tres piezas verticalmente


┣━
┣━
┗━

(esto también los encapsula, así que necesitamos ...)

eliminar la encapsulación

h↓soltar la primera h (filas)

┏━
┣━
┗━

TryAPL en línea!

Adán
fuente
2

C, 130 bytes

#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}

Uso:

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

Salida

+-----+
|
|
+-----+
|
|
+-----+
Giacomo Garabello
fuente
Eliminar los puntos definey comas en sy agregarlo como f(C,O,P,S,_,D,o){W;E;W;E;W;}guarda un byte.
betseg
2

C #, 108 bytes

(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;};

Función anónima que genera cada línea horizontal y vertical y construye la salida final.

Función sin golf:

(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;
};

Programa completo con casos de prueba:

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,'^','$','!'));
        }
    }
}
adrianmp
fuente
2

MATL , 15 bytes

Gracias a @muddyfish por una corrección

2-Y"yv!iiY"!yyy

Pruébalo en línea!

Explicación

El contenido de la pila después de cada paso se indica para mayor claridad, utilizando el primer ejemplo en el desafío.

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
Luis Mendo
fuente
1

Bash + coreutils, 105 bytes

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

Suponiendo que se nombre el archivo dentro del cual se almacena A.sh, el uso sería:

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

El --se necesitan, por si acaso una de las entradas de caracteres pasa a ser una -, yprintf al parecer no maneja guiones en el principio de una cadena muy agradable sin los dobles guiones.

Explicación

Suponiendo que la entrada es 5 2 + * |...

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

    Cree el primer segmento horizontal y el segmento vertical todos juntos. Esto resultaría en:

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

    Repita el 3tiempo parcial creado anteriormente una y otra vez. Esto ahora resulta en:

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

    Finalmente, canalice la salida anterior para seddeshacerse de los últimos 2 segmentos de línea al generar solo las primeras <Vertical Segment Length>*2+3líneas de E. Finalmente conseguimos lo Eque queremos:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    
R. Kap
fuente
1

PowerShell v2 +, 60 59 bytes

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

Toma datos como argumentos de línea de comandos individuales. Construye la cadena horizontal, la almacena $xpara usarla más tarde, luego la forma en una matriz con el operador de coma ,. Realiza la concatenación de matriz (es decir, agrega elementos al final) de$d formulada en una matriz de $belementos. Eso, a su vez, se formula en una matriz de dos elementos con otro operador de coma, y ​​se deja en la tubería. Luego, la horizontal $xse deja en la tubería. Abusa del formato predeterminado deWrite-Output para poner una nueva línea entre los elementos.

Ejemplo

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
AdmBorkBork
fuente
1

Python 3, 60 bytes

Una función

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

Caso de prueba

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+
Dignissimus - Spammy
fuente
tienes 2 guiones demasiados en la salida
Azul
1

Brainf * ck, 147 bytes

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

Toma la entrada de stdin como los primeros 5 caracteres ingresados. Los dos primeros tienen 48 restados de su código ASCII para que 0-9 se comporte como se esperaba. Para números> 9, agregue 48 al número y use el carácter correspondiente. Los otros tres personajes son los especificados en el desafío.

Estoy seguro de que no es la solución óptima, pero la vida es demasiado corta para golff * ck.

Con comentarios:

[
    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
    ]
    >>>>
]

Ejemplo de ejecución:

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

PHP, 97 bytes

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;

sin bucle, solo incorporados.

Corre con php -r '<code>' <parameters>.

Titus
fuente
1

Java 7, 205 129 bytes

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 bytes gracias a un desconocido anónimo.
PD: No vayas a editar las publicaciones de otras personas la próxima vez. Si tiene algo para jugar al golf, déjelo como un comentario, o si está usando un enfoque completamente diferente, podría dar su propia respuesta. Aún así, gracias por jugar todos estos bytes, quienquiera que seas ...

Sin golf y casos de prueba:

Pruébalo aquí

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, "?", '¡', '¿'));
    }
}

Salida:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
Kevin Cruijssen
fuente
0

Raqueta 124 bytes

(λ(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)))))

Forma más legible:

(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)))))

Pruebas:

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

+-------+
|
|
+-------+
|
|
+-------+
rnso
fuente
0

C ++, 121 bytes

#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;}

Sin golf:

#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
}

En C ++ no está permitido declarar funciones sin tipo como en C. Pero las macros que se comportan como una función son totalmente posibles. Tenga en cuenta también que la versión no protegida no se compilará hasta que agregue un "\" a cada uno, pero a la última línea de la macro. Puede guardar dos bytes adicionales eliminando {}, pero no puede usar la macro dos veces seguidas.

Uso:

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

Salida:

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

Pruébalo en línea

Anedar
fuente
0

CJam , 23 bytes

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

Pruébalo en línea!

La entrada está en el orden dado, pero debe estar separada por espacios en lugar de usar una coma. Parte de la dificultad es obtener la entrada en el orden correcto para la operación de unión* de CJam ; para comparar reorganizar la entrada podría ahorrar 4 bytes .

Si las entradas se duplican A B C D E, el programa funciona de la siguiente manera:

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
Linus
fuente
0

Lua (5.2), 144 bytes

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)

Pruébalo en línea! (Tierra de codificación)

Debería generar algo así en este momento:

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

Entrada propia: 7 2 + l @

Puede cambiar la entrada en proyecto-> compilar opciones y allí cambiar los valores, cada valor como en el ejemplo pero no separados por comas sino por espacios.

Lycea
fuente
0

QBIC, 44 bytes

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

Explicación

::;;;                 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.
Steenbergh
fuente
0

PHP, 94 bytes

<?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";

Formatee una matriz en el mismo orden que la cadena sugerida

Jörg Hülsermann
fuente
Si usa en ,"\n"lugar de ."\n", puede soltar los parens para el ternario.
Titus
for($h++;$i<=2*$h;)y $i++%$hguarda otro byte.
Titus
$v-1da solo 3 caracteres horizontales para [5,2,+,|,-]. Número de caracteres horizontales, sin incluir los caracteres del borde izquierdo y derecho
Titus
@Titus es cierto, he revertido su edición. 5 Horizontal significa 3 caracteres con 2 aristas = 5. Observa la pregunta. Y por las otras ideas Gracias
Jörg Hülsermann