Huruf E dengan E

19

Tugas Anda adalah menampilkan huruf ASCII art "E" di bawah ini, diberi lima input.

Contoh:

Input: 7,2,+,|,-(Catatan: Anda tidak harus mengikuti format input persis ini, dan jika Anda tidak menggunakannya, maka Anda harus menjelaskan cara kerja format input Anda sendiri)

Penjelasan:

  • 7 total lebar, termasuk karakter tepi kiri dan kanan.

  • 2 Jumlah karakter vertikal.

  • + Karakter yang seharusnya ditampilkan di tepi.

  • | Karakter yang harus ditampilkan secara vertikal di antara tepi.

  • - Karakter yang harus ditampilkan secara horizontal.

Output dari contoh di atas:

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


Contoh lain:

Memasukkan: 7,2,@,|,-

Keluaran:

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


Memasukkan: 7,2,+,|,#

Keluaran:

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


Memasukkan: 8,3,+,|,#

Keluaran:

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


Memasukkan: 8,3,+,@,#

Keluaran:

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


Memasukkan: 9,4,^,$,!

Keluaran:

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


Celah curang dan standar tidak diperbolehkan.

Kode Anda tidak boleh mencetak apa pun ke STDERR.

Kode Anda dapat menerima pengkodean karakter apa pun yang Anda pilih sebagai input, tetapi pengkodean karakter apa pun yang Anda pilih harus, minimal mendukung semua 95 karakter ASCII yang dapat dicetak.

Kode terpendek, dalam byte, yang berhasil menyelesaikan tantangan ini, adalah kode pemenang.

Papan peringkat

Buffer Over Read
sumber
27
Saya tidak suka kasus khusus 'tidak ada input yang diberikan'. Menurut pendapat saya, itu tidak menambah tantangan dan menyulitkan banyak hal.
Yytsi
3
Apakah judul karena Anda bisa memberi Esebagai input, dan membuat Edengan Es?
trichoplax
3
Meskipun saya tidak menyukainya, apa arti 'tidak ada input'? Solusi Floroid saya hanya akan menggantung selama sisa keabadian jika Anda tidak lulus input. Agar solusi saya bersaing, Anda harus melewati 5 nol dan saya harus memeriksa apakah inputnya nol dan memperlakukan sesuai ...? -1.
Yytsi
4
@TheBitByte Lihat komentar kedua saya untuk melihat apa yang saya pikir benar-benar salah dengannya. Sekarang setelah Anda mengeditnya, +1.
Yytsi
1
@Kevin Yup. Saya hanya mengalami sedikit kebingungan dengan interpretasi 'no input'. String kosong tidak sama dengan 'tidak ada input' dalam pikiran saya. Dan saya sudah terbiasa menjalankan kode di dalam sebuah interpreter, di mana saya benar-benar menunggu input untuk diumpankan, jadi itu sebabnya saya membuangnya di sana.
Yytsi

Jawaban:

6

05AB1E , 16 14 byte

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

Penjelasan

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

Cobalah online!

Disimpan 4 byte berkat Adnan.

Emigna
sumber
1
Karena penasaran, mengapa Anda menggunakan ©register: p?
Adnan
1
@ Adnan: Tangkapan bagus! Saya akan, tetapi akhirnya tidak menggunakannya dan lupa untuk menghapusnya :)
Emigna
1
@muddyfish: Membaca penjelasan dari pertanyaan yang bagiannya tidak jelas, jadi saya melewatkannya. Terima kasih telah memberi tahu saya!
Emigna
1
Ada juga perintah surround khusus yang bekerja di sini: Í×s.øU×S»X»D»Xr».
Adnan
2
@ Adnan: Benar sekali. Pemikiran yang bagus! Saya belum pernah menggunakan itu sebelumnya :)
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 berkat @nimi

fungsi lambda anonim, untuk menyebutnya, tulis f=sebelumnya. Contoh:

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

alternatif, 53 Bytes

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

versi lama dengan kasus khusus tanpa input, 69 65 63 Bytes

yay untuk mengubah persyaratan pertengahan tantangan ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)
KarlKastor
sumber
2
Bug kecil: argumen pertama ( 2dalam contoh Anda) adalah panjang total garis, termasuk sudut, sehingga input yang tepat untuk bentuk Anda adalah f(4,1 ...).
nimi
@nimi terima kasih atas tipnya. (+4 bytes :() OPs contoh pertama agak membingungkan. (Beberapa jawaban lain juga memiliki bug ini)
KarlKastor
4

C, 167 161 159 byte

Ya.

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

Cobalah di Ideone, dengan beberapa test case

betseg
sumber
2
menempatkan ("") -> p ('\ n')? atau bahkan p (10) jika itu akan berhasil
RiaD
Bagaimana saya bisa melewatkan itu! Terima kasih, @RiaD.
betseg
Juga jika Anda memulai loop dengan 2, Anda akan menyimpan lebih banyak byte
RiaD
3

Ruby, 54 45 42 byte

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

Ini adalah fungsi anonim yang mengambil bagian berbeda dari input sebagai parameter terpisah dan mengembalikan hasilnya sebagai string lengkap.

Sebagai contoh,

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

cetakan

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø
daniero
sumber
3

Javascript (ES6), 64 byte

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

Contoh

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
sumber
Apakah ini menangani kasus khusus tanpa input?
Conor O'Brien
{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }saat menjalankan inline.
noɥʇʎԀʎzɐɹƆ
@AgentCrazyPython - Jalankan di IE? Itu tidak memiliki dukungan untuk.repeat()
Arnauld
@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ
oh, ini ES6 ...
no 3zɐɹƆ
3

V , 18 byte

älJxxÀPjddÀpkäGYGp

Cobalah online!

DJMcMayhem
sumber
3

R, 80 byte

Cukup berulang:

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

Tidak Disatukan:

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
sumber
3

Pyke, 16 15 byte

*2mtz:zn+Q*' +D

Coba di sini!

Biru
sumber
2

Pyth, 19 byte

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

Suatu program yang mengambil input yang dipisahkan oleh baris baru pada STDIN dari karakter sudut, jumlah karakter horisontal, karakter horisontal, jumlah karakter vertikal dan karakter vertikal, dan mencetak hasilnya.

Cobalah online

Bagaimana itu bekerja

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

MATLAB, 95 92 91 85 81 byte

Fungsi MATLAB 'E'. (edit: tidak berfungsi pada Oktaf)

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

Dan 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

Fungsi harus dipanggil seperti:

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

Yang akan kembali:

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

Ini mungkin bisa disederhanakan sedikit, saya akan terus mengusahakannya. Saya tidak suka memiliki seluruh deklarasi fungsi untuk mendapatkan input, jadi akan melihat apakah saya dapat memperbaikinya.


  • Disimpan 3 byte dengan menyederhanakan pembuatan baris pertama untuk membuat garis pertama tanpa sudut dan kemudian menambahkan sudut karena ini mengurangi berapa kali pengindeksan diperlukan.

  • Byte lain disimpan dengan memulai dengan sudut pertama.

  • 6 byte lagi dengan mengganti repmat(a,3,1)panggilan dengan [a;a;a].

  • Disimpan 4 byte dengan menggunakan atanpa inisialisasi tertentu (sudah dinyatakan dalam deklarasi fungsi) - terima kasih @LuisMendo

Tom Carpenter
sumber
1
@LuisMendo menarik. Saya awalnya a=[c a c]ada di sana tetapi menghapusnya untuk mengecilkan hal-hal seperti biasanya Anda tidak dapat mengindeks mengakses variabel yang tidak ada dan membuatnya dalam proses. Saya lupa bahwa ini adalah fungsi sehingga asudah dinyatakan dalam deklarasi fungsi sebagai nilai pengembalian. Terima kasih :)
Tom Carpenter
Bahkan Anda bisa melakukannya bahkan jika tidak dalam suatu fungsi - mengindeks variabel yang tidak ada membuatnya. Pelajari hal-hal baru setiap hari.
Tom Carpenter
2

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

Terima kasih kepada @Ton Hospel karena telah menyimpan 14 byte dan memungkinkan program untuk bekerja dengan entri lebih dari 10.

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

Perlu -njuga -E(atau-M5.010 ) untuk dijalankan. Contohnya :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'
Dada
sumber
1
@TheBitByte Ok bagus, sudah selesai, terima kasih.
Dada
2
Ini sudah sangat bagus. Tetapi Anda dapat bermain sedikit dengan format input dan juga memecahkan kekurangan yang tantangannya tidak mengatakan pengulangan adalah < 10dengan memasukkan /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3file (karena menggunakan $') dan memanggil dengan perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(menggunakan baris baru nyata) yang dihitung sebagai 48 byte (2 tambahan cacat karena tidak dapat digabungkan dengan -e)
Ton Hospel
@TonHospel Terima kasih. Benar, saya bahkan tidak memperhatikan bahwa ini tidak akan berfungsi dengan angka >10.. Kerja bagus dengan format input, terima kasih.
Dada
Ini semakin dekat dengan menyalahgunakan kebebasan untuk memilih format input, tetapi: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'adalah 41 byte (tidak lebih $') dan juga menghilangkan baris baru palsu
Ton Hospel
@TonHospel Memang, saya datang dengan solusi itu setelah saran pertama Anda, tetapi saya tidak terlalu nyaman dengan itu karena format input ... Karena kami berdua memikirkannya, saya mengubah jawaban saya, tapi tetap saja, saya merasa seperti ini sedikit curang ...
Dada
2

Dyalog APL , 31 29 byte

Anjuran untuk karakter horizontal, lebar, karakter persimpangan, tinggi, karakter vertikal - dalam urutan itu.

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

⎕⍴⍞input-horizontal-karakter dan ulangi kali lebar input ( ⍵ di bawah)

⍞{... }input-junction-karakter yang akan dalam fungsi ...

∊⍺⍵⍺ meratakan [[persimpangan], [horizontal], [persimpangan]]

merangkum sehingga dapat menjadi bagian dari daftar

(... ),tergantung ...

h←⎕ tinggi input

⍞⍴⍨ masukan-karakter-vertikal dan ulangi sebanyak itu

buat daftar string menjadi tabel karakter

merangkum (sehingga dapat diulangi secara keseluruhan)

3/ ulangi tiga kali

    
┗━ ┗━ ┗━

⍪/ menyatukan tiga potong secara vertikal


┣━
┣━
┗━

(Ini merangkum mereka juga, jadi kita perlu ...)

hapus enkapsulasi

h↓drop h pertama (baris)

┏━
┣━
┗━

TryAPL online!

Adm
sumber
2

C, 130 byte

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

Pemakaian:

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

Keluaran

+-----+
|
|
+-----+
|
|
+-----+
Giacomo Garabello
sumber
Menghapus titik koma dalam defines dan menambahkannya sebagai f(C,O,P,S,_,D,o){W;E;W;E;W;}menyimpan byte.
betseg
2

C #, 108 byte

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

Fungsi anonim yang menghasilkan setiap garis horizontal dan vertikal dan membangun hasil akhir.

Fungsi tidak disatukan:

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

Program lengkap dengan kasus uji:

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

MATL , 15 byte

Berkat @muddyfish untuk koreksi

2-Y"yv!iiY"!yyy

Cobalah online!

Penjelasan

Isi tumpukan setelah setiap langkah diindikasikan untuk kejelasan, menggunakan contoh pertama dalam tantangan.

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

Bash + coreutils, 105 byte

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

Dengan asumsi file tempat penyimpanan ini dinamai A.sh, penggunaannya adalah:

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

The --diperlukan, hanya dalam kasus salah satu masukan karakter terjadi menjadi -, danprintf tampaknya tidak menangani strip pada awal string yang sangat bagus tanpa double-strip.

Penjelasan

Dengan asumsi bahwa inputnya adalah 5 2 + * |...

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

    Buat segmen horizontal pertama dan segmen vertikal secara bersamaan. Ini akan menghasilkan:

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

    Ulangi 3kali bagian yang dibuat sebelumnya lebih dari. Ini sekarang menghasilkan:

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

    Akhirnya pipa keluaran sebelumnya untuk sedmenyingkirkan segmen 2 baris terakhir dengan hanya mengeluarkan <Vertical Segment Length>*2+3baris pertama dari E. Kami akhirnya mendapatkan yang Ekami inginkan:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    
R. Kap
sumber
1

PowerShell v2 +, 60 59 byte

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

Mengambil input sebagai argumen baris perintah individual. Membangun string horizontal, menyimpannya menjadi $xuntuk digunakan nanti, kemudian membentuknya menjadi array dengan koma-operator ,. Melakukan penggabungan array (yaitu, menambahkan elemen ke akhir) $ddiformulasikan ke dalam array$b elemen. Itu, pada gilirannya, diformulasikan menjadi array dari dua elemen dengan operator koma lain, dan dibiarkan di dalam pipa. Kemudian, horizontal $xdibiarkan di atas pipa. Menyalahgunakan pemformatan default Write-Outputuntuk menempatkan baris baru di antara elemen.

Contoh

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

Python 3, 60 byte

Sebuah fungsi

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

Kasus cobaan

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+
Dignissimus - Spammy
sumber
Anda memiliki 2 garis putus-putus dalam output
Biru
1

Brainf * ck, 147 byte

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

Mengambil input dari stdin saat 5 karakter pertama dimasukkan. Dua yang pertama memiliki 48 dikurangi dari kode ASCII mereka sehingga 0-9 berperilaku seperti yang diharapkan. Untuk angka> 9, tambahkan 48 ke angka dan gunakan karakter yang sesuai. Tiga karakter lainnya seperti yang ditentukan dalam tantangan.

Saya yakin ini bukan solusi yang optimal tetapi hidup ini terlalu singkat untuk bermain golf.

Dengan komentar:

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

Contoh dijalankan:

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

PHP, 97 byte

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;

tidak ada loop, hanya bawaan.

Jalankan dengan php -r '<code>' <parameters>.

Titus
sumber
1

Java 7, 205 129 byte

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 berkat orang asing anonim.
PS: Jangan mengedit posting orang lain lain kali. Jika Anda memiliki sesuatu untuk golf, silakan tinggalkan sebagai komentar, atau jika menggunakan pendekatan yang sama sekali berbeda, Anda dapat membuat jawaban Anda sendiri. Masih terima kasih untuk bermain golf semua byte ini, meskipun - siapa pun Anda ..

Kasus yang tidak disatukan & uji:

Coba di sini.

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

Keluaran:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
Kevin Cruijssen
sumber
0

Racket 124 byte

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

Bentuk yang lebih mudah dibaca:

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

Pengujian:

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

+-------+
|
|
+-------+
|
|
+-------+
juga
sumber
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;}

Tidak Disatukan:

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

Dalam C ++ itu tidak diizinkan untuk mendeklarasikan fungsi tanpa tipe seperti pada C. Tapi makro yang berperilaku seperti fungsi sangat mungkin. Perhatikan juga bahwa versi yang tidak diklik tidak akan dikompilasi sampai Anda menambahkan "\" untuk masing-masing kecuali baris terakhir makro. Anda mungkin menyimpan dua byte tambahan dengan menghapus {}, tetapi Anda tidak bisa menggunakan makro dua kali berturut-turut.

Pemakaian:

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

Keluaran:

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

Cobalah online

Anedar
sumber
0

CJam , 23 byte

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

Cobalah online!

Input dalam urutan yang diberikan, tetapi harus dipisahkan dengan ruang alih-alih menggunakan koma. Beberapa kesulitannya adalah mendapatkan input urutan yang tepat untuk operasi bergabung* CJam ; untuk perbandingan mengatur ulang input bisa menghemat 4 byte .

Jika input di-dub A B C D Emaka programnya bekerja seperti ini:

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
sumber
0

Lua (5.2), 144 byte

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)

Cobalah online! (Coding Ground)

Seharusnya menampilkan sesuatu seperti itu sekarang:

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

Input sendiri: 7 2 + l @

Anda dapat mengubah input dalam project-> compile options dan di sana mengubah nilainya, masing-masing nilai seperti dalam contoh tetapi tidak dipisahkan dengan koma tetapi dengan spasi.

Lycea
sumber
0

QBIC, 44 byte

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

Penjelasan

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

Masukkan format array dengan urutan yang sama dengan string yang disarankan

Jörg Hülsermann
sumber
Jika Anda menggunakan ,"\n"sebagai gantinya ."\n", Anda dapat menjatuhkan parens untuk ternary.
Titus
for($h++;$i<=2*$h;)dan $i++%$hmenyimpan byte lain.
Titus
$v-1hanya memberikan 3 karakter horizontal untuk [5,2,+,|,-]. Jumlah karakter horizontal, tidak termasuk karakter tepi kiri dan kanan
Titus
@Itus itu benar, saya telah mengembalikan suntingan Anda. 5 Horisontal berarti 3 Karakter dengan 2 tepi = 5. Lihat pertanyaan. Dan untuk ide-ide lain, Terima Kasih
Jörg Hülsermann