Der Buchstabe E mit E

19

Ihre Aufgabe ist es, den folgenden Buchstaben "E" als ASCII-Grafik anzuzeigen, wenn Sie fünf Eingaben vornehmen.

Beispiele:

Eingabe: 7,2,+,|,-(Hinweis: Sie müssen dieses genaue Eingabeformat nicht befolgen. Wenn Sie es nicht verwenden, müssen Sie erläutern, wie Ihr eigenes Eingabeformat funktioniert.)

Erläuterung:

  • 7 Gesamtbreite, einschließlich der Zeichen am linken und rechten Rand.

  • 2 Anzahl vertikaler Zeichen.

  • + Das Zeichen, das an den Rändern angezeigt werden soll.

  • | Das Zeichen, das vertikal zwischen den Rändern angezeigt werden soll.

  • - Das Zeichen, das horizontal angezeigt werden soll.

Ausgabe des obigen Beispiels:

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


Andere Beispiele:

Eingang: 7,2,@,|,-

Ausgabe:

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


Eingang: 7,2,+,|,#

Ausgabe:

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


Eingang: 8,3,+,|,#

Ausgabe:

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


Eingang: 8,3,+,@,#

Ausgabe:

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


Eingang: 9,4,^,$,!

Ausgabe:

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


Betrug und Standardlücken sind nicht erlaubt.

Ihr Code darf nichts an STDERR drucken.

Ihr Code akzeptiert möglicherweise jede von Ihnen als Eingabe gewählte Zeichenkodierung, aber jede von Ihnen gewählte Zeichenkodierung muss mindestens alle 95 druckbaren ASCII-Zeichen unterstützen.

Der kürzeste Code in Byte, der diese Herausforderung erfolgreich abschließt, ist der Gewinncode.

Bestenliste

Puffer überlesen
quelle
27
Ich mag den Sonderfall "keine Eingabe" nicht. Meiner Meinung nach trägt es nicht zur Herausforderung bei und erschwert vieles umsonst.
Yytsi
3
Liegt der Titel daran, dass Sie Eals Eingabe geben und eine Emit Es machen könnten ?
Trichoplax
3
Trotzdem mag ich es nicht, was bedeutet das "keine Eingabe" wirklich? Meine Floroid-Lösung bleibt nur für den Rest der Ewigkeit hängen, wenn Sie keine Eingabe übergeben. Um mit meiner Lösung zu konkurrieren, müssten Sie 5 Nullen übergeben und ich müsste prüfen, ob die Eingaben Nullen sind, und entsprechend behandeln ...? -1.
Yytsi
4
@TheBitByte Schau in meinem zweiten Kommentar nach, was ich wirklich falsch finde. Nachdem du das herausgeschnitten hast, +1.
Yytsi
1
@ Kevin Yup. Ich war nur ein wenig verwirrt mit der Interpretation von "keine Eingabe". Eine leere Zeichenkette ist in meinen Augen nicht gleich 'keine Eingabe'. Und ich war es so gewohnt, den Code in einem Interpreter auszuführen, auf den ich buchstäblich warte, bis die Eingabe eingeht. Deshalb habe ich das hier rausgeworfen.
Yytsi

Antworten:

6

05AB1E , 16 14 Bytes

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

Erläuterung

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

Probieren Sie es online!

4 Bytes gespart dank Adnan.

Emigna
quelle
1
Warum benutzt du aus Neugier das ©Register: p?
Adnan
1
@Adnan: Guter Fang! Ich wollte, aber am Ende nicht verwendet und vergessen, es zu entfernen :)
Emigna
1
@muddyfish: Als ich die Erklärung aus der Frage las, dass dieser Teil nicht offensichtlich war, habe ich ihn verpasst. Danke für die Information!
Emigna
1
Es gibt auch einen speziellen Surround - Befehl, der hier arbeitet: Í×s.øU×S»X»D»Xr».
Adnan
2
@Adnan: Richtig. Guter Einfall! Ich habe das noch nie benutzt :)
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 dank @nimi

anonyme Lambda-Funktion, um es aufzurufen, schreiben Sie f=davor. Beispiel:

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

alternativ 53 Bytes

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

alte Version mit dem Sonderfall ohne Eingabe, 69 65 63 Bytes

yay, um die Anforderungen mitten in der Herausforderung zu ändern ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)
KarlKastor
quelle
2
Kleiner Fehler: Das erste Argument ( 2in Ihrem Beispiel) ist die Gesamtlänge der Linie, einschließlich der Ecken, sodass die richtige Eingabe für Ihre Form erfolgt f(4,1 ...).
nimi
@nimi danke für den tipp. (+4 Bytes :() OPs erstes Beispiel ist ein bisschen verwirrend. (Einige der anderen Antworten haben auch diesen Fehler)
KarlKastor
4

C 167 161 159 Bytes

Ja.

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

Probieren Sie es auf Ideone mit einigen Testfällen

betseg
quelle
2
setzt ("") -> p ('\ n')? oder sogar p (10), wenn das
klappt
Wie habe ich das vermisst! Danke, @RiaD.
Betseg
Auch wenn Sie die Schleife mit 2 beginnen, werden Sie mehr Bytes
speichern
3

Ruby, 54 45 42 Bytes

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

Es ist eine anonyme Funktion, die den unterschiedlichen Teil der Eingabe als separate Parameter verwendet und das Ergebnis als vollständige Zeichenfolge zurückgibt.

Beispielsweise,

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

druckt

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø
daniero
quelle
3

Javascript (ES6), 64 Byte

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

Beispiel

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
quelle
Behandelt dies den speziellen Fall, dass keine Eingabe erfolgt?
Conor O'Brien
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }wenn inline laufen.
3.
@AgentCrazyPython - Auf IE ausführen? Es hat keine Unterstützung für.repeat()
Arnauld
@ Arnauld naw, Safari
noɥʇʎԀʎzɥʇʎԀʎ
Oh, es ist ES6 ...
noɥʇʎԀʎzɥʇʎԀʎ
3

R, 80 Bytes

Ziemlich repetitiv:

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

Pyth, 19 Bytes

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

Ein Programm, das die Eingabe des Eckzeichens, der Anzahl der horizontalen Zeichen, des horizontalen Zeichens, der Anzahl der vertikalen Zeichen und des vertikalen Zeichens mit Zeilenumbrüchen auf STDIN vornimmt und das Ergebnis druckt.

Probieren Sie es online aus

Wie es funktioniert

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
quelle
2

MATLAB, 95 92 91 85 81 Bytes

MATLAB 'E' Funktion. (edit: funktioniert nicht auf 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,:);

Und ungolfed:

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

Die Funktion sollte wie folgt aufgerufen werden:

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

Welches wird zurückkehren:

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

Dies kann wahrscheinlich ein wenig vereinfacht werden, ich werde weiter daran arbeiten. Ich mag es nicht, die gesamte Funktionsdeklaration zu haben, um die Eingabe zu erhalten, also werde ich sehen, ob ich das verbessern kann.


  • Einsparung von 3 Bytes durch Vereinfachung der Erzeugung der ersten Zeile, um zuerst die Zeile ohne Ecken zu erstellen und dann die Ecken hinzuzufügen, da dies die Anzahl der erforderlichen Indizierungen verringert.

  • Ein weiteres Byte wird gespeichert, indem mit der ersten Ecke begonnen wird.

  • 6 weitere Bytes durch Ersetzen von repmat(a,3,1)call durch [a;a;a].

  • 4 Bytes aohne spezielle Initialisierung eingespart (bereits in der Funktionsdeklaration deklariert) - danke @LuisMendo

Tom Carpenter
quelle
1
@ LuisMendo interessant. Ich hatte ursprünglich a=[c a c]dort, aber es entfernt, um Dinge zu verkleinern, da Sie normalerweise nicht auf eine nicht vorhandene Variable indizieren und sie dabei erstellen können. Ich habe vergessen, dass dies eine Funktion war und daher abereits in der Funktionsdeklaration als Rückgabewert deklariert ist. Vielen Dank :)
Tom Carpenter
Tatsächlich können Sie dies auch dann tun, wenn Sie sich nicht in einer Funktion befinden. Indizieren Sie eine nicht vorhandene Variable, um sie zu erstellen. Lerne jeden Tag neue Dinge.
Tom Carpenter
2

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

Vielen Dank an @Ton Hospel für das Speichern von 14 Bytes und das Zulassen, dass das Programm mit Einträgen größer als 10 arbeitet.

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

Müssen -nso gut wie -E(oder -M5.010) laufen. Zum Beispiel :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'
Dada
quelle
1
@TheBitByte Ok, großartig, es ist geschafft, danke.
Dada
2
Das ist schon sehr gut. Aber Sie können ein bisschen mit dem Eingabeformat spielen und auch den Fehler beheben, dass die Herausforderung nicht besagt, dass Wiederholungen auftreten, < 10indem Sie /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3eine Datei einfügen (da sie verwendet wird $') und mit perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(echte Zeilenumbrüche verwenden ) aufrufen, was 48 Byte (2 zusätzliche) entspricht Handicap, da es nicht mit kombiniert werden kann -e)
Ton Hospel
@TonHospel Danke. Richtig, ich hatte nicht einmal bemerkt, dass dies nicht mit Zahlen >10funktionieren würde . Tolle Arbeit mit dem Eingabeformat, danke.
Dada
Dies steht kurz davor, die Freiheit zur Auswahl des Eingabeformats zu missbrauchen, aber: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'beträgt 41 Byte (nicht mehr $') und beseitigt auch die falsche, nachgestellte Newline
Ton Hospel
@TonHospel Nach Ihrem ersten Vorschlag bin ich auf diese Lösung gekommen, aber ich habe mich aufgrund des Eingabeformats nicht damit wohlgefühlt ... Da wir beide darüber nachgedacht haben, habe ich meine Antwort geändert, aber trotzdem habe ich Lust Es ist ein bisschen betrogen ...
Dada
2

Dyalog APL , 31 29 Bytes

Fordert zur Eingabe von horizontalem Zeichen, Breite, Kreuzungszeichen, Höhe und vertikalem Zeichen in dieser Reihenfolge auf.

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

⎕⍴⍞Eingabe-Horizontal-Zeichen und Wiederholung der Eingabe-Breiten-Zeiten ( unten)

⍞{... }Eingabe-Junction-Zeichen welches which sein wird in der Funktion ...

∊⍺⍵⍺ Abflachen [[Kreuzung], [Horizontale], [Kreuzung]]

kapseln, damit es Teil einer Liste sein kann

(... ),voranstellen ...

h←⎕ Eingabehöhe

⍞⍴⍨ gib das vertikale Zeichen ein und wiederhole es so oft

Machen Sie die Liste der Zeichenfolgen in eine Zeichentabelle

kapseln (so kann es als Ganzes wiederholt werden)

3/ wiederhole es dreimal

    
┗━ ┗━ ┗━

⍪/ Verketten Sie die drei Teile vertikal


┣━
┣━
┗━

(Das kapselt sie auch, also müssen wir ...)

Entfernen Sie die Kapselung

h↓Lass die ersten h (Reihen) fallen

┏━
┣━
┗━

TryAPL online!

Adam
quelle
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}

Verwendung:

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

Ausgabe

+-----+
|
|
+-----+
|
|
+-----+
Giacomo Garabello
quelle
Durch Entfernen der Semikolons in defines und Hinzufügen als wird f(C,O,P,S,_,D,o){W;E;W;E;W;}ein Byte gespeichert.
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;};

Anonyme Funktion, die jede horizontale und vertikale Linie generiert und die endgültige Ausgabe erstellt.

Ungolfed Funktion:

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

Volles Programm mit Testfällen:

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
quelle
2

MATL , 15 Bytes

Danke an @muddyfish für die Korrektur

2-Y"yv!iiY"!yyy

Probieren Sie es online!

Erläuterung

Der Stapelinhalt nach jedem Schritt wird der Übersichtlichkeit halber anhand des ersten Beispiels in der Abfrage angegeben.

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
quelle
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

Unter der Annahme, dass die Datei, in der dies gespeichert ist, benannt ist A.sh, wäre die Verwendung:

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

Die --werden benötigt, nur für den Fall, dass eine der Zeicheneingaben a -, und istprintf anscheinend keine Striche am Anfang einer Zeichenfolge verarbeitet, sehr schön ohne die doppelten Striche.

Erläuterung

Angenommen, die Eingabe ist 5 2 + * |...

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

    Erstellen Sie das erste horizontale und vertikale Segment zusammen. Dies hätte zur Folge:

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

    Wiederholen Sie die zuvor erstellten Teilzeiten 3. Dies führt nun zu:

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

    Leiten Sie zum Schluss die vorherige Ausgabe weiter sed, um die letzten 2 Zeilensegmente zu entfernen, indem Sie nur die ersten <Vertical Segment Length>*2+3Zeilen der ausgeben E. Wir bekommen endlich das, was Ewir wollen:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    
R. Kap
quelle
1

PowerShell v2 +, 60 bis 59 Byte

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

Nimmt Eingaben als einzelne Befehlszeilenargumente an. Konstruiert die horizontale Zeichenfolge, speichert diese $xfür die spätere Verwendung und formt sie dann mit dem Komma-Operator zu einem Array ,. Führt eine Array-Verkettung durch (dh das Hinzufügen von Elementen zum Ende) und $dformuliert sie zu einem Array von $bElementen. Dies wird wiederum mit einem anderen Komma-Operator in ein Array aus zwei Elementen formuliert und in der Pipeline belassen. Dann $xbleibt die Horizontale in der Pipeline. Verwendet die Standardformatierung von Write-Output, um eine neue Zeile zwischen Elementen einzufügen.

Beispiel

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
quelle
1

Python 3, 60 Bytes

Eine Funktion

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

Testfall

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+
Dignissimus - Spammy
quelle
Sie haben 2 zu viele Striche in der Ausgabe
Blau
1

Brainf * ck, 147 Bytes

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

Übernimmt die Eingabe von stdin als die ersten 5 eingegebenen Zeichen. Die ersten beiden haben 48 von ihrem ASCII-Code subtrahiert, so dass sich 0-9 wie erwartet verhält. Fügen Sie bei Zahlen> 9 der Zahl 48 hinzu und verwenden Sie das entsprechende Zeichen. Die anderen drei Zeichen entsprechen den Angaben in der Challenge.

Ich bin mir sicher, dass dies nicht die optimale Lösung ist, aber das Leben ist zu kurz, um es zu verstehen.

Mit Kommentaren:

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

Beispiellauf:

sean@SEANSBOX:~/Dropbox/Code/BF$ ./bf E.b
94^$!
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^
Sean McBane
quelle
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;

keine Schleife, nur eingebaute.

Laufen Sie mit php -r '<code>' <parameters>.

Titus
quelle
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 dank eines anonymen Fremden.
PS: Bearbeiten Sie das nächste Mal nicht die Beiträge anderer Leute. Wenn Sie etwas zum Golfen haben, hinterlassen Sie es bitte als Kommentar, oder wenn es einen völlig anderen Ansatz verwendet, können Sie Ihre eigene Antwort geben. Trotzdem vielen Dank, dass Sie all diese Bytes weggolfen haben - wer auch immer Sie sind.

Ungolfed & Testfälle:

Probieren Sie es hier aus.

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

Ausgabe:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
Kevin Cruijssen
quelle
0

Schläger 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)))))

Mehr lesbare Form:

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

Testen:

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

+-------+
|
|
+-------+
|
|
+-------+
rnso
quelle
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;}

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
}

In C ++ ist es nicht erlaubt, Funktionen ohne Typ wie in C zu deklarieren. Makros, die sich wie eine Funktion verhalten, sind jedoch durchaus möglich. Beachten Sie auch, dass die ungolfed-Version erst kompiliert wird, wenn Sie jedem außer der letzten Zeile des Makros ein "\" hinzufügen. Sie könnten zwei zusätzliche Bytes sparen, indem Sie das {} entfernen, aber dann können Sie das Makro nicht zweimal hintereinander verwenden.

Verwendung:

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

Ausgabe:

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

Probieren Sie es online aus

Anedar
quelle
0

CJam , 23 Bytes

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

Probieren Sie es online!

Die Eingabe erfolgt in der angegebenen Reihenfolge, sollte jedoch durch Leerzeichen getrennt sein, anstatt ein Komma zu verwenden. Ein Grund für die Schwierigkeit besteht darin, den Eingang in die richtige Reihenfolge für CJam's zu bringen Join-Operation von zu bringen* . Zum Vergleich: Durch Neuanordnen der Eingaben in könnten 4 Bytes eingespart werden .

Wenn die Eingaben synchronisiert sind A B C D E, funktioniert das Programm wie folgt:

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

Probieren Sie es online! (Codierungsgrund)

Es sollte jetzt so etwas ausgeben:

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

Eigene Eingabe: 7 2 + l @

Sie können die Eingabe in project-> compile options ändern und dort die Werte ändern, wobei jeder Wert wie im Beispiel, jedoch nicht durch Kommas, sondern durch Leerzeichen getrennt ist.

Lycea
quelle
0

QBIC, 44 Bytes

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

Erläuterung

::;;;                 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
quelle
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";

Geben Sie ein Array in derselben Reihenfolge wie die vorgeschlagene Zeichenfolge ein

Jörg Hülsermann
quelle
Wenn Sie ,"\n"anstelle von verwenden ."\n", können Sie die Parens für das Ternär löschen.
Titus
for($h++;$i<=2*$h;)und $i++%$hspeichert ein weiteres Byte.
Titus
$v-1gibt nur 3 horizontale Zeichen für [5,2,+,|,-]. Anzahl der horizontalen Zeichen, ohne die Zeichen am linken und rechten Rand
Titus
@Titus das stimmt, ich habe deine Bearbeitung rückgängig gemacht. 5 Horizontal bedeutet 3 Zeichen mit 2 Kanten = 5. Schauen Sie sich die Frage an. Und für die anderen Ideen Danke
Jörg Hülsermann