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.

Spikatrix
sumber

Jawaban:

10

Pyth, 23 byte

Mjbmsm@"= "&%k4dh*4HhyG

Menentukan fungsi gyang berfungsi seperti yang diinginkan.

Demonstrasi.

isaacg
sumber
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
------------------
============
=   =   =   
============
=   =   =   
============
------------------
=============
=   =   =   =
=============
=   =   =   =
=============
randomra
sumber
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>

edc65
sumber
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.)

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

DLosc
sumber
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
Stefan Majewsky
sumber
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.

Kade
sumber
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"
=============
=   =   =   =
=============
=   =   =   =
=============
$
Trauma Digital
sumber
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.
Dennis
sumber
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"
Sparr
sumber
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

TobiasR.
sumber
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);
}
Trauma Digital
sumber
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

-------------
|   |   |   |
-------------
|   |   |   |
-------------
Ismael Miguel
sumber
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.

Alex A.
sumber
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
$ 
Trauma Digital
sumber
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
> 
MickyT
sumber
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.

nsane
sumber
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]
"====================="
"=   =   =   =   =   ="
"====================="
"=   =   =   =   =   ="
"====================="
WooiKent Lee
sumber
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
ay
sumber
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)
sudo rm -rf slash
sumber
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)
Reto Koradi
sumber
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.

Reto Koradi
sumber
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)
aditsu
sumber
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);}
}
Marco13
sumber
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.

pmudra
sumber
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)

=================
=   =   =   =   =
=================
=   =   =   =   =
=================
=   =   =   =   =
=================
heo
sumber
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.

rr-
sumber
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.

ECS
sumber
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:

#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
Telor goreng
sumber
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