Hasilkan kotak!


19

Tugas Anda adalah membuat kotak menggunakan salah satu karakter ASCII sehubungan dengan input yang diberikan.

Uji Kasus

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

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

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

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

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

Memasukkan

  • Masukan dapat diambil dari salah satu dari berikut ini

    • stdin
    • Argumen baris perintah
    • Argumen fungsi (2 argumen, satu untuk setiap angka)
  • Input, jika diambil dari stdin atau argumen baris perintah, akan berisi dua bilangan bulat positif, dipisahkan oleh spasi.

  • Dua angka menunjukkan jumlah kotak di setiap kolom dan baris

Keluaran

  • Kotak harus dikeluarkan di stdout (atau setara terdekat)
  • Setiap kotak harus memiliki tiga ruang horizontal di dalamnya

Aturan

  • Kedua angkanya akan lebih besar dari 0, tetapi tidak akan melampaui 1000
  • Setiap karakter yang terlihat dapat digunakan untuk mengeluarkan kotak. (Selama mereka tidak terlalu keras pada mata!)
  • Anda diizinkan menulis program atau fungsi lengkap.
  • Seharusnya tidak ada karakter yang tidak perlu kecuali karakter tambahan baris baru opsional.

Mencetak gol

Ini adalah , sehingga pengiriman terpendek (dalam byte) menang.

Jawaban:


10

Pyth, 23 byte

Mjbmsm@"= "&%k4dh*4HhyG

Menentukan fungsi gyang berfungsi seperti yang diinginkan.

Demonstrasi.


10

Retina , 57 byte

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


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

Mengambil input di unary dengan baris baru tambahan.

Setiap baris harus menuju ke file sendiri dan #harus diubah ke baris baru di file. Ini tidak praktis tetapi Anda dapat menjalankan kode seperti halnya satu file dengan -sbendera, menjaga #marka (dan mengubah baris baru menjadi# pada input juga). Anda dapat mengubah #kembali ke baris baru di output agar mudah dibaca jika diinginkan. Misalnya:

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

Metode: 5 langkah substitusi tunggal. Dua yang pertama (4 baris pertama) membuat 2*N+1dengan Mgrid satu dan 3 langkah berikutnya (6 baris) memformatnya menjadi output yang diinginkan.

String perantara (dibatasi oleh -'s):

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

Satu file per baris selalu tampak seperti pilihan desain yang sangat aneh.
curiousdannii

1
@curiousdannii Dibuat dengan cara ini sehingga karakter baris baru dapat digunakan dalam ekspresi regex tanpa melarikan diri tetapi direncanakan akan diubah menjadi format 1-file yang lebih masuk akal.
randomra

8

JavaScript ( ES6 ), 83

Fungsi dengan parameter baris dan kolom. Menggunakan string template, ada 2 baris baru yang disematkan yang signifikan dan dihitung.

Output via alert(popup). Saat alertmenggunakan font proporsional, kami mendapatkan hasil yang lebih baik menggunakan huruf dengan lebar yang mirip dengan spasi alih-alih =.

Tes di Firefox menggunakan konsol untuk mendapatkan hasil nyata alert, atau jalankan cuplikan di bawah ini.

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>


Cuplikan kode run tidak berfungsi untuk saya, lihat saja kotak dengan '2 3' di dalamnya dan panah yang sepertinya menyarankan Anda harus mengkliknya untuk mendapatkan hasilnya. Menggunakan tombol halaman penuh atau mencoba browser lain tidak mengubah apa pun.
Dennis Jaheruddin

@ DennisJaheruddin, Hal yang sama terjadi pada saya ketika menggunakan chrome (tidak mendukung ES6). Coba firefox.
Spikatrix

1
@DennisJaheruddinTest in Firefox
edc65

7

JavaScript (ES6), 75 73

Menggunakan repeatpanggilan berlebihan , kami ulangi |, lalu ulangi |dengan spasi tambahan, dan ulangi kedua pengulangan itu untuk membuat baris:

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

(Baris baru signifikan, sesuai saran edc65 untuk menggunakan string template.)

Potongan:

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

Tanpa string templat, tanpa penggunaan kembali metode-nama, dan dengan spasi kosong ditambahkan:

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

(Menggunakan rekomendasi edc65 untuk digunakan |untuk jarak visual yang lebih baik.)


7

Pip, 29 24 = 23 + 1 byte

Membutuhkan -nbendera. Mengambil tinggi dan lebar sebagai baris perintah args dan membangun kotak dari 1s.

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

Penjelasan:

                         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)

Program ini mengambil keuntungan besar dari fakta bahwa string adalah angka dan angka adalah string di Pip. (Dan tiga ruang di kotak itu kebetulan tepat untuk memanfaatkan mvariabel bawaan!)

Begini cara daftar dibuat dengan input 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]

Dan hasil akhirnya:

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

Lebih lanjut tentang Pip


6

Perl, 72 63 52 50 byte

Versi terpendek saya namun digunakan $/untuk mendapatkan char baris baru lebih kompak:

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

Pembaruan sebelumnya menempatkan sebagian besar baris kosong di pemisah catatan output $,, dan mencetak daftar garis kontinu.

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

Versi sebelumnya mungkin sedikit lebih jelas untuk pembaca biasa:

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

Versi pertama yang digunakan @ARGValih-alih pop:

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

5

Python 2, 58 57 Bytes

Implementasi yang cukup mudah.

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

Lihat disini.

Terima kasih kepada Sp3000 untuk menghemat satu byte.


5

GNU sed -r, 160

Sigh, saya pikir ini akan lebih kecil, tapi ini dia. Sayangnya sed regex tidak memiliki kemampuan lookaround.

:
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

Mengambil masukan sebagai unary dari STDIN:

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

4

CJam, 25 byte

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

Cobalah online di juru bahasa CJam .

Bagaimana itu bekerja

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

Marbelous, 168 byte

Jawaban ini hanya berfungsi hingga 255x255, bukan 1000x1000, karena keterbatasan bahasa Marbelous. Saya sedang mengerjakan perpustakaan 32-bit, tetapi tidak akan siap dalam waktu dekat.

Input disediakan sebagai dua parameter baris perintah atau parameter fungsi ke papan utama.

@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

Kodesemu:

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*

Berkat Sp3000 untuk -5 karakter

Terima kasih kepada Martin Büttner untuk 5 karakter lainnya

Cobalah


3

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

Program uji:

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

Saya menjatuhkan beberapa karakter untuk memperlakukannya sebagai satu baris, bukan ganda untuk: 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
Seharusnya melihat jawaban lain pertama = /, komentar saya adalah versi yang lebih panjang dari jawaban Reto Koradi.

ya, saya berusaha cukup keras (dan gagal) untuk mendapatkan ini menjadi satu loop (lebih pendek)
Digital Trauma

3

PHP4.1, 76 71 69 byte

Ini golf seperti yang saya bisa dapatkan.

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

Ini mengharapkan kunci Huntuk memiliki jumlah baris dan Vjumlah kotak per baris.

Saya menggunakan -dan |supaya kotak benar-benar terlihat seperti kotak. Jika diperlukan, saya bisa mengubahnya ke =. Tidak masalah char yang digunakan.
Meninggalkan -dan |juga membantu untuk memahami kekacauan yang terjadi.


Metode lama, 76 byte:

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

Contoh output:

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

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

3

Julia, 59 byte

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

Ini menciptakan fungsi tanpa nama yang menerima dua bilangan bulat sebagai input dan mencetak hasilnya ke STDOUT. Untuk menyebutnya, berikan nama, mis f=(n,m)->....

Penjelasan + tidak dikumpulkan:

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

Contoh:

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

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

Setiap saran dipersilahkan.


3

bash + coreutils, 57

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

Ini digunakan dcuntuk mencetak angka biner yang ada 1untuk tepi kotak dan 0s untuk spasi.

  • semua yang nomor X dihitung dengan 2 ^ (width * 4 + 1) - 1, lalu didorong dan dicetak
  • yang 10001...0001nomor dihitung dengan , kemudian mendorongX* 8 / 15 + 1
  • tumpukan itu kemudian dibuang height kali

Itu tr kemudian bertobat tersebut0 s untuk karakter ruang.

Keluaran

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

3

R, 83 81

Sebagai fungsi yang tidak disebutkan namanya mengambil h dan w sebagai parameter. Buat garis 1 dan kedua menjadi vektor untuk setiap baris dan ulangi hkali. Menambahkan vektor untuk garis bawah dan catmenggunakan vektor filluntuk membatasi panjang garis. Sekarang manfaatkan aturan karakter apa pun yang terlihat.

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

Uji coba

> 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

Saya tahu ini bisa lebih banyak bermain golf, saya ingin beberapa saran karena ini adalah percobaan pertama saya bermain golf.

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

Berkat tips @Cool Guy dan @ Sp3000, saya mempersempit ukurannya hingga tepat di atas setengahnya.

Misalnya: d (3,3)

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

Cobalah di sini .

Maafkan spasi spasi tambahan.


1
Tingkat indentasi dapat dikurangi.
Spikatrix

3
Anda tidak perlu membuat daftar lalu bergabung. String dapat dikalikan'='*(4*y+1)
Sp3000

1
Pengaturan w=4*y+1menghemat 3 byte.
DLosc

@ Cool Guy Saya menggunakan tab, bukan 4 spasi.
nsane

Oh oke. Tidak memperhatikan itu.
Spikatrix

2

KDB (Q), 37 byte

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

Penjelasan

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

Uji

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

2

JavaScript, 92 85 byte

Saya berharap ini akan lebih pendek dari jawaban JS lainnya (kerja bagus seperti biasa, edc65), tapi oh well. Saya merasa matematika di sini bisa lebih jauh golf.

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

Maaf, tidak dapat membantu dengan matematika - kepalaku berputar ... tapi di sini ada beberapa microop: 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 itu bagus, terima kasih! Hal-hal seperti 2*r+1=> r-~rpersis apa yang saya maksudkan dengan bermain golf matematika, dan yang khusus itu jenius. :)
vvye

2

Oktaf, 69 65 64

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

Terima kasih kepada DLosc untuk menunjukkan masalah yang mengarah ke -1

Mengambil input [1 1]dan output:

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

Anda juga bisa memasukkan '1' dan mendapatkan 1x1. Jika input benar-benar perlu1 1 , ukurannya naik88 8584 :

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

Catatan: Matlab tidak memungkinkan rangkaian atau input Octave (integer), tetapi di sini adalah versi 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);}

Dipanggil sebagai fungsi dengan jumlah baris dan kolom sebagai argumen. Sebagai contoh:

f(5, 2)

2

CJam, 30 29 byte

Versi baru dengan redundan +pada akhirnya dihapus (terima kasih, Dennis):

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

Saya tahu bahwa Dennis sudah memposting solusi CJam yang mengalahkan ini dengan mil. Tapi ini adalah upaya pertama saya di CJam, jadi itu keajaiban bahwa itu bekerja sama sekali. :)

Kekuatan yang cukup kasar. Buat garis pertama dari 4 * H + 1 =tanda, lalu baris kedua dari waktu yang =berulang H, dengan yang lain =ditambahkan. Kemudian menggabungkan dua baris, mengulangi semuanya Vkali, dan kemudian menambahkan salinan lain dari baris pertama.

Rasanya seperti saya memiliki manipulasi stack terlalu banyak, dan bahkan akhirnya menyimpan baris pertama dalam sebuah variabel karena saya harus mengacak barang-barang di stack bahkan lebih sebaliknya.

Secara keseluruhan tidak terlalu elegan, tetapi Anda harus mulai di suatu tempat ... dan saya ingin mencoba masalah sederhana terlebih dahulu.


Anda tidak perlu +pada akhirnya. CJam mencetak seluruh tumpukan.
Dennis

2

CJam, 23

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

Cobalah online

Penjelasan:

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

Jawa, 181

Saya berharap itu sesuai dengan

Anda diizinkan menulis program atau fungsi lengkap.

itu sesuai dengan aturan untuk menghitung byte fungsi , yaitu 181 dalam hal ini

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

Outputnya salah. Lihat keluaran no 2: " Setiap kotak harus memiliki tiga ruang horisontal di dalamnya ". Kode Anda menghasilkan dua spasi, bukan tiga
Spikatrix

@CoolGuy Salah menghitung ini - sekarang 2 byte lebih, tapi itu tidak banyak berubah ...
Marco13

1
baik. +1. Simpan dua byte dengan mengubah for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}kefor(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

Ini tidak dapat benar-benar bersaing tetapi ini hanya untuk bersenang-senang:

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

Cara menjalankan:

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

Terbuka untuk peningkatan.


ganti string dengan var.
CSharpie

Sayangnya itu tidak diizinkan. Lihat ini
pmudra

1
Mendeklarasikan hal-hal intdi luar loop dapat menghemat satu byte.
Spikatrix

1

Python 2.7, 66 byte.

Saya tahu sudah ada solusi yang lebih baik dalam python, tapi itu yang terbaik yang saya hasilkan.

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

Contoh:

f(3,4)

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

Maaf, tetapi ini menghasilkan output yang salah untuk kasus uji 2,3 dan 5. Anda mencampur kolom dan baris dan mendapatkannya dengan cara yang berlawanan.
Spikatrix

1

Ruby, 57 48 45

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

Pemakaian:

print f[2,5]

Berkat manatwork karena telah menghemat 3 byte.


Dua kemungkinan peningkatan kecil: '='?=dan "<LF>"$/.
manatwork

Satu lagi yang kecil: ?=*(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);}

Menyalahgunakan parameter input sebagai penghitung sangat membantu dalam mengurangi ukuran kode.

Terima kasih kepada Cool Guy karena menyarankan penyalahgunaan sintaksis.


Golf lebih banyak dengan menggunakan forloop, bukan whileloop.
Spikatrix

Sayangnya untuk (; w -> 0;) memiliki panjang yang sama dengan while (w -> 0)
ECS

1
Maksud saya while(w-->0){d+=" =";b+="====";}-> for(;w-->0;b+="====")d+=" =";yang menghemat tiga byte
Spikatrix

Kamu benar. Saya benar-benar berhasil memeras 4 byte dari ini berkat saran Anda.
ECS

1

SAS, 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;%

Contoh:

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

Hasil:

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

Apakah ada kompiler online tempat saya dapat menguji ini? BTW, sesuai hasil Anda, program Anda menghasilkan output yang salah. Lihat output2: Setiap kotak harus memiliki tiga ruang horisontal di dalamnya
Spikatrix

@ CoolGuy, Anda benar, saya tidak menangkapnya, memperbarui posting saya. Anda dapat mencoba SAS On Demand , akan menjadi cara yang paling tidak sulit untuk mengakses kompiler online tanpa membuat AWS Instance
Fried Egg

Tautan pertama Anda tidak berfungsi untuk saya. Chrome memberikanDNS_PROBE_FINISHED_NXDOMAIN
Spikatrix

Coba yang ini, meskipun tautan pertama berfungsi baik untuk saya SAS On Demand atau ikuti tautan di halaman ini ke 'Control Center' di sini
Fried Egg

Saya tidak tahu mengapa, tetapi pergi ke pusat kendali menyebabkan kesalahan yang sama seperti yang disebutkan dalam komentar saya sebelumnya: /
Spikatrix
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.