Litera E z literą E

19

Twoim zadaniem jest wyświetlenie poniższej litery ASCII w kształcie litery „E”, przy pięciu wejściach.

Przykłady:

Dane wejściowe: 7,2,+,|,-(Uwaga: nie musisz przestrzegać dokładnie tego formatu wejściowego, a jeśli go nie używasz, musisz wyjaśnić, jak działa Twój własny format wejściowy)

Wyjaśnienie:

  • 7 całkowita szerokość, w tym znaki lewej i prawej krawędzi.

  • 2 Liczba znaków pionowych.

  • + Znak, który powinien być wyświetlany na krawędziach.

  • | Znak, który powinien wyświetlać się pionowo między krawędziami.

  • - Znak, który powinien wyświetlać się poziomo.

Wynik powyższego przykładu:

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


Inne przykłady:

Wejście: 7,2,@,|,-

Wynik:

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


Wejście: 7,2,+,|,#

Wynik:

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


Wejście: 8,3,+,|,#

Wynik:

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


Wejście: 8,3,+,@,#

Wynik:

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


Wejście: 9,4,^,$,!

Wynik:

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


Oszukiwanie i standardowe luki są niedozwolone.

Twój kod nie może drukować niczego do STDERR.

Twój kod może akceptować dowolne kodowanie znaków, które wybierzesz jako dane wejściowe, ale każde wybrane kodowanie znaków musi co najmniej obsługiwać wszystkie 95 znaków drukowalnych ASCII.

Najkrótszym kodem w bajtach, który pomyślnie ukończył to wyzwanie, jest kod wygrywający.

Tabela liderów

Bufor przekroczony
źródło
27
Nie podoba mi się szczególny przypadek „bez danych wejściowych”. Moim zdaniem nic nie dodaje do wyzwania i bardzo komplikuje się za nic.
Yytsi
3
Czy tytuł, ponieważ możesz podać Ejako dane wejściowe i zrobić Ez Es?
trichoplax
3
Mimo to nie lubię tego, co tak naprawdę oznacza „brak wkładu”? Moje rozwiązanie Floroid zawiesi się na całą wieczność, jeśli nie przejdziecie danych wejściowych. Aby moje rozwiązanie było konkurencyjne, musiałbyś przekazać 5 zer i musiałbym sprawdzić, czy dane wejściowe są zerami i odpowiednio potraktować ...? -1.
Yytsi
4
@TheBitByte Zobacz mój drugi komentarz, aby zobaczyć, co moim zdaniem jest z nim naprawdę nie tak. Po zakończeniu edycji +1.
Yytsi
1
@Kevin Yup. Miałem tylko trochę zamieszania przy interpretacji „bez wkładu”. Pusty ciąg nie jest w moim umyśle równy „brak danych wejściowych”. Byłem tak przyzwyczajony do uruchamiania kodu wewnątrz interpretera, na którym dosłownie czekam na dane wejściowe, dlatego go tam wyrzuciłem.
Yytsi

Odpowiedzi:

6

05AB1E , 16 14 bajtów

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

Wyjaśnienie

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

Wypróbuj online!

Zaoszczędzono 4 bajty dzięki Adnan.

Emigna
źródło
1
Z ciekawości dlaczego korzystasz z ©rejestru: p?
Adnan
1
@Adnan: Good catch! Miałem zamiar, ale ostatecznie go nie
użyłem
1
@muddyfish: Czytanie wyjaśnienia pytania nie było oczywiste, więc przegapiłem to. Dzięki, że dałeś mi znać!
Emigna
1
Jest też specjalna komenda przestrzennego, który pracuje tutaj: Í×s.øU×S»X»D»Xr».
Adnan
2
@Adnan: Masz rację. Dobre myślenie! Nigdy wcześniej tego nie używałem :)
Emigna
6

Python, 53 51 55 bajtów

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

+4 bajtów dzięki @nimi

anonimowa funkcja lambda, aby ją nazwać, napisz f=przed nią. Przykład:

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

alternatywnie, 53 bajtów

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

stara wersja ze specjalnym przypadkiem braku danych wejściowych, 69 65 63 bajtów

yay na zmianę wymagań w połowie wyzwania ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)
KarlKastor
źródło
2
Mały błąd: pierwszym argumentem ( 2w twoim przykładzie) jest całkowita długość linii, łącznie z narożnikami, więc właściwym wejściem dla twojego kształtu jest f(4,1 ...).
nimi
@nimi dzięki za wskazówkę. (+4 bajty :() Pierwszy przykład OP jest nieco mylący. (Niektóre inne odpowiedzi również mają ten błąd)
KarlKastor
4

C, 167 161 159 bajtów

Tak.

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

Wypróbuj na Ideone, z kilkoma przypadkami testowymi

betseg
źródło
2
puts ("") -> p ('\ n')? a nawet p (10), jeśli to zadziała
RiaD
Jak mi tego brakowało! Dzięki, @RiaD.
betseg
Również jeśli uruchomisz pętlę z 2, zaoszczędzisz na większej liczbie bajtów
RiaD
3

Rubin, 54 45 42 bajtów

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

Jest to anonimowa funkcja, która bierze inną część danych wejściowych jako osobne parametry i zwraca wynik jako pełny ciąg.

Na przykład,

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

odbitki

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø
daniero
źródło
3

JavaScript (ES6), 64 bajty

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

Przykład

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
źródło
Czy to obsługuje specjalny przypadek braku danych wejściowych?
Conor O'Brien
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }po uruchomieniu w linii.
noɥʇʎԀʎzɐɹƆ
@AgentCrazyPython - Uruchom na IE? Nie ma wsparcia dla.repeat()
Arnauld
@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ
och, to ES6 ...
noɥʇʎԀʎzɐɹƆ
3

R, 80 bajtów

Dość powtarzalne:

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

Nie golfowany:

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
źródło
3

Pyke, 16 15 bajtów

*2mtz:zn+Q*' +D

Wypróbuj tutaj!

niebieski
źródło
2

Pyth, 19 bajtów

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

Program, który pobiera separator nowej linii do STDIN znaku narożnego, liczby znaków poziomych, znaku poziomego, liczby znaków pionowych i znaku pionowego, i drukuje wynik.

Wypróbuj online

Jak to działa

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
źródło
2

MATLAB, 95 92 91 85 81 bajtów

Funkcja „E” MATLAB. (edycja: nie działa na 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,:);

I bez golfa:

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

Funkcję należy wywołać w następujący sposób:

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

Który zwróci:

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

Prawdopodobnie można to nieco uprościć, będę dalej nad tym pracował. Nie lubię mieć całej deklaracji funkcji, aby uzyskać dane wejściowe, więc zobaczę, czy mogę to poprawić.


  • Zaoszczędzono 3 bajty, upraszczając generowanie pierwszego wiersza, aby najpierw utworzyć wiersz bez narożników, a następnie dodać narożniki, ponieważ zmniejsza to liczbę wymaganych indeksowań.

  • Kolejny bajt zapisany, zaczynając od pierwszego rogu.

  • 6 dodatkowych bajtów, zastępując repmat(a,3,1)połączenie przez [a;a;a].

  • Zaoszczędzono 4 bajty przy użyciu abez konkretnej inicjalizacji (jest już zadeklarowana w deklaracji funkcji) - dzięki @LuisMendo

Tom Carpenter
źródło
1
@LuisMendo ciekawe. Pierwotnie miałem a=[c a c]tam, ale usunąłem to, aby zmniejszyć rzeczy, ponieważ normalnie nie można indeksować dostępu do nieistniejącej zmiennej i tworzyć ją w procesie. Zapomniałem, że była to funkcja, więc ajest już zadeklarowana w deklaracji funkcji jako wartość zwracana. Dzięki :)
Tom Carpenter
W rzeczywistości możesz to zrobić, nawet jeśli nie jest w funkcji - indeksowanie nieistniejącej zmiennej ją tworzy. Ucz się nowych rzeczy każdego dnia.
Tom Carpenter,
2

Perl, 40 + 1 ( -n) = 41 bajtów

Dzięki @Ton Hospel za zapisanie 14 bajtów i umożliwienie programowi pracy z wpisem większym niż 10.

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

Potrzebujesz, -na także -E(lub -M5.010) do uruchomienia. Na przykład :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'
Dada
źródło
1
@TheBitByte Ok, świetnie, gotowe, dzięki.
Dada
2
To już jest bardzo dobre. Ale możesz grać trochę z formatem wejściowym, a także rozwiązać problem polegający na tym, że wyzwanie nie mówi, że są to powtórzenia < 10, wstawiając /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3plik (ponieważ używa $') i wywołując za pomocą perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(użyj prawdziwych nowych linii), który liczy się jako 48 bajtów (2 dodatkowe handicap, ponieważ nie można go łączyć -e)
Ton Hospel
@TonHospel Thanks. Racja, nawet nie zauważyłem, że to nie zadziała z liczbami >10. Świetna praca z formatem wejściowym, dzięki.
Dada
Zbliża się to do nadużywania swobody wyboru formatu wejściowego, ale: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'ma 41 bajtów (nie więcej $') i pozbywa się fałszywej końcowej linii
Ton Hospel
@TonHospel Rzeczywiście, wymyśliłem to rozwiązanie po twojej pierwszej sugestii, ale nie czułem się zbyt dobrze z powodu formatu wejściowego ... Ponieważ oboje myśleliśmy o tym, zmieniłem odpowiedź, ale nadal czuję, że jest trochę oszukiwany ...
Dada
2

Dyalog APL , 31 29 bajtów

Monituje o znak poziomy, szerokość, znak skrzyżowania, wysokość, znak pionowy - w tej kolejności.

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

⎕⍴⍞wprowadź poziomo-znak i powtórz czasy szerokości wejściowej ( poniżej)

⍞{... }znak złącza wejściowego, który będzie w funkcji ...

∊⍺⍵⍺ spłaszcz [[skrzyżowanie], [poziomy], [skrzyżowanie]]

enkapsuluj, aby mógł być częścią listy

(... ),dodawać ...

h←⎕ wysokość wejściowa

⍞⍴⍨ wprowadź znak pionowy i powtórz to wiele razy

przekształć listę ciągów w tabelę znaków

enkapsulować (aby można było powtórzyć jako całość)

3/ powtórz to trzy razy

    
┗━ ┗━ ┗━

⍪/ połącz trzy elementy pionowo


┣━
┣━
┗━

(to też je kapsułkuje, więc musimy ...)

usuń kapsułkowanie

h↓upuść pierwszą h (rzędy)

┏━
┣━
┗━

Wypróbuj APL online!

Adám
źródło
2

C, 130 bajtów

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

Stosowanie:

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

Wynik

+-----+
|
|
+-----+
|
|
+-----+
Giacomo Garabello
źródło
Usunięcie średnika ws definei dodanie go jako f(C,O,P,S,_,D,o){W;E;W;E;W;}zapisuje bajt.
betseg 28.09.16
2

C #, 108 bajtów

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

Anonimowa funkcja, która generuje każdą linię poziomą i pionową i buduje ostateczny wynik.

Funkcja bez golfa:

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

Pełny program z przypadkami testowymi:

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
źródło
2

MATL , 15 bajtów

Dzięki @muddyfish za korektę

2-Y"yv!iiY"!yyy

Wypróbuj online!

Wyjaśnienie

Zawartość stosu po każdym kroku jest zaznaczona dla jasności, wykorzystując pierwszy przykład w wyzwaniu.

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
źródło
1

Bash + coreutils, 105 bajtów

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

Zakładając, że nazwa pliku, w którym jest on przechowywany A.sh, będzie następujący:

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

--Są potrzebne, tylko w przypadku jednego z wejść znaków dzieje się -, iprintf najwyraźniej nie obsługuje myślniki na początku łańcucha bardzo ładne bez podwójnych kresek.

Wyjaśnienie

Zakładając, że dane wejściowe to 5 2 + * |...

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

    Utwórz razem pierwszy segment poziomy i segment pionowy. Spowodowałoby to:

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

    Powtórz wcześniej utworzone pół 3etatu ponad. To powoduje teraz:

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

    Na koniec potokuj poprzednie wyjście, aby sedpozbyć się 2 ostatnich segmentów linii, wysyłając tylko pierwsze <Vertical Segment Length>*2+3linie E. W końcu otrzymujemy to, Eczego chcemy:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    
R. Kap
źródło
1

PowerShell v2 +, 60 59 bajtów

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

Pobiera dane wejściowe jako indywidualne argumenty wiersza polecenia. Konstruuje łańcuch poziomy, przechowuje go $xdo późniejszego użycia, a następnie formuje w tablicę za pomocą operatora przecinka ,. Dokonuje konkatenacji tablicowej (tj. Dodając elementy na końcu) $dsformułowanej w tablicę $belementów. To z kolei formułowane jest w tablicę dwóch elementów z innym operatorem przecinkowym i pozostaje w potoku. Następnie poziomo $xpozostawia się na rurociągu. Nadużywa domyślnego formatowania Write-Outputwstawiania nowej linii między elementami.

Przykład

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
źródło
1

Python 3, 60 bajtów

Funkcja

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

Przypadek testowy

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+
Dignissimus - Spammy
źródło
masz 2 za dużo myślników na wyjściu
Blue
1

Brainf * ck, 147 bajtów

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

Pobiera dane wejściowe ze standardowego wejścia jako pierwsze 5 znaków. Pierwsze dwa mają 48 odjęte od kodu ASCII, więc 0-9 zachowuje się zgodnie z oczekiwaniami. W przypadku liczb> 9 dodaj 48 do liczby i użyj odpowiedniego znaku. Pozostałe trzy postacie są określone w wyzwaniu.

Jestem pewien, że nie jest to optymalne rozwiązanie, ale życie jest zbyt krótkie, by grać w golfa.

Z komentarzami:

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

Przykładowy przebieg:

sean@SEANSBOX:~/Dropbox/Code/BF$ ./bf E.b
94^$!
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^
Sean McBane
źródło
1

PHP, 97 bajtów

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;

bez pętli, tylko wbudowane.

Uruchom z php -r '<code>' <parameters>.

Tytus
źródło
1

Java 7, 205 129 bajtów

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 bajtów dzięki anonimowemu nieznajomemu.
PS: Nie edytuj postów innych osób następnym razem. Jeśli masz coś do gry w golfa, zostaw to jako komentarz lub jeśli używasz zupełnie innego podejścia, możesz podać własną odpowiedź. Wciąż dziękuję za odłożenie wszystkich tych bajtów w golfa - kimkolwiek jesteś ...

Przypadki bez golfa i testy:

Wypróbuj tutaj.

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

Wynik:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
Kevin Cruijssen
źródło
0

Rakieta 124 bajtów

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

Bardziej czytelna forma:

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

Testowanie:

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

+-------+
|
|
+-------+
|
|
+-------+
rnso
źródło
0

C ++, 121 bajtów

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

Nie golfowany:

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

W C ++ nie wolno deklarować funkcji bez typu jak w C. Jednak makra, które zachowują się jak funkcja, są całkowicie możliwe. Zauważ też, że wersja bez golfa nie zostanie skompilowana, dopóki nie dodasz „\” do każdego oprócz ostatniego wiersza makra. Możesz zaoszczędzić dwa dodatkowe bajty, usuwając {}, ale wtedy nie możesz użyć makra dwa razy z rzędu.

Stosowanie:

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

Wynik:

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

Wypróbuj online

Anedar
źródło
0

CJam , 23 bajty

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

Wypróbuj online!

Dane wejściowe są w podanej kolejności, ale zamiast spacji należy je oddzielić spacjami. Niektóre z trudności polegają na uzyskaniu odpowiedniej kolejności danych wejściowych dla operacji łączenia* CJam ; dla porównania przegrupowanie wejścia może zaoszczędzić 4 bajty .

Jeśli dane wejściowe są dubbingowane, A B C D Eprogram działa mniej więcej tak:

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
źródło
0

Lua (5.2), 144 bajty

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)

Wypróbuj online! (Coding Ground)

Powinien teraz wypisać coś takiego:

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

Własny wkład: 7 2 + l @

Możesz zmienić dane wejściowe w projekcie-> opcje kompilacji i tam zmienić wartości, każda wartość jak w przykładzie, ale nie oddzielone przecinkami, ale spacjami.

Lycea
źródło
0

QBIC, 44 bajty

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

Wyjaśnienie

::;;;                 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
źródło
0

PHP, 94 bajtów

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

Wprowadź format tablicy w tej samej kolejności, co sugerowany ciąg

Jörg Hülsermann
źródło
Jeśli użyjesz ,"\n"zamiast ."\n", możesz upuścić pareny dla trójki.
Tytus
for($h++;$i<=2*$h;)i $i++%$hzapisuje kolejny bajt.
Tytus
$v-1daje tylko 3 poziome znaki dla [5,2,+,|,-]. Liczba znaków poziomych, z wyłączeniem znaków lewej i prawej krawędzi
Tytus
@Titus to prawda, wycofałem twoją edycję. 5 Poziomo oznacza 3 znaki o 2 krawędziach = 5. Spójrz na pytanie. A za pozostałe pomysły Dziękuję
Jörg Hülsermann