Chữ E với E


19

Nhiệm vụ của bạn là hiển thị nghệ thuật ASCII chữ "E" bên dưới, đưa ra năm đầu vào.

Ví dụ:

Đầu vào: 7,2,+,|,-(Lưu ý: Bạn không phải tuân theo định dạng đầu vào chính xác này và nếu bạn không sử dụng nó, thì bạn phải giải thích cách thức hoạt động của định dạng đầu vào của bạn)

Giải trình:

  • 7 tổng chiều rộng, bao gồm các ký tự cạnh trái và phải.

  • 2 Số lượng ký tự dọc.

  • + Các nhân vật sẽ hiển thị ở các cạnh.

  • | Các ký tự sẽ hiển thị theo chiều dọc giữa các cạnh.

  • - Các ký tự sẽ hiển thị theo chiều ngang.

Đầu ra của ví dụ trên:

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


Những ví dụ khác:

Đầu vào: 7,2,@,|,-

Đầu ra:

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


Đầu vào: 7,2,+,|,#

Đầu ra:

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


Đầu vào: 8,3,+,|,#

Đầu ra:

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


Đầu vào: 8,3,+,@,#

Đầu ra:

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


Đầu vào: 9,4,^,$,!

Đầu ra:

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


Gian lận và sơ hở tiêu chuẩn không được phép.

Mã của bạn không được in bất cứ thứ gì lên STDERR.

Mã của bạn có thể chấp nhận bất kỳ mã hóa ký tự nào bạn chọn làm đầu vào, nhưng bất kỳ mã hóa ký tự nào bạn chọn phải, tối thiểu, hỗ trợ tất cả 95 ký tự ASCII có thể in được.

Mã ngắn nhất, tính bằng byte, hoàn thành thử thách này thành công, là mã chiến thắng.

Bảng xếp hạng


27
Tôi không thích trường hợp đặc biệt 'không đưa ra đầu vào'. Theo tôi, nó không thêm bất cứ điều gì vào thử thách và làm phức tạp nhiều thứ mà không có gì.
Yytsi

3
Là tiêu đề bởi vì bạn có thể cung cấp Enhư là một đầu vào, và thực hiện Evới Es?
trichoplax

3
Mặc dù tôi không thích nó, 'không có đầu vào' thực sự có nghĩa là gì? Giải pháp Floroid của tôi sẽ chỉ tồn tại mãi mãi nếu bạn không vượt qua đầu vào. Để giải pháp của tôi được cạnh tranh, bạn sẽ phải vượt qua 5 số không và tôi sẽ phải kiểm tra xem các đầu vào có phải là số không và xử lý phù hợp không ...? -1.
Yytsi

4
@TheBitByte Xem bình luận thứ hai của tôi để xem những gì tôi nghĩ là thực sự sai với nó. Bây giờ bạn đã chỉnh sửa nó ra, +1.
Yytsi

1
@Kevin Yup. Tôi chỉ có một chút nhầm lẫn với việc giải thích 'không có đầu vào'. Chuỗi rỗng không bằng 'không có đầu vào' trong tâm trí của tôi. Và tôi đã quá quen với việc chạy mã bên trong một trình thông dịch, trên đó tôi thực sự chờ đợi đầu vào được cung cấp, vì vậy đó là lý do tại sao tôi đã ném nó ra khỏi đó.
Yytsi

Câu trả lời:


6

05AB1E , 16 14 byte

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

Giải trình

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

Hãy thử trực tuyến!

Đã lưu 4 byte nhờ Adnan.


1
Vì tò mò, tại sao bạn lại sử dụng thanh ©ghi: p?
Ad Nam

1
@Ad Nam: Bắt tốt! Tôi đã định, nhưng cuối cùng không sử dụng và quên xóa nó :)
Emigna

1
@muddyfish: Đọc lời giải thích từ câu hỏi mà phần đó không rõ ràng, vì vậy tôi đã bỏ lỡ nó. Cảm ơn vì đã cho tôi biết!
Emigna

1
Ngoài ra còn có một lệnh vòm đặc biệt hoạt động ở đây : Í×s.øU×S»X»D»Xr».
Ad Nam

2
@Ad Nam: Đúng là bạn. Suy nghĩ tốt! Tôi chưa bao giờ sử dụng nó trước đây :)
Emigna

6

Python, 53 51 55 byte

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

+4 byte nhờ vào @nimi

Hàm lambda ẩn danh, để gọi nó, viết f=trước nó. Thí dụ:

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

thay thế, 53 byte

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

phiên bản cũ với trường hợp đặc biệt không có đầu vào, 69 65 63 Byte

yay để thay đổi các yêu cầu giữa thử thách ...

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

2
Lỗi nhỏ: đối số đầu tiên ( 2trong ví dụ của bạn) là tổng chiều dài của dòng, bao gồm các góc, do đó, đầu vào bên phải cho hình dạng của bạn là f(4,1 ...).
nimi

@nimi cảm ơn vì tiền boa. (+4 byte :() Ví dụ đầu tiên của OP hơi khó hiểu. (Một số câu trả lời khác cũng có lỗi này)
KarlKastor

4

C, 167 161 159 byte

Vâng.

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

Hãy thử nó trên Ideone, với một số trường hợp thử nghiệm


2
đặt ("") -> p ('\ n')? hoặc thậm chí p (10) nếu điều đó sẽ hoạt động
Rịa

Làm thế nào tôi đã bỏ lỡ điều đó! Cảm ơn, @RiaD.
betseg

Ngoài ra, nếu bạn bắt đầu vòng lặp với 2, bạn sẽ lưu vào nhiều byte hơn
Rịa

3

Ruby, 54 45 42 byte

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

Đây là một hàm ẩn danh lấy phần khác nhau của đầu vào làm các tham số riêng biệt và trả về kết quả dưới dạng một chuỗi hoàn chỉnh.

Ví dụ,

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

in

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø

3

Javascript (ES6), 64 byte

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

Thí dụ

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


Điều này có xử lý trường hợp đặc biệt không có đầu vào?
Conor O'Brien

{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }khi chạy nội tuyến.
noɥʇʎԀʎzɐɹƆ

@AgentCrazyPython - Chạy trên IE? Nó không hỗ trợ cho.repeat()
Arnauld

@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ

ồ, đó là ES6 ...
noɥʇʎԀʎzɐɹƆ


3

R, 80 byte

Khá lặp đi lặp lại:

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

Ung dung:

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


2

Bình thường, 19 byte

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

Một chương trình lấy đầu vào được phân tách bằng dòng mới trên STDIN của ký tự góc, số ký tự ngang, ký tự ngang, số ký tự dọc và ký tự dọc và in kết quả.

Dùng thử trực tuyến

Làm thế nào nó hoạt động

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

2

MATLAB, 95 92 91 85 81 byte

Hàm MATLAB 'E'. (chỉnh sửa: không hoạt động trên 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,:);

Và vô lương tâm:

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

Hàm nên được gọi là:

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

Mà sẽ trở lại:

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

Điều này có lẽ có thể được đơn giản hóa một chút, tôi sẽ tiếp tục làm việc với nó. Tôi không thích có toàn bộ khai báo hàm để nhận đầu vào, vì vậy sẽ xem liệu tôi có thể cải thiện điều đó không.


  • Đã lưu 3 byte bằng cách đơn giản hóa việc tạo dòng đầu tiên để tạo dòng không có góc và sau đó thêm các góc vì điều này làm giảm số lần lập chỉ mục được yêu cầu.

  • Một byte khác được lưu bằng cách bắt đầu với góc đầu tiên.

  • Thêm 6 byte bằng cách thay thế repmat(a,3,1)cuộc gọi bằng [a;a;a].

  • Đã lưu 4 byte bằng cách sử dụng amà không cần khởi tạo cụ thể (đã được khai báo trong khai báo hàm) - cảm ơn @LuisMendo


1
@LuisMendo thú vị. Ban đầu tôi đã có a=[c a c]trong đó nhưng đã loại bỏ nó để thu nhỏ mọi thứ vì thông thường bạn không thể lập chỉ mục truy cập vào một biến không tồn tại và tạo nó trong quy trình. Tôi quên rằng đây là một hàm nên ađã được khai báo trong khai báo hàm là giá trị trả về. Cảm ơn :)
Tom Carpenter

Trong thực tế, bạn có thể làm điều đó ngay cả khi không có trong hàm - lập chỉ mục một biến không tồn tại sẽ tạo ra nó. Học những điều mới mỗi ngày.
Tom Carpenter

2

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

Cảm ơn @TonMedel đã lưu 14 byte và cho phép chương trình hoạt động với mục nhập lớn hơn 10.

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

Cần -ncũng như -E(hoặc-M5.010 ) để chạy. Ví dụ :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'

1
@TheBitByte Ok tuyệt, đã xong, cảm ơn.
Dada

2
Điều này đã rất tốt. Nhưng bạn có thể chơi một chút với định dạng đầu vào và cũng giải quyết được lỗ hổng mà thách thức không nói là lặp lại < 10bằng cách đặt /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3một tệp (vì nó sử dụng $') và gọi bằng perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(sử dụng dòng mới thực sự) được tính là 48 byte (thêm 2 handicap vì nó không thể kết hợp với -e)
TonMedel

@TonHeach Cảm ơn. Phải, tôi thậm chí đã không nhận thấy rằng điều này sẽ không hoạt động với các con số >10.. Công việc tuyệt vời với định dạng đầu vào, cảm ơn.
Dada

Điều này đang tiến gần đến việc lạm dụng quyền tự do để chọn định dạng đầu vào, nhưng: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'là 41 byte (không còn nữa $') và cũng thoát khỏi dòng mới theo dõi giả mạo
TonMedel

@TonHosp Thật vậy, tôi đã đưa ra giải pháp đó sau đề nghị đầu tiên của bạn, nhưng tôi không quá thoải mái với nó vì định dạng đầu vào ... Vì cả hai chúng tôi đều nghĩ về nó, tôi vẫn thay đổi câu trả lời của mình. đó là một chút gian lận ...
Dada

2

Thuốc nhuộm APL , 31 29 byte

Nhắc nhở cho ký tự ngang, chiều rộng, đường nối ký tự, chiều cao, ký tự dọc - theo thứ tự đó.

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

⎕⍴⍞ đầu vào-ngang-ký tự và lặp lại thời gian đầu vào chiều rộng ( bên dưới)

⍞{... }đầu vào ngã ba ký tự mà sẽ trong hàm ...

∊⍺⍵⍺ làm phẳng [[đường giao nhau], [chiều ngang], [đường giao nhau]]

gói gọn để nó có thể là một phần của danh sách

(... trả ),trước ...

h←⎕ chiều cao đầu vào

⍞⍴⍨ đầu vào-dọc-ký tự và lặp lại nó nhiều lần

lập danh sách các chuỗi thành một bảng ký tự

đóng gói (vì vậy nó có thể được lặp lại một cách tổng thể)

3/ lặp lại ba lần

    
┗━ ┗━ ┗━

⍪/ nối ba mảnh theo chiều dọc


┣━
┣━
┗━

(điều này cũng gói gọn chúng, vì vậy chúng ta cần ...)

loại bỏ đóng gói

h↓thả h (hàng) đầu tiên

┏━
┣━
┗━

Dùng thử trực tuyến!


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}

Sử dụng:

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

Đầu ra

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

Xóa dấu chấm phẩy trong defines và thêm nó dưới dạng f(C,O,P,S,_,D,o){W;E;W;E;W;}lưu một 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;};

Hàm ẩn danh tạo ra từng đường ngang và dọc và xây dựng đầu ra cuối cùng.

Chức năng Ungolfed:

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

Chương trình đầy đủ với các trường hợp thử nghiệm:

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

2

MATL , 15 byte

Cảm ơn @muddyfish đã chỉnh sửa

2-Y"yv!iiY"!yyy

Hãy thử trực tuyến!

Giải trình

Nội dung ngăn xếp sau mỗi bước được chỉ định cho rõ ràng, sử dụng ví dụ đầu tiên trong thử thách.

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

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

Giả sử tập tin được lưu trữ trong đó được đặt tên A.sh, việc sử dụng sẽ là:

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

Các --là cần thiết, chỉ trong trường hợp một trong những đầu vào nhân vật sẽ xảy ra là một -, vàprintf dường như không xử lý dấu gạch ngang ở đầu chuỗi rất đẹp mà không có dấu gạch ngang kép.

Giải trình

Giả sử rằng đầu vào là 5 2 + * |...

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

    Tạo phân đoạn ngang đầu tiên và phân khúc dọc tất cả cùng nhau. Điều này sẽ dẫn đến:

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

    Lặp lại 3thời gian phần được tạo trước đó qua. Điều này bây giờ dẫn đến:

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

    Cuối cùng, bỏ đầu ra trước đó để sedloại bỏ 2 đoạn cuối cùng bằng cách chỉ xuất ra các <Vertical Segment Length>*2+3dòng đầu tiên của E. Cuối cùng chúng tôi cũng có được thứ Echúng tôi muốn:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    

1

PowerShell v2 +, 60 59 byte

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

Đưa đầu vào dưới dạng đối số dòng lệnh riêng lẻ. Xây dựng chuỗi ngang, lưu trữ nó $xđể sử dụng sau, sau đó tạo chuỗi đó thành một mảng với toán tử dấu phẩy ,. Thực hiện nối mảng (nghĩa là thêm các phần tử vào cuối) của $dcông thức thành một mảng các $bphần tử. Điều đó, đến lượt nó, được xây dựng thành một mảng gồm hai phần tử với một toán tử dấu phẩy khác và được để lại trên đường ống. Sau đó, ngang $xđược để lại trên đường ống. Lạm dụng định dạng mặc định của Write-Outputđể đặt một dòng mới giữa các yếu tố.

Thí dụ

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

1

Python 3, 60 byte

Một chức năng

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

Trường hợp thử nghiệm

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+

bạn có quá nhiều dấu gạch ngang trong đầu ra
Blue

1

Brainf * ck, 147 byte

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

Lấy đầu vào từ stdin khi 5 ký tự đầu tiên được nhập. Hai cái đầu tiên được trừ 48 từ mã ASCII của chúng để 0-9 hoạt động như mong đợi. Đối với các số> 9, thêm 48 vào số và sử dụng ký tự tương ứng. Ba nhân vật khác được quy định trong thử thách.

Tôi chắc chắn đó không phải là giải pháp tối ưu nhưng cuộc sống quá ngắn để chơi golf brainf * ck.

Với nhận xét:

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

Chạy ví dụ:

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

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;

không có vòng lặp, chỉ có nội dung.

Chạy với php -r '<code>' <parameters>.


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 byte nhờ một người lạ ẩn danh.
PS: Đừng chỉnh sửa bài viết của người khác vào lần tới. Nếu bạn có điều gì đó để chơi gôn, vui lòng để lại nhận xét hoặc nếu sử dụng cách tiếp cận hoàn toàn khác, bạn có thể đưa ra câu trả lời của riêng mình. Dù vậy, vẫn cảm ơn vì đã chơi golf tất cả các byte này - dù bạn là ai ..

Các trường hợp bất ngờ & thử nghiệm:

Hãy thử nó ở đây.

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

Đầu ra:

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

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?

0

Vợt 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)))))

Hình thức dễ đọc hơn:

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

Kiểm tra:

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

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

0

C ++, 121 byte

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

Ung dung:

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

Trong C ++, nó không được phép khai báo các hàm mà không có kiểu như trong C. Nhưng các macro hoạt động giống như một hàm là hoàn toàn có thể. Cũng lưu ý rằng phiên bản không được chỉnh sửa sẽ không biên dịch cho đến khi bạn thêm "\" cho mỗi phiên bản trừ dòng cuối cùng của macro. Bạn có thể lưu hai byte bổ sung bằng cách xóa {}, nhưng sau đó bạn không thể sử dụng macro hai lần liên tiếp.

Sử dụng:

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

Đầu ra:

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

Dùng thử trực tuyến


0

CJam , 23 byte

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

Hãy thử trực tuyến!

Đầu vào là theo thứ tự nhất định, nhưng nên được phân tách không gian thay vì sử dụng dấu phẩy. Một số khó khăn là nhận được đầu vào đúng thứ tự cho hoạt động tham gia* của CJam ; để so sánh sắp xếp lại đầu vào trong có thể tiết kiệm 4 byte .

Nếu các đầu vào được đặt tên A B C D Ethì chương trình sẽ hoạt động như sau:

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

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)

Hãy thử trực tuyến! (Mã hóa mặt đất)

Nó sẽ xuất ra một cái gì đó như thế ngay bây giờ:

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

Đầu vào riêng: 7 2 + l @

Bạn có thể thay đổi đầu vào trong dự án-> biên dịch tùy chọn và ở đó thay đổi các giá trị, mỗi giá trị như trong ví dụ nhưng không được phân tách bằng dấu phẩy mà bằng dấu cách.


0

QBIC, 44 byte

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

Giải trình

::;;;                 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.

0

PHP, 94 byte

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

Định dạng đầu vào một mảng theo thứ tự giống như chuỗi được đề xuất


Nếu bạn sử dụng ,"\n"thay vì ."\n", bạn có thể thả parens cho ternary.
Tít

for($h++;$i<=2*$h;)$i++%$hlưu một byte khác.
Tít

$v-1chỉ cung cấp 3 ký tự ngang cho [5,2,+,|,-]. Số ký tự nằm ngang, không bao gồm các ký tự cạnh trái và phải
Tít

@Titus đúng vậy, tôi đã khôi phục chỉnh sửa của bạn. 5 Ngang có nghĩa là 3 Ký tự có 2 cạnh = 5. Hãy nhìn vào câu hỏi. Và cho những ý tưởng khác Cảm ơn bạn
Jörg Hülsermann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.