La lettre E avec E

19

Votre tâche consiste à afficher l'art ASCII en forme de "E" ci-dessous, avec cinq entrées.

Exemples:

Entrée: 7,2,+,|,-(Remarque: vous n'avez pas à suivre ce format d'entrée exact et si vous ne l'utilisez pas, vous devez expliquer comment fonctionne votre propre format d'entrée)

Explication:

  • 7 largeur totale, y compris les caractères des bords gauche et droit.

  • 2 Nombre de caractères verticaux.

  • + Le caractère qui doit s'afficher sur les bords.

  • | Le caractère qui doit s'afficher verticalement entre les bords.

  • - Le caractère qui doit s'afficher horizontalement.

Sortie de l'exemple ci-dessus:

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


Autres exemples:

Contribution: 7,2,@,|,-

Production:

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


Contribution: 7,2,+,|,#

Production:

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


Contribution: 8,3,+,|,#

Production:

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


Contribution: 8,3,+,@,#

Production:

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


Contribution: 9,4,^,$,!

Production:

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


Les failles de triche et standard ne sont pas autorisées.

Votre code ne doit rien imprimer sur STDERR.

Votre code peut accepter tout encodage de caractères que vous choisissez comme entrée, mais tout encodage de caractères que vous choisissez doit, au minimum, prendre en charge les 95 caractères ASCII imprimables.

Le code le plus court, en octets, qui réussit ce défi, est le code gagnant.

Classement

Mémoire tampon en lecture
la source
27
Je n'aime pas le cas spécial «aucune entrée donnée». À mon avis, cela n'ajoute rien au défi et complique beaucoup pour rien.
Yytsi
3
Le titre est-il parce que vous pourriez donner Een entrée et faire un Eavec Es?
trichoplax
3
Malgré cela, je n'aime pas ça, que signifie vraiment le «pas d'entrée»? Ma solution Floroid se bloquera pour le reste de l'éternité si vous ne transmettez pas d'entrée. Pour que ma solution soit compétitive, il faudrait réussir 5 zéros et je devrais vérifier si les entrées sont des zéros et les traiter en conséquence ...? -1.
Yytsi
4
@TheBitByte Voir mon deuxième commentaire pour voir ce que je pense vraiment mal avec ça. Maintenant que vous avez modifié cela, +1.
Yytsi
1
@Kevin Yup. J'avais juste un peu de confusion avec l'interprétation de «pas d'entrée». La chaîne vide n'est pas égale à «aucune entrée» dans mon esprit. Et j'étais tellement habitué à exécuter le code dans un interpréteur, sur lequel j'attends littéralement que l'entrée soit alimentée, c'est pourquoi j'ai jeté ça là-bas.
Yytsi

Réponses:

6

05AB1E , 16 14 octets

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

Explication

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

Essayez-le en ligne!

Enregistré 4 octets grâce à Adnan.

Emigna
la source
1
Par curiosité, pourquoi utilisez-vous le ©registre: p?
Adnan
1
@Adnan: Bonne prise! J'allais, mais j'ai fini par ne pas l'utiliser et j'ai oublié de le retirer :)
Emigna
1
@muddyfish: Lire l'explication de la question que la partie n'était pas évidente, donc je l'ai ratée. Merci de me le faire savoir!
Emigna
1
Il y a aussi une commande spéciale Surround qui fonctionne ici: Í×s.øU×S»X»D»Xr».
Adnan
2
@Adnan: C'est vrai. Bien pensé! Je n'ai jamais utilisé ça avant :)
Emigna
6

Python, 53 51 55 octets

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

+4 octets grâce à @nimi

fonction lambda anonyme, pour l'appeler, écrivez f=avant. Exemple:

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

alternative, 53 octets

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

ancienne version avec le cas particulier sans entrée, 69 65 63 octets

yay pour changer les exigences à mi-défi ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)
KarlKastor
la source
2
Petit bug: le premier argument ( 2dans votre exemple) est la longueur totale de la ligne, y compris les coins, donc la bonne entrée pour votre forme est f(4,1 ...).
nimi
@nimi merci pour l'astuce. (+4 octets :() Le premier exemple des OP est un peu déroutant (certaines des autres réponses ont également ce bogue)
KarlKastor
4

C, 167 161 159 octets

Ouais.

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

Essayez-le sur Ideone, avec quelques cas de test

betseg
la source
2
met ("") -> p ('\ n')? ou même p (10) si ça marche
RiaD
Comment ai-je pu manquer ça! Merci, @RiaD.
betseg
De plus, si vous démarrez la boucle avec 2, vous économiserez plus d'octets
RiaD
3

Rubis, 54 45 42 octets

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

Il s'agit d'une fonction anonyme qui prend les différentes parties de l'entrée en paramètres séparés et renvoie le résultat sous forme de chaîne complète.

Par exemple,

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

impressions

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø
daniero
la source
3

Javascript (ES6), 64 octets

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

Exemple

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
la source
Est-ce que cela gère le cas particulier de l'absence d'entrée?
Conor O'Brien du
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }lorsqu'il est exécuté en ligne.
noɥʇʎԀʎzɐɹƆ
@AgentCrazyPython - Exécuter sur IE? Il n'a aucun support pour.repeat()
Arnauld
@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ
oh, c'est ES6 ...
noɥʇʎԀʎzɐɹƆ
3

R, 80 octets

Assez répétitif:

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

Non 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
la source
3

Pyke, 16 15 octets

*2mtz:zn+Q*' +D

Essayez-le ici!

Bleu
la source
2

Pyth, 19 octets

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

Un programme qui prend des entrées séparées par des sauts de ligne sur STDIN du caractère de coin, du nombre de caractères horizontaux, du caractère horizontal, du nombre de caractères verticaux et du caractère vertical, et imprime le résultat.

Essayez-le en ligne

Comment ça fonctionne

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
la source
2

MATLAB, 95 92 91 85 81 octets

Fonction MATLAB 'E'. (modifier: ne fonctionne pas sur 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,:);

Et non golfé:

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 fonction doit être appelée comme:

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

Qui reviendra:

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

Cela peut probablement être un peu simplifié, je vais continuer à y travailler. Je n'aime pas avoir la déclaration de fonction entière pour obtenir l'entrée, alors je vais voir si je peux l'améliorer.


  • Enregistrement de 3 octets en simplifiant la génération de la première ligne pour créer d'abord la ligne sans coins, puis ajouter les coins car cela réduit le nombre de fois où l'indexation est requise.

  • Un autre octet enregistré en commençant par le premier coin.

  • 6 octets supplémentaires en remplaçant l' repmat(a,3,1)appel par [a;a;a].

  • 4 octets enregistrés en utilisant asans initialisation spécifique (c'est déjà déclaré dans la déclaration de fonction) - merci @LuisMendo

Tom Carpenter
la source
1
@LuisMendo intéressant. J'avais à l'origine a=[c a c]là-dedans, mais je l'ai supprimé pour réduire les choses, car normalement, vous ne pouvez pas indexer l'accès à une variable inexistante et la créer dans le processus. J'ai oublié qu'il s'agissait d'une fonction, elle aest donc déjà déclarée dans la déclaration de fonction comme valeur de retour. Merci :)
Tom Carpenter
En fait, vous pouvez le faire même si ce n'est pas dans une fonction - l'indexation d'une variable inexistante la crée. Apprenez de nouvelles choses chaque jour.
Tom Carpenter
2

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

Merci à @Ton Hospel pour avoir économisé 14 octets et permis au programme de fonctionner avec une entrée supérieure à 10.

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

Avoir besoin -n ainsi que -E(ou -M5.010) pour fonctionner. Par exemple :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'
Dada
la source
1
@TheBitByte Très bien, c'est fait, merci.
Dada
2
C'est déjà très bien. Mais vous pouvez jouer un peu avec le format d'entrée et résoudre également le défaut que le défi ne dit pas que les répétitions sont < 10en mettant /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3un fichier (car il utilise $') et en appelant avec perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(utilisez de vraies nouvelles lignes) qui compte pour 48 octets (2 supplémentaires handicap car il ne peut pas être combiné avec -e)
Ton Hospel
@TonHospel Merci. Bon, je n'avais même pas remarqué que ça ne marcherait pas avec les chiffres >10.. Excellent travail avec le format d'entrée, merci.
Dada
Cela se rapproche de l'abus de la liberté de sélectionner le format d'entrée, mais: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'est de 41 octets (pas plus$' ) et se débarrasse également de la nouvelle ligne traînante parasite
Ton Hospel
@TonHospel En effet, j'ai trouvé cette solution après votre première suggestion, mais je n'étais pas trop à l'aise avec elle en raison du format d'entrée ... Puisque nous y avons tous deux pensé, j'ai changé de réponse, mais j'ai quand même l'impression c'est un peu tricheur ...
Dada
2

Dyalog APL , 31 29 octets

Demande le caractère horizontal, la largeur, le caractère de jonction, la hauteur, le caractère vertical - dans cet ordre.

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

⎕⍴⍞saisissez le caractère horizontal et répétez les temps de largeur d'entrée ( ci-dessous)

⍞{... }caractère de jonction d'entrée qui sera dans la fonction ...

∊⍺⍵⍺ aplatir [[jonction], [horizontales], [jonction]]

encapsuler afin qu'il puisse faire partie d'une liste

(... ),ajouter ...

h←⎕ hauteur d'entrée

⍞⍴⍨ saisissez le caractère vertical et répétez-le plusieurs fois

faire la liste des chaînes dans une table de caractères

encapsuler (afin qu'il puisse être répété dans son ensemble)

3/ répéter trois fois

    
┗━ ┗━ ┗━

⍪/ concaténer les trois pièces verticalement


┣━
┣━
┗━

(Cela les encapsule aussi, nous devons donc ...)

supprimer l'encapsulation

h↓déposer les premiers h (rangées)

┏━
┣━
┗━

TryAPL en ligne!

Adam
la source
2

C, 130 octets

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

Usage:

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

Production

+-----+
|
|
+-----+
|
|
+-----+
Giacomo Garabello
la source
Supprimer les points-virgules dans defines et les ajouter en tant que f(C,O,P,S,_,D,o){W;E;W;E;W;}sauvegarde un octet.
betseg
2

C #, 108 octets

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

Fonction anonyme qui génère chaque ligne horizontale et verticale et crée la sortie finale.

Fonction non golfée:

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

Programme complet avec cas de test:

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
la source
2

MATL , 15 octets

Merci à @muddyfish pour une correction

2-Y"yv!iiY"!yyy

Essayez-le en ligne!

Explication

Le contenu de la pile après chaque étape est indiqué pour plus de clarté, en utilisant le premier exemple du défi.

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
la source
1

Bash + coreutils, 105 octets

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

En supposant que le fichier dans lequel il est stocké est nommé A.sh, l'utilisation serait:

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

Les --sont nécessaires, juste au cas où l'une des entrées de caractères se trouve être un -, etprintf apparemment ne gère pas les tirets au début d'une chaîne très agréable sans les doubles tirets.

Explication

En supposant que l'entrée est 5 2 + * |...

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

    Créez le premier segment horizontal et le segment vertical tous ensemble. Il en résulterait:

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

    Répétez les temps partiels créés précédemment 3. Cela se traduit désormais par:

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

    Enfin, dirigez la sortie précédente vers sedpour vous débarrasser des 2 derniers segments de ligne en ne sortant que les premières <Vertical Segment Length>*2+3lignes de la E. Nous obtenons enfin ce que Enous voulons:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    
R. Kap
la source
1

PowerShell v2 +, 60 59 octets

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

Prend l'entrée en tant qu'arguments de ligne de commande individuels. Construit la chaîne horizontale, la stocke dans $xpour une utilisation ultérieure, puis la forme dans un tableau avec l'opérateur virgule ,. Effectue la concaténation du tableau (c'est-à-dire l'ajout d'éléments à la fin) de la $dformule dans un tableau d' $béléments. Cela, à son tour, est formulé dans un tableau de deux éléments avec un autre opérateur virgule, et est laissé sur le pipeline. Ensuite, l'horizontale $xest laissée sur le pipeline. Abuse le formatage par défaut deWrite-Output pour mettre une nouvelle ligne entre les éléments.

Exemple

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
la source
1

Python 3, 60 octets

Une fonction

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

Cas de test

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+
Dignissimus - Spammy
la source
vous avez 2 tirets de trop dans la sortie
Blue
1

Brainf * ck, 147 octets

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

Prend l'entrée de stdin comme les 5 premiers caractères entrés. Les deux premiers ont 48 soustraits de leur code ASCII, donc 0-9 se comportent comme prévu. Pour les nombres> 9, ajoutez 48 au nombre et utilisez le caractère correspondant. Les trois autres personnages sont tels que spécifiés dans le défi.

Je suis sûr que ce n'est pas la solution optimale mais la vie est trop courte pour faire du golf brainf * ck.

Avec commentaires:

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

Exemple d'exécution:

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

PHP, 97 octets

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;

pas de boucle, seulement des builtins.

Courez avec php -r '<code>' <parameters>.

Titus
la source
1

Java 7, 205 129 octets

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 octets grâce à un inconnu anonyme.
PS: N'allez pas modifier les messages d'autres personnes la prochaine fois. Si vous avez quelque chose à jouer au golf, veuillez le laisser comme un commentaire, ou s'il utilise une approche complètement différente, vous pouvez faire votre propre réponse. Merci encore d'avoir joué à tous ces octets, qui que vous soyez.

Cas non testés et testés:

Essayez-le ici.

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

Production:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
Kevin Cruijssen
la source
0

Raquette 124 octets

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

Forme plus lisible:

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

Essai:

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

+-------+
|
|
+-------+
|
|
+-------+
rnso
la source
0

C ++, 121 octets

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

Non 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 ++, il n'est pas permis de déclarer des fonctions sans type comme en C. Mais les macros qui se comportent comme une fonction sont totalement possibles. Notez également que la version non golfée ne sera pas compilée jusqu'à ce que vous ajoutiez un "\" à chaque ligne de la macro, sauf la dernière. Vous pouvez enregistrer deux octets supplémentaires en supprimant le {}, mais vous ne pouvez pas utiliser la macro deux fois de suite.

Usage:

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

Production:

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

Essayez-le en ligne

Anedar
la source
0

CJam , 23 octets

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

Essayez-le en ligne!

L'entrée est dans l'ordre donné, mais doit être séparée par des espaces au lieu d'utiliser une virgule. Une partie de la difficulté consiste à obtenir la saisie du bon ordre pour l' opération de jointure* de CJam ; à titre de comparaison, réorganiser l'entrée pourrait économiser 4 octets .

Si les entrées sont doublées, A B C D Ele programme fonctionne comme ceci:

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
la source
0

Lua (5.2), 144 octets

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)

Essayez-le en ligne! (Terrain de codage)

Il devrait sortir quelque chose comme ça en ce moment:

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

Propre entrée: 7 2 + l @

Vous pouvez changer l'entrée dans le projet-> options de compilation et y changer les valeurs, chaque valeur comme dans l'exemple mais pas séparée par des virgules mais par des espaces.

Lycea
la source
0

QBIC, 44 octets

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

Explication

::;;;                 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
la source
0

PHP, 94 octets

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

Format d'entrée d'un tableau dans le même ordre que la chaîne suggérée

Jörg Hülsermann
la source
Si vous utilisez ,"\n"au lieu de ."\n", vous pouvez supprimer les parens pour le ternaire.
Titus
for($h++;$i<=2*$h;)et $i++%$henregistre un autre octet.
Titus
$v-1donne seulement 3 caractères horizontaux pour [5,2,+,|,-]. Nombre de caractères horizontaux, sans compter les caractères des bords gauche et droit
Titus
@Titus c'est vrai, j'ai annulé votre modification. 5 Horizontal signifie 3 Caractères avec 2 bords = 5. Regardez la question. Et pour les autres idées Merci
Jörg Hülsermann