Tạo hộp!


19

Nhiệm vụ của bạn là tạo các hộp bằng cách sử dụng bất kỳ một ký tự ASCII nào đối với các đầu vào đã cho.

Các trường hợp thử nghiệm

1 1   --> =====
          =   =
          =====

1 2   --> =========
          =   =   =
          =========

2 1   --> =====
          =   =
          =====
          =   =
          =====

2 2   --> =========
          =   =   =
          =========
          =   =   =
          =========

2 5   --> =====================
          =   =   =   =   =   =
          =====================
          =   =   =   =   =   =
          =====================

Đầu vào

  • Đầu vào có thể được lấy từ một trong những điều sau đây

    • stdin
    • Đối số dòng lệnh
    • Đối số hàm (2 đối số, một đối số cho mỗi số)
  • Đầu vào, nếu được lấy từ stdinhoặc đối số dòng lệnh, sẽ chứa hai số nguyên dương, được ngăn cách bởi một khoảng trắng.

  • Hai số biểu thị số lượng hộp trong mỗi cột và hàng

Đầu ra

  • Các hộp phải được xuất ra stdout(hoặc tương đương gần nhất)
  • Mỗi hộp nên có ba không gian ngang trong đó

Quy tắc

  • Cả hai số sẽ lớn hơn 0, nhưng sẽ không vượt quá 1000
  • Bất kỳ ký tự có thể nhìn thấy có thể được sử dụng để xuất các hộp. (miễn là chúng không quá gay gắt trên mắt!)
  • Bạn được phép viết một chương trình đầy đủ hoặc một chức năng.
  • Không nên có các ký tự không cần thiết ngoại trừ một ký tự dòng mới tùy chọn.

Chấm điểm

Đây là , vì vậy bài nộp ngắn nhất (tính bằng byte) sẽ thắng.

Câu trả lời:


10

Bình thường, 23 byte

Mjbmsm@"= "&%k4dh*4HhyG

Xác định chức năng ghoạt động như mong muốn.

Trình diễn.


10

Võng mạc , 57 byte

1(?=.* (1*))
$1#$1#


1(?=(1*#1*#)*$)
=   
1
====
#
=#

Đưa đầu vào trong unary với một dòng mới.

Mỗi dòng nên đi đến tệp riêng của nó và #nên được thay đổi thành dòng mới trong các tệp. Điều này là không thực tế nhưng bạn có thể chạy mã dưới dạng một tệp với -scờ, giữ các #điểm đánh dấu (và thay đổi dòng mới theo sau #thành đầu vào). Bạn có thể thay đổi #trở lại dòng mới trong đầu ra để dễ đọc nếu bạn muốn. Ví dụ:

> echo -n 11 111#|retina -s boxes|tr # '\n'
=============
=   =   =   =
=============
=   =   =   =
=============

Phương pháp: 5 bước thay thế duy nhất. Đầu tiên hai (lần đầu tiên 4 dòng) tạo ra một 2*N+1bằng Mlưới của những người thân và 3 bước tiếp theo (6 lines) định dạng nó vào đầu ra mong muốn.

Các chuỗi trung gian (được phân định bởi -'s):

11 111
------------------
111
111
111
111
 111
------------------
111
111
111
111
111
------------------
111
=   =   =   
111
=   =   =   
111
------------------
============
=   =   =   
============
=   =   =   
============
------------------
=============
=   =   =   =
=============
=   =   =   =
=============

Một tệp trên mỗi dòng luôn có vẻ như là một lựa chọn thiết kế rất kỳ quặc.
tò mò

1
@cquildannii Nó được tạo ra theo cách này để nhân vật dòng mới có thể sử dụng được trong các biểu thức regex mà không thoát nhưng nó được lên kế hoạch để thay đổi thành định dạng 1 tệp hợp lý hơn.
ngẫu nhiên

8

JavaScript ( ES6 ), 83

Một hàm với các hàng và cột tham số. Sử dụng chuỗi mẫu, có 2 dòng mới được nhúng có ý nghĩa và được tính.

Đầu ra thông qua alert(cửa sổ bật lên). Khi alertsử dụng phông chữ tỷ lệ, chúng tôi nhận được kết quả tốt hơn bằng cách sử dụng một chữ cái có chiều rộng tương tự như khoảng trắng thay vì =.

Kiểm tra trong Firefox bằng giao diện điều khiển để có alertđầu ra thực hoặc chạy đoạn trích bên dưới.

f=(r,c)=>{for(x=y="|";c--;)x+="||||",y+="   |";for(o=x;r--;)o+=`
${y}
`+x;alert(o)}

// TEST

// redefine alert to avoid that annoying popup during test
alert=x=>O.innerHTML=x

test=_=>([a,b]=I.value.match(/\d+/g),f(a,b))

test()
<input id=I value='2 3'><button onclick="test()">-></button>
<pre id=O></pre>


Chạy đoạn mã không hoạt động với tôi, chỉ cần nhìn thấy một hộp có '2 3' bên trong và một mũi tên dường như gợi ý rằng bạn nên nhấp vào nó để nhận kết quả. Sử dụng nút toàn trang hoặc thử một trình duyệt khác không thay đổi gì cả.
Dennis Jaheruddin

@DennisJaheruddin, Điều tương tự cũng xảy ra với tôi khi sử dụng chrome (không hỗ trợ ES6). Hãy thử firefox.
Spikatrix

1
@DennisJaheruddinTest in Firefox
edc65

7

JavaScript (ES6), 75 73

Sử dụng nhiều repeatcuộc gọi, chúng tôi lặp lại |, sau đó lặp lại |với dấu cách và lặp lại cả hai lần lặp đó để tạo hàng:

f=(y,x)=>alert(((s="|"[r="repeat"](x*4)+`|
`)+"|   "[r](x)+`|
`)[r](y)+s)

(Dòng mới có ý nghĩa, theo đề xuất của edc65 để sử dụng chuỗi mẫu.)

Đoạn trích:

<input id="x" type="range" max="10" min="1" step="1" value="3"><input id="y" type="range" max="10" min="1" step="1" value="2"><pre id="o"></pre><script>function f(y,x){return ((s="|"[r="repeat"](x*4)+"|\n")+"|   "[r](x)+"|\n")[r](y)+s};function redraw(){document.getElementById("o").innerHTML=f(document.getElementById("y").value,document.getElementById("x").value)};document.getElementById("x").onchange=redraw;document.getElementById("y").onchange=redraw;document.getElementById("x").oninput=redraw;document.getElementById("y").oninput=redraw;redraw();</script>

Không có chuỗi mẫu, không sử dụng lại tên phương thức và có thêm khoảng trắng:

f=(y,x)=>alert(
    (
      (s="|".repeat(x*4)+"|\n") + 
      "|   ".repeat(x)+"|\n"
    ).repeat(y)+s
)

(Sử dụng đề xuất của edc65 để sử dụng |cho khoảng cách hình ảnh tốt hơn.)


7

Pip, 29 24 = 23 + 1 byte

Yêu cầu -ncờ. Lấy chiều cao và chiều rộng làm dòng lệnh lập luận và xây dựng các hộp của 1s.

([1X4m]XbRLa+1)@<v.1R0s

Giải trình:

                         a,b are cmdline args; m is 1000; v is -1; s is " " (implicit)
 [1X4m]                  List containing 1111 and 1000
       Xb                String repetition of each element b times
         RLa+1           Repeat the list a+1 times
(             )@<v       Now we have one row too many at the end, so take everything
                         but the last item (equiv to Python x[:-1])
                  .1     Concatenate a 1 to the end of each row
                    R0s  Replace 0 with space
                         Print, joining list on newlines (implicit, -n flag)

Chương trình này tận dụng lợi thế của thực tế là chuỗi là số và số là chuỗi trong Pip. (Và ba không gian trong các hộp đó tình cờ là đúng để tận dụng lợi thế của tích hợpm biến tích hợp!)

Đây là cách danh sách được xây dựng với đầu vào 2 3:

[1111;1000]
[111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111]
[1111111111111;1000100010001;1111111111111;1000100010001;1111111111111]
[1111111111111;"1   1   1   1";1111111111111;"1   1   1   1";1111111111111]

Và đầu ra cuối cùng:

C:\> pip.py 2 3 -ne "([1X4m]XbRLa+1)@<v.1R0s"
1111111111111
1   1   1   1
1111111111111
1   1   1   1
1111111111111

Thêm về Pip


6

Perl, 72 63 52 50 byte

Phiên bản ngắn nhất của tôi chưa sử dụng $/để có được một char dòng mới gọn hơn:

$ perl -e 'print((($,="="."   ="x pop.$/)=~s/./=/gr)x(1+pop))' 2 5
=====================
=   =   =   =   =   =
=====================
=   =   =   =   =   =
=====================

Bản cập nhật trước đó đặt các dòng chủ yếu là trống trong dấu tách bản ghi đầu ra $,và in danh sách các dòng liên tục.

$ perl -e 'print((($,="="."   ="x pop."\n")=~s/./=/gr)x(1+pop))' 2 5

Phiên bản trước có thể rõ ràng hơn một chút đối với người đọc thông thường:

$ perl -E 'say($y=($x="="."   ="x pop)=~s/./=/gr);for(1..pop){say$x;say$y}' 2 5

Phiên bản đầu tiên được sử dụng @ARGVthay vì pop:

$ perl -E 'say($y=($x="="."   ="x$ARGV[1])=~s/./=/gr);for(1..$ARGV[0]){say$x;say$y}' 2 5

5

Con trăn 2, 58 57 byte

Thực hiện khá đơn giản.

def f(x,y):a="="*(4*y+1);print(a+"\n="+"   ="*y+"\n")*x+a

Kiểm tra nó ở đây.

Cảm ơn Sp3000 vì đã lưu một byte.


5

GNU sed -r, 160

Thở dài, tôi nghĩ rằng nó sẽ nhỏ hơn, nhưng đây là dù sao đi nữa. Thật không may sed regexes không có bất kỳ khả năng nhìn.

:
s/(.*)1$/   =\1/;t
s/([= ]+)/\1\n\1/
:b
s/   (.*\n)/===\1/;tb
s/(1*)1 $/\n\1/
:c
s/([^\n]*\n[^\n]*\n)(1*)1$/\1\1\2/;tc
s/(=+)(.*)/\1\2\1/
s/(^|\n)(.)/\1=\2/g

Lấy đầu vào là unary từ STDIN:

$ sed -rf boxes.sed <<< "11 111"
=============
=   =   =   =
=============
=   =   =   =
=============
$

4

CJam, 25 byte

q~)S3*'=5*+4/f*3f>\)*1>N*

Hãy thử trực tuyến trong trình thông dịch CJam .

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

q~                        e# Read H and W from STDIN.
   S3*'=5*+               e# Push "   =====".
           4/             e# Chop into ["   =" "===="].
  )          f*           e# Repeat each string W+1 times.
               3f>        e# Cut off the first three characters.
                  \)*     e# Repeat the resulting array H+1 times.
                     1>   e# Remove the first string.
                       N* e# Join the lines.

4

Tuyệt vời, 168 byte

Câu trả lời này chỉ hoạt động tối đa 255x255, không phải 1000x1000, do những hạn chế của ngôn ngữ Marbelous. Tôi đang làm việc trên một thư viện 32 bit, nhưng nó sẽ không sẵn sàng sớm.

Đầu vào được cung cấp dưới dạng hai tham số dòng lệnh hoặc tham số chức năng cho bảng chính.

@2@3}1@0
SLEL//>0\/
@3@1}0--
}1&0@0/\&0
@1/\@2}1\/
:SL
..}0@0
&0/\>0&0
EN..--\/
{0@0/\ES
:EL
..@0
..>0EN
}0--\/
@0/\EX
:EX
}0
\/3D3D3D3D
:ES
}0
\/3D202020
:EN
}0
{03D0A

Mã giả:

MB(H,W):
    EL(W)
    for 1..H:
        SL(W)
        EL(W)
EL(W):
    for 1..W:
        EX()
    EN()
SL(W):
    for 1..W:
        ES()
    EN()
EX():
    print "===="
ES():
    print "=   "
EN():
    print "=\n"

3

CJam 52 51 46 41 byte

l~:B;:A;'=:U{{U4*}B*N}:V~{U{SZ*U}B*NUV}A*

Cảm ơn Sp3000 cho -5 ký tự

Cảm ơn Martin Büttner ♦ cho 5 ký tự khác

Thử nó


3

chức năng c, 81

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

Chương trình kiểm tra:

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

int main (int argc, char **argv)
{
  f(2, 3);
}

Tôi đã bỏ một vài ký tự để coi nó là một dòng thay vì gấp đôi cho: x;f(h,w){for(w=w*4+2;x<=w*h*2+w;x++)putchar(x%w?x/w%2?x%w%4!=1?32:61:61:10);}- 78

1
Đáng lẽ phải xem xét các câu trả lời khác trước = /, nhận xét của tôi là phiên bản dài hơn của câu trả lời của Reto Koradi.

vâng, tôi đã cố gắng khá nhiều (và thất bại) để đưa nó vào một vòng lặp (ngắn hơn)
Chấn thương kỹ thuật số

3

PHP4.1, 76 71 69 byte

Đây là golf như tôi có thể nhận được.

$R=str_repeat;echo$R(($T=$R('-',4*$H+1))."
|{$R('   |',$H)}
",$V),$T;

Điều này hy vọng khóa Hcó số lượng dòng và Vsố lượng hộp trên mỗi dòng.

Tôi đang sử dụng -|chỉ để các hộp thực sự trông giống như các hộp. Nếu được yêu cầu, tôi có thể thay đổi nó thành =. Nó không quan trọng char được sử dụng.
Rời đi -|cũng giúp hiểu được mớ hỗn độn đang diễn ra.


Phương thức cũ, 76 byte:

for($R=str_repeat;$H--;)echo$T=$R('-',($V*4)+1),"
|{$R('   |',$V)}
";echo$T;

Ví dụ về đầu ra:

http://localhost/file.php?H=2&V=3

-------------
|   |   |   |
-------------
|   |   |   |
-------------

3

Julia, 59 byte

(n,m)->(l="="^(4m+1)*"\n";print(l*("="*"   ="^m*"\n"*l)^n))

Điều này tạo ra một hàm không tên, chấp nhận hai số nguyên làm đầu vào và in kết quả ra STDOUT. Để gọi nó, đặt tên cho nó, vdf=(n,m)->... .

Ungolfed + giải thích:

function f(n, m)
    # Store the solid row
    l = "="^(4m + 1) * "\n"

    # Print all rows by repeating a pattern n times
    print(l * ("=" * "   ="^m * "\n" * l)^n)
end

Ví dụ:

julia> f(2, 3)
=============
=   =   =   =
=============
=   =   =   =
=============

julia> f(1, 5)
=====================
=   =   =   =   =   =
=====================

Mọi góp ý đều được chào đón.


3

bash + coreutils, 57

dc -e"2do$2 4*1+^1-pd8*F/1+$1si[fli1-dsi0<c]dscx"|tr 0 \ 

Điều này sử dụng dcđể in các số nhị phân có 1s cho các cạnh hộp và 0s cho các khoảng trắng.

  • số X tất cả được tính bằng 2 ^ (width * 4 + 1) - 1, sau đó đẩy và in
  • các 10001...0001số được tính bằng cách , sau đó đẩyX* 8 / 15 + 1
  • ngăn xếp sau đó được đổ heightlần

Sau trđó chuyển đổi0 s thành ký tự không gian.

Đầu ra

$ ./boxes.sh 2 4
11111111111111111
1   1   1   1   1
11111111111111111
1   1   1   1   1
11111111111111111
$ 

3

R, 83 81

Là một hàm không tên lấy h và w làm tham số. Xây dựng các dòng thứ 1 và thứ 2 thành một vectơ cho mỗi hàng và nhân rộng nó hlần. Nối một vectơ cho dòng dưới cùng và catsử dụng vectơ fillđể hạn chế độ dài của các dòng. Bây giờ tận dụng bất kỳ quy tắc nhân vật có thể nhìn thấy.

function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')

Chạy thử nghiệm

> f=function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')
> f(4,2)
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
> 

3

Python 3 2, 160 87 85 79 byte

Tôi biết điều này có thể được chơi golf nhiều hơn nữa, tôi muốn có một số gợi ý vì đây là lần đầu tiên tôi chơi golf.

def d(x,y):
    for i in[1]*x:print'='*(4*y+1)+'\n'+'=   '*(y+1)
    print'='*(4*y+1)

Nhờ @Cool Guy và @ lời khuyên Sp3000, tôi thu hẹp kích thước xuống chỉ còn trên dưới một nửa.

Vd: d (3,3)

=============
=   =   =   =   
=============
=   =   =   =   
=============
=   =   =   =   
=============

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

Xin lỗi các khoảng trắng dấu.


1
Mức độ thụt có thể được giảm.
Spikatrix

3
Bạn không cần phải xây dựng một danh sách sau đó tham gia. Chuỗi có thể được nhân lên'='*(4*y+1)
Sp3000

1
Cài đặt w=4*y+1tiết kiệm 3 byte.
DLosc

@Cool Guy Tôi đang sử dụng một tab, không phải 4 dấu cách.
nsane

Ồ được thôi. Không nhận thấy điều đó.
Spikatrix

2

KDB (Q), 37 byte

{(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}

Giải trình

                      (4#"=";"=   ")     / box shape
           (5+4*y-1)#'                   / extend y axis
 (3+2*x-1)#                              / extend x axis
{                                   }    / lambda

Kiểm tra

q){(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}[2;5]
"====================="
"=   =   =   =   =   ="
"====================="
"=   =   =   =   =   ="
"====================="

2

JavaScript, 92 85 byte

Tôi đã hy vọng nó sẽ ngắn hơn câu trả lời JS khác (công việc tốt như mọi khi, edc65), nhưng ồ tốt. Tôi có cảm giác toán học ở đây có thể được đánh gôn hơn nữa.

f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s

Xin lỗi, không thể giúp với toán học - đầu tôi quay cuồng ... nhưng đây là một số vi mô: f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s-> 85
edc65

@ edc65 thật tuyệt, cảm ơn! Những thứ như 2*r+1=> r-~rchính xác là những gì tôi muốn nói khi chơi golf và người đặc biệt đó là thiên tài. :)
vvye

2

Octave, 69 65 64

y=ones([2,4].*input()+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Cảm ơn DLosc đã chỉ ra các vấn đề dẫn đến -1

Có đầu vào là [1 1]và đầu ra:

#####
# #
#####

Bạn cũng có thể chỉ cần nhập '1' và nhận 1x1. Nếu đầu vào thực sự cần phải có 1 1, kích thước sẽ tăng lên88 8584 :

y=ones([2,4].*eval(['[',input(0,'s'),']'])+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Lưu ý: Matlab không cho phép chuỗi hoặc đầu vào (số nguyên) của Octave, nhưng đây là phiên bản Matlab ( 67 ):

y=ones([2,4].*input('')+1);y(1:2:end,:)=4;y(:,1:4:end)=4;char(y+31)

2

C, 76 byte

w,n;f(r,c){for(w=c*4+2,n=w*r*2+w;n--;)putchar(n%w?n/w%2&&n%w%4-1?32:61:10);}

Được gọi là một hàm với số lượng hàng và cột làm đối số. Ví dụ:

f(5, 2)

2

CJam, 30 29 byte

Phiên bản mới với phần thừa +ở cuối đã bị xóa (cảm ơn, Dennis):

l~_4*)'=*N+:F\'=S3*+*'=+N++*F

Tôi biết rằng Dennis đã đăng một giải pháp CJam rằng nhịp đập này bằng cách dặm. Nhưng đây là nỗ lực đầu tiên của tôi tại CJam, vì vậy thật tuyệt vời khi nó hoạt động. :)

Lực lượng vũ phu. Xây dựng dòng đầu tiên từ 4 * H + 1 =các dấu hiệu, sau đó là dòng thứ hai từ các =lần lặp lại H, với một dòng khác =được thêm vào. Sau đó nối hai dòng, lặp lại toàn bộV thời gian, và sau đó thêm một bản sao khác của dòng đầu tiên.

Cảm giác như tôi có quá nhiều thao tác ngăn xếp, và thậm chí cuối cùng đã lưu trữ dòng đầu tiên trong một biến vì tôi phải xáo trộn các thứ xung quanh trên ngăn xếp thậm chí nhiều hơn.

Nhìn chung không thanh lịch lắm, nhưng bạn phải bắt đầu ở đâu đó ... và tôi muốn thử một vấn đề đơn giản trước.


Bạn không cần +cuối cùng. CJam in toàn bộ ngăn xếp.
Dennis

2

CJam, 23

q~[F8]f{2b*1+' f+N}*_0=

Dùng thử trực tuyến

Giải trình:

q~        read and evaluate the input (height width)
[F8]      make an array [15 8] - 1111 and 1000 in base 2
f{…}      for width and each of [15 8]
  2b      convert the number to base 2
  *       repeat the digits "width" times
  1+      append a 1 to the array of digits (right edge)
  ' f+    add the space character to each digit (0->' ', 1->'!')
  N       push a newline
*         repeat the resulting array "height" times
_0=       copy the first line (bottom edge)


1

Java, 181

Tôi hy vọng rằng theo

Bạn được phép viết một chương trình đầy đủ hoặc một chức năng.

nó tuân thủ các quy tắc để đếm byte của hàm , là 181 trong trường hợp này

import static java.lang.System.*;
public class Boxes
{
    public static void main(String[] args)
    {
        Boxes b=new Boxes();
        System.out.println("1,1:");
        b.b(1,1);
        System.out.println("1,2:");
        b.b(1,2);
        System.out.println("2,1:");
        b.b(2,1);
        System.out.println("2,2:");
        b.b(2,2);
        System.out.println("2,5:");
        b.b(2,5);
    }

    void b(int R, int C){String s="",e=s,x,y,z=s,a="====",n="=\n";int r,c;for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="=   ";}s+=x+n+y+n;}for(c=C;c-->0;){z+=a;}s+=z+n;out.println(s);}
}

Đầu ra là sai. Xem đầu ra số 2: " Mỗi hộp nên có ba khoảng cách ngang trong chúng ". Mã của bạn xuất ra hai khoảng trắng, không phải ba
Spikatrix

@CoolGuy Đã hiểu sai điều này - bây giờ thêm 2 byte, nhưng điều đó không thay đổi nhiều ...
Marco13

1
được. +1. Lưu hai byte bằng cách thay đổi for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}thànhfor(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
Spikatrix

1

C #, 153 151 150

Điều này thực sự không thể cạnh tranh nhưng ở đây chỉ để giải trí:

(h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}}

Cách chạy:

public class Program
{
    public static void Main()
    {
        new System.Action<int, int>((h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}})(3, 4);
    }
}

Mở để cải thiện.


thay thế chuỗi bằng var.
CSharpie

Thật không may, điều đó không được phép. Xem cái này
pmudra

1
Khai báo những ints bên ngoài vòng lặp có thể tiết kiệm một byte.
Spikatrix

1

Python 2.7, 66 byte.

Tôi biết đã có những giải pháp tốt hơn trong python, nhưng đó là cách tốt nhất tôi nghĩ ra.

def f(x,y):a,b,c="="*4,"   =","\n=";print "="+a*y+(c+b*y+c+a*y)*x

Thí dụ:

f(3,4)

=================
=   =   =   =   =
=================
=   =   =   =   =
=================
=   =   =   =   =
=================

Xin lỗi, nhưng điều này tạo ra đầu ra sai cho các trường hợp thử nghiệm 2,3 và 5. Bạn đã trộn lẫn các cột và hàng và nhận nó theo cách ngược lại.
Spikatrix

1

Hồng ngọc 57 48 45

f=->h,w{l=?=*w*4+?=;(l+$/+'=   '*w+"=
")*h+l}

Sử dụng:

print f[2,5]

Nhờ manatwork để tiết kiệm 3 byte.


Hai khả năng cải tiến nhỏ: '='?="<LF>"$/.
manatwork

Một số nhỏ khác: ?=*(w*4+1)?=+?=*w*4
manatwork

1

Java, 123 119 byte

void p(int h,int w){String b="=",d="\n=";for(;w-->0;d+="   =")b+="====";for(d+="\n"+b;h-->0;b+=d);System.out.print(b);}

Lạm dụng các tham số đầu vào như bộ đếm giúp ích rất nhiều trong việc giảm kích thước mã.

Cảm ơn Cool Guy đã gợi ý việc lạm dụng cú pháp.


Chơi gôn nhiều hơn bằng cách sử dụng forvòng lặp thay vì whilevòng lặp.
Spikatrix

Thật không may cho (; w -> 0;) có cùng độ dài với while (w -> 0)
ECS

1
Ý tôi là while(w-->0){d+=" =";b+="====";}-> for(;w-->0;b+="====")d+=" =";giúp tiết kiệm ba byte
Spikatrix

Bạn đúng rồi. Tôi thực sự đã xoay sở để thu được 4 byte trong số này nhờ vào đề xuất của bạn.
ECS

1

Sảnh, 117 119

macro a array a[0:1]$4('#   ' '####');do x=1 to 2+2*&x-1;t=repeat(a[mod(x,2)],&y-1);put t $char%%eval(&y*3). '#';end;%

Thí dụ:

%let x=4;
%let y=4;
data;a;run;

Kết quả:

#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############

Có trình biên dịch trực tuyến nào mà tôi có thể kiểm tra điều này không? BTW, theo kết quả của bạn, chương trình của bạn tạo ra đầu ra sai. Xem đầu ra2: Mỗi hộp nên có ba khoảng cách ngang trong chúng
Spikatrix

@CoolGuy, bạn nói đúng, tôi không nắm bắt được điều đó, đã cập nhật bài viết của tôi. Bạn có thể dùng thử theo yêu cầu của SAS , sẽ là cách ít rắc rối nhất để truy cập trình biên dịch trực tuyến mà không cần thiết lập Trường hợp AWS
Fried Egg

Liên kết đầu tiên của bạn không làm việc cho tôi. Chrome choDNS_PROBE_FINISHED_NXDOMAIN
Spikatrix

Hãy thử cái này, mặc dù liên kết đầu tiên hoạt động tốt với tôi theo yêu cầu của SAS hoặc theo liên kết trên trang này đến 'Trung tâm điều khiển' tại đây
Fried Egg

Tôi không biết tại sao, nhưng việc đi đến trung tâm điều khiển gây ra lỗi tương tự như được đề cập trong nhận xét trước đó của tôi: /
Spikatrix
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.