Kutular oluşturun!


19

Göreviniz, verilen girdilere göre herhangi bir ASCII karakteri kullanarak kutular oluşturmaktır.

Test Durumları

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

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

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

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

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

Giriş

  • Giriş aşağıdakilerden birinden alınabilir

    • stdin
    • Komut satırı bağımsız değişkenleri
    • İşlev bağımsız değişkenleri (her sayı için bir tane olmak üzere 2 bağımsız değişken)
  • Girdi, stdinkomut satırı bağımsız değişkenlerinden alınırsa veya bir boşlukla ayrılmış iki pozitif tamsayı içerir.

  • İki sayı, her bir sütun ve satırdaki kutu sayısını gösterir

Çıktı

  • Kutular çıktılanmalıdır stdout(veya en yakın eşdeğeri)
  • Her kutunun içinde üç yatay boşluk olmalıdır

kurallar

  • Her iki sayı da 0'dan büyük olacak, ancak 1000'den fazla olmayacak
  • Kutuların çıktısı için görünür herhangi bir karakter kullanılabilir. (göze çok sert olmadıkları sürece!)
  • Tam bir program veya işlev yazmanıza izin verilir.
  • İsteğe bağlı bir son satırsonu karakteri dışında gereksiz karakterler olmamalıdır.

puanlama

Bu , bu yüzden en kısa gönderme (bayt cinsinden) kazanır.

Yanıtlar:


10

Pyth, 23 bayt

Mjbmsm@"= "&%k4dh*4HhyG

gİstediğiniz gibi çalışan işlevi tanımlar .

Gösteri.


10

Retina , 57 bayt

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


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

Sondaki satırsonu ile tek başına girdi alır.

Her satır kendi dosyasına gitmeli #ve dosyalardaki satırsonu olarak değiştirilmelidir. Bu pratik değildir, ancak kodu işaretçileri olan (ve sondaki yeni satırı girişte de değiştirerek) -sbayrağı olan tek bir dosya gibi çalıştırabilirsiniz . İsterseniz, okunabilirlik için çıktıları yeni satırlara dönüştürebilirsiniz. Örneğin:###

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

Yöntem: 5 tekli ikame adımı. İlk iki (ilk 4 satır) bir 2*N+1by by Mgrid oluşturur ve sonraki 3 adım (6 satır) bunu istenen çıktıya biçimlendirir.

Ara dizeler (tarafından sınırlandırılmıştır -):

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

Satır başına bir dosya her zaman çok garip bir tasarım seçeneği gibi görünür.
curiousdannii

1
@curiousdannii Bu şekilde yeni satır karakteri kaçış olmadan normal ifade ifadelerinde kullanılabilir hale getirildi, ancak daha makul bir 1 dosya biçimine dönüştürülmesi planlanıyor.
randomra

8

JavaScript ( ES6 ), 83

Satır ve sütun parametreleri içeren bir işlev. Şablon dizelerini kullanarak, önemli ve sayılan 2 katıştırılmış yeni satır vardır.

Üzerinden çıktı alert (açılır pencere). Gibi alertkullanım orantılı yazı, biz yerine uzaya bir genişlik benzer bir mektup kullanarak daha iyi bir sonuç almak =.

Gerçek alertçıktıya sahip olmak için konsolu kullanarak Firefox'ta test edin veya aşağıdaki snippet'i çalıştırın.

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>


Kod snippet'ini çalıştır benim için çalışmıyor, sadece içinde '2 3' bulunan bir kutu ve sonucu almak için tıklamanız gerektiğini gösteren bir ok görün. Tam sayfa düğmesini kullanmak veya farklı bir tarayıcıyı denemek hiçbir şeyi değiştirmez.
Dennis Jaheruddin

@DennisJaheruddin, Krom kullanırken de aynı şey oluyor (ES6'yı desteklemiyor). Firefox'u deneyin.
Spikatrix

1
@DennisJaheruddinTest in Firefox
edc65

7

JavaScript (ES6), 75 73

Bol repeatçağrıları kullanarak , tekrarlar |, ardından |arka boşluklarla tekrarlar ve satır yapmak için bu tekrarların her ikisini de tekrarlarız:

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

(Edc65'in şablon dizeleri kullanma önerisine göre satırsonu önemlidir.)

Pasaj:

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

Şablon dizeleri olmadan, yöntem adının yeniden kullanımı olmadan ve boşluk eklenmişse:

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

(Daha iyi görsel boşluklar için edc65'in önerisini kullanma |.)


7

Pip, 29 24 = 23 + 1 bayt

-nBayrağı gerektirir . Yükseklik ve genişliği komut satırı argümanları olarak alır ve 1s kutularını oluşturur .

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

Açıklama:

                         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)

Bu program, dizelerin sayı ve sayıların Pip'deki dizeler olmasından büyük ölçüde yararlanır. (Ve bu kutulardaki üç boşluk, yerleşik olandan faydalanmak için doğru oldum değişkenten !)

Listenin girdiyle nasıl oluşturulacağı aşağıda açıklanmıştır 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]

Ve son çıktı:

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

Pip hakkında daha fazlası


6

Perl, 72 63 52 50 bayt

En kısa versiyonum henüz $/yeni satır karakterlerini daha kompakt hale getirmek için kullanıyor :

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

Önceki güncelleme çoğunlukla boş satırları çıktı kaydı ayırıcısına yerleştirir $,ve sürekli satırların bir listesini yazdırır.

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

Önceki sürüm, sıradan okuyucu için biraz daha net olabilir:

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

Bunun @ARGVyerine kullanılan ilk sürüm 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 Bayt

Oldukça basit uygulama.

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

Buradan kontrol edin.

Bir bayt tasarrufu için Sp3000'e teşekkürler.


5

GNU sed -r, 160

Ah, bunun daha küçük olacağını düşündüm, ama işte burada. Ne yazık ki sed regexes herhangi bir inceleme yeteneğine sahip değil.

:
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

Girişi STDIN'den tekli olarak almak:

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

4

CJam, 25 bayt

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

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

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 bayt

Bu cevap, Harbelous dilinin sınırlamaları nedeniyle sadece 1000x1000 değil 255x255'e kadar çalışır. 32 bitlik bir kitaplık üzerinde çalışıyorum ama yakında hazır olmayacak.

Giriş, ana karta iki komut satırı parametresi veya işlev parametresi olarak sağlanır.

@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

pseudocode:

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 bayt

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

-5 karakter için Sp3000 sayesinde

Martin Büttner ♦ 5 karakter daha için teşekkürler

Dene


3

c işlevi, 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);}

Test programı:

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

Ben bunun yerine çift yerine tek bir satır olarak tedavi etmek için birkaç karakter düştü: 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
İlk önce diğer cevaplara bakmalıydım = /, yorumum Reto Koradi'nin cevabının daha uzun bir versiyonudur.

evet, bunu tek bir (daha kısa) döngü içine almak için oldukça zor (ve başarısız) çalıştı
Dijital Travma

3

PHP4.1, 76 71 69 bayt

Bu alabildiğim kadar golf.

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

Bu, anahtarın Hsatır ve Vsatır başına kutu sayısına sahip olmasını bekler .

Kullanıyorum -ve |böylece kutular aslında kutulara benziyor. Gerekirse, olarak değiştirebilirim =. Kullanılan karakterin önemi yok.
Ayrılıyor -ve |ayrıca devam eden karışıklığı anlamaya yardımcı oluyor.


Eski yöntem, 76 bayt:

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

Çıktı örneği:

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

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

3

Julia, 59 bayt

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

Bu, giriş olarak iki tamsayıyı kabul eden ve sonucu STDOUT'a yazdıran adlandırılmamış bir işlev oluşturur. Bunu aramak için bir ad verin, örn f=(n,m)->....

Ungolfed + açıklaması:

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

Örnekler:

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

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

Herhangi bir öneri bekliyoruz.


3

bash + coreutils, 57

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

Bu , kutu kenarları için s ve boşluklar için s olan dcikili sayıları yazdırmak için kullanılır.10

  • X sayısı hepsi hesaplanır 2 ^ (width * 4 + 1) - 1, sonra itilir ve yazdırılır
  • 10001...0001sayısı hesaplanır , daha sonra itilirX* 8 / 15 + 1
  • Yığın daha sonra boşaltılır heightkez

Ardından tr, 0s boşluk karakterlerine dönüştürülür .

Çıktı

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

3

R, 83 81

H ve w parametrelerini alan adsız bir işlev olarak. Her satır için 1. ve ikinci satırları bir vektöre oluşturur ve hsüreleri çoğaltır . Alt çizgi için bir vektör ekler ve çizgilerin uzunluğunu kısıtlamak için catvektörü fillsiler. Şimdi görünür karakter kurallarından faydalanır.

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

Test sürüşü

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

Bu çok daha fazla golf olabilir biliyorum, bu benim ilk denemede olduğu gibi bazı öneriler istiyorum.

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

@Cool Guy ve SP3000 ipuçlarına @ teşekkürler, ben sadece aşağı boyutunu daralmış yukarıdaki yarısında aşağıda.

Örnek: d (3,3)

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

Burada deneyin .

Sondaki boşlukları bahane edin.


1
Girinti seviyesi düşürülebilir.
Spikatrix

3
Bir liste oluşturmanıza ve sonra katılmanıza gerek yoktur. Dizeler çoğaltılabilir'='*(4*y+1)
Sp3000

1
Ayar w=4*y+13 bayt kaydeder.
DLosc

@Cool Guy 4 boşluk değil, sekme kullanıyorum.
nsane

Ah tamam. Fark etmedim.
Spikatrix

2

KDB (Q), 37 bayt

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

açıklama

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

Ölçek

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

2

JavaScript, 92 85 bayt

Bu diğer JS cevap (her zamanki gibi güzel çalışma, edc65) daha kısa olacağını ummuştu, ama oh iyi. Buradaki matematiğin daha fazla golf oynayabileceğini hissediyorum.

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

Üzgünüm, matematik ile ilgili yardım edemem - başım dönüyor ... ama işte bazı mikrooplar: 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 bu harika, teşekkürler! 2*r+1=> Gibi şeyler r-~rtam olarak matematiği golf ile kastediyorum ve o özel deha. :)
vvye

2

Oktav, 69 65 64

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

-1'e yol açan sorunları işaret ettiği için DLosc'a teşekkürler

Girişi alır [1 1]ve çıktılar:

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

Ayrıca sadece '1' girebilir ve 1x1 alabilirsiniz. Girdinin gerçekten olması gerekiyorsa1 1 , boyut88 8584 :

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

Not: Matlab, Octave'nin zincirleme veya girişine (tamsayı) izin vermez, ancak Matlab sürümü ( 67 ):

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

2

C, 76 bayt

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

Bağımsız değişken olarak satır ve sütun sayısı içeren bir işlev olarak çağrılır. Örneğin:

f(5, 2)

2

CJam, 30 29 bayt

+Sonunda gereksiz olan yeni sürüm kaldırıldı (teşekkürler Dennis):

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

Dennis'in bunu kilometrelerce aşan bir CJam çözümü yayınladığını biliyorum. Ama bu benim CJam'daki ilk denemem, bu yüzden işe yaraması bir mucize. :)

Oldukça kaba kuvvet. 4 * H + 1 =İşaretlerden ilk satırı , daha sonra =tekrarlanan Hzamanlardan ikinci satırı , başka bir satır =ekleyerek oluşturur. Sonra iki satırı birleştirir, her şeyi tekrarlar Vve sonra ilk satırın başka bir kopyasını ekler.

Çok fazla yığın manipülasyonum var gibi geliyor ve hatta ilk satırı bir değişkende sakladım, çünkü yığın üzerindeki şeyleri daha da karıştırmak zorunda kaldım.

Genel olarak çok zarif değil, ama bir yerden başlamak zorundasınız ... ve önce basit bir problem denemek istedim.


+Sonunda buna ihtiyacınız yok . CJam tüm yığını yazdırır.
Dennis

2

CJam, 23

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

Çevrimiçi deneyin

Açıklama:

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

Umarım göre

Tam bir program veya işlev yazmanıza izin verilir.

bu durumda 181 olan fonksiyonun baytlarını saymak için kurallara uygundur

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

Çıktı yanlış. Bkz. Çıkış no 2: " Her kutuda üç yatay boşluk olmalıdır ". Kodunuz üç değil iki boşluk çıkar
Spikatrix

@CoolGuy Bunu yanlış saydı - şimdi 2 bayt daha fazla, ama bu çok fazla değişmiyor ...
Marco13

1
tamam. +1. for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}for(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
Değiştirmek

1

C #, 153 151 150

Bu gerçekten rekabet edemez ama burada sadece eğlence için:

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

Nasıl çalıştırılır:

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

Geliştirmelere açıktır.


dizeyi var ile değiştir.
CSharpie

Maalesef buna izin verilmiyor.
Şuna

1
Bunları intdöngü dışında bildirmek bayt kaydedebilir.
Spikatrix

1

Python 2.7, 66 bayt.

Python'da zaten daha iyi çözümler olduğunu biliyorum, ama bulduğum en iyisi bu.

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

Misal:

f(3,4)

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

Maalesef, bu durum 2,3 ve 5 test senaryoları için yanlış çıktı üretiyor.
Spikatrix

1

Yakut, 57 48 45

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

Kullanımı:

print f[2,5]

3 bayt tasarruf için el işçiliği sayesinde.


İki küçük iyileştirme olasılığı: '='?=ve "<LF>"$/.
manatwork

Başka bir küçük: ?=*(w*4+1)?=+?=*w*4
manatwork

1

Java, 123 119 bayt

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

Giriş parametrelerinin sayaç olarak kötüye kullanılması, kod boyutunun azaltılmasına büyük ölçüde yardımcı oldu.

Sözdizimi için kötüye kullanımı önerdiği için Cool Guy'a teşekkürler.


Bir fordöngü yerine bir döngü kullanarak daha fazla golf yapın while.
Spikatrix

Ne yazık ki (; w -> 0;) ile aynı uzunluktadır (w -> 0)
ECS

1
Demek istediğim while(w-->0){d+=" =";b+="====";}-> for(;w-->0;b+="====")d+=" =";üç bayt tasarrufu sağlayan
Spikatrix

Haklısın. Aslında öneriniz sayesinde 4 bayt sıkıştırmayı başardım.
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;%

Misal:

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

Sonuç:

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

Bunu test edebileceğim herhangi bir çevrimiçi derleyici var mı? BTW, sonucunuza göre programınız yanlış çıktı üretir. Çıktı 2'ye bakın: Her kutunun içinde üç yatay boşluk olmalıdır
Spikatrix

@CoolGuy, haklısın, bunu yakalamadım, yazımı güncelledim. SAS On Demand'ı deneyebilirsiniz , kendi AWS Örneğinizi
Fried Egg

İlk bağlantınız benim için çalışmıyor. Chrome verirDNS_PROBE_FINISHED_NXDOMAIN
Spikatrix

İlk bağlantı benim için para cezası çalıştığı halde bu bir deneyin SAS On Demand ya da 'Kontrol Merkezi' için bu sayfadaki bağlantıyı takip buraya
Fried Egg

Nedenini bilmiyorum, ancak kontrol merkezine gitmek önceki
yorumumda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.