상자를 생성하십시오!


19

당신의 임무는 주어진 입력과 관련하여 하나의 ASCII 문자를 사용하여 상자를 생성하는 것입니다.

테스트 사례

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

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

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

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

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

입력

  • 다음 중 하나에서 입력을 가져올 수 있습니다.

    • stdin
    • 명령 줄 인수
    • 함수 인수 (2 개의 인수, 각 번호마다 하나씩)
  • 입력 stdin또는 명령 행 인수 에서 입력 은 공백으로 구분 된 두 개의 양의 정수를 포함합니다.

  • 두 숫자는 각 열과 행의 상자 수를 나타냅니다.

산출

  • 상자는 stdout(또는 가장 가까운 것에서) 출력해야합니다
  • 각 상자에는 3 개의 수평 공간이 있어야합니다.

규칙

  • 두 숫자는 0보다 크지 만 1000을 넘지 않습니다.
  • 상자를 출력하는 데 보이는 문자를 사용할 수 있습니다. (눈에 너무 가혹하지 않은 한!)
  • 전체 프로그램 또는 기능을 작성할 수 있습니다.
  • 선택적인 후행 줄 바꿈 문자를 제외하고 불필요한 문자가 없어야합니다.

채점

이것은 이므로 가장 짧은 제출 (바이트)이 이깁니다.

답변:


10

Pyth, 23 바이트

Mjbmsm@"= "&%k4dh*4HhyG

g원하는대로 작동 하는 기능 을 정의합니다 .

데모.


10

레티 나 , 57 바이트

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


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

후행 줄 바꿈을 사용하여 단항으로 입력합니다.

각 줄은 자체 파일로 이동 #해야하며 파일 에서 줄 바꿈으로 변경되어야합니다. 이것은 실용적이지 않지만 -s플래그를 사용하여 하나의 파일처럼 코드를 실행할 수 있으며 #마커를 유지 #하고 입력 줄 바꿈 문자를 변경합니다 . #원하는 경우 가독성을 위해 출력에서 ​​'를 다시 줄 바꿈으로 변경할 수 있습니다 . 예 :

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

방법 : 5 개의 단일 치환 단계. 처음 두 개의 (제 4 개 라인)를를 생성 2*N+1하여 M사람의 그리드와 다음 3 단계 (6 개 라인)에 원하는 출력 포맷.

중간 문자열 (로 구분 -) :

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

라인 당 하나의 파일은 항상 매우 이상한 디자인 선택처럼 보입니다.
curiousdannii

1
@curiousdannii이 방법으로 줄 바꿈 문자를 이스케이프하지 않고 정규 표현식에서 사용할 수 있도록 만들었지 만보다 합리적인 1 파일 형식으로 변경 될 예정입니다.
randomra

8

자바 스크립트 ( ES6 ), 83

매개 변수 행과 열이있는 함수입니다. 템플릿 문자열을 사용하면 중요하고 계산 된 2 개의 포함 된 개행 문자가 있습니다.

alert(팝업)을 통한 출력 . 으로 alert사용 비례 글꼴, 우리는 대신 공간에 폭 유사과 편지를 사용하여 더 나은 결과를 얻을 =.

실제 alert출력 을 얻기 위해 콘솔을 사용하여 Firefox에서 테스트 하거나 아래 스 니펫을 실행하십시오.

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>


실행 코드 스 니펫이 작동하지 않습니다. 내부에 '2 3'이있는 상자와 결과를 얻으려면 클릭해야한다는 화살표가 표시됩니다. 전체 페이지 버튼을 사용하거나 다른 브라우저를 사용해도 아무런 변화가 없습니다.
데니스 Jaheruddin

@DennisJaheruddin, 크롬을 사용할 때도 마찬가지입니다 (ES6을 지원하지 않음). 파이어 폭스를보십시오.
Spikatrix

1
@DennisJaheruddinTest in Firefox
edc65

7

자바 스크립트 (ES6), 75 73

풍부한 repeat호출을 사용하여 |를 반복 한 다음 |후행 공백으로 반복하고 두 반복을 반복하여 행을 만듭니다.

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

(edc65의 템플릿 문자열 사용 제안에 따르면 줄 바꿈이 중요합니다.)

단편:

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

템플릿 문자열, 메소드 이름 재사용 및 공백 추가 :

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

(사용 edc65의 추천을 사용하기에 |더 나은 시각적 간격합니다.)


7

핍, 29 24 = 23 + 1 바이트

-n깃발이 필요합니다 . 명령 줄 인수로 높이와 너비를 가져 와서 상자를 만듭니다 1.

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

설명:

                         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)

이 프로그램은 문자열이 숫자이고 숫자가 Pip의 문자열이라는 사실을 크게 활용합니다. (그리고 그 상자의 세 공간은 내장 m변수를 활용하기에 딱 맞았습니다 !)

입력으로 목록을 작성하는 방법은 다음과 같습니다 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]

그리고 최종 결과물 :

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

Pip에 대한 추가 정보


6

펄, 72 63 52 50 바이트

가장 짧은 버전 $/은 개행 문자를보다 간결하게 만드는 데 사용 합니다.

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

이전 업데이트는 대부분 빈 줄을 출력 레코드 구분 기호 $,에 넣고 연속 줄 목록을 인쇄합니다.

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

이전 버전은 일반 독자에게는 좀 더 명확 할 수 있습니다.

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

@ARGV대신 사용 된 첫 번째 버전 pop:

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


5

GNU sed -r, 160

한숨, 나는 이것이 더 작을 것이라고 생각했지만, 어쨌든 여기 있습니다. 불행히도 sed 정규 표현식에는 둘러보기 기능이 없습니다.

:
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

STDIN에서 단항으로 입력하기 :

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

4

CJam, 25 바이트

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

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

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

놀라운 168 바이트

이 답변은 Marbelous 언어의 제한으로 인해 1000x1000이 아닌 255x255까지만 작동합니다. 32 비트 라이브러리에서 작업하고 있지만 조만간 준비되지 않을 것입니다.

입력은 메인 보드에 두 개의 명령 줄 매개 변수 또는 기능 매개 변수로 제공됩니다.

@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

의사 코드 :

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 바이트

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

-5 자의 Sp3000 덕분에

Martin Büttner에게 감사드립니다.

시도 해봐


3

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

테스트 프로그램 :

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

: 나는 하나 대신에 두 배를위한 라인으로 치료하는 몇 가지 문자를 떨어 뜨 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
다른 답변을 먼저 보았어야 = = /, 내 의견은 더 긴 버전의 Reto Koradi의 답변입니다.

예, 나는 이것을 단 하나의 더 짧은 루프로 만들기 위해 아주 열심히 노력했고 실패했습니다
Digital Trauma

3

PHP4.1, 76 71 69 바이트

이것은 내가 얻을 수있는만큼 골프입니다.

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

이것은 키 H가 줄 수와 줄 V당 상자 수를 갖기를 기대합니다 .

나는 사용 -하고 |있으며 상자는 실제로 상자처럼 보입니다. 필요한 경우로 변경할 수 있습니다 =. 사용되는 문자는 중요하지 않습니다.
떠나 -|도은에 무슨 혼란을 이해하는 데 도움이됩니다.


이전 방법, 76 바이트 :

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

출력 예 :

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

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

3

줄리아, 59 바이트

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

두 개의 정수를 입력으로 받아 들여 결과를 STDOUT에 인쇄하는 명명되지 않은 함수가 작성됩니다. 호출하려면 이름을 지정하십시오 (예 :) f=(n,m)->....

언 골프 + 설명 :

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

예 :

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

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

어떤 제안이라도 환영합니다.


3

bash + coreutils, 57

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

상자 가장자리에 s 와 공백에 s가있는 dc이진수를 인쇄 하는 데 사용 됩니다 .10

  • 올인원 숫자 X 는에 의해 계산 된 2 ^ (width * 4 + 1) - 1다음 푸시 및 인쇄됩니다.
  • 10001...0001번호에 의해 산출 한 후, 가압X* 8 / 15 + 1
  • 스택은 덤프 height

그런 tr다음 0s를 공백 문자 로 변환합니다 .

산출

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

3

R, 83 81

h와 w를 매개 변수로 사용하는 명명되지 않은 함수로. 첫 번째와 두 번째 줄을 각 행의 벡터로 작성하고 h시간을 복제합니다 . 결론에 대한 벡터를 추가하고 라인 의 길이를 제한 cat하기 위해 벡터를 사용 fill합니다. 이제 보이는 모든 문자 규칙을 활용합니다.

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

시운전

> 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

파이썬 3 2, 160 87 85 79 바이트

나는 이것이 훨씬 더 골프를 칠 수 있다는 것을 알고 있습니다. 이것이 골프를 처음 시도하는 것이므로 몇 가지 제안을하고 싶습니다.

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

@Cool 남자와 SP3000의 팁 @ 덕분에, 난 그냥 아래로 크기를 축소 위의 절반 이하.

예 : d (3,3)

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

여기서 사용해보십시오 .

후행 공백을 실례합니다.


1
들여 쓰기 수준을 줄일 수 있습니다.
Spikatrix

3
목록을 작성한 다음 가입 할 필요가 없습니다. 문자열을 곱할 수 있음'='*(4*y+1)
Sp3000

1
설정 w=4*y+1은 3 바이트를 절약합니다.
DLosc

@ Cool Guy 나는 4 개의 공백이 아닌 탭을 사용하고 있습니다.
nsane

오 그래. 눈치 채지 못했습니다.
Spikatrix 2016 년

2

KDB (Q), 37 바이트

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

설명

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

테스트

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

2

자바 스크립트, 92 85 바이트

나는 이것이 다른 JS 답변 (항상 좋은 작업, edc65)보다 짧기를 희망했지만 오. 여기 수학이 더 골프화 될 수 있다고 생각합니다.

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

죄송합니다, 수학을 도울 수 없습니다-제 머리가 돌아가고 있습니다. 그러나 여기에 약간의 마이크로 옵트가 있습니다 : 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 감사합니다! 2*r+1=> 와 같은 r-~r것은 내가 수학을 골프로 의미한다는 것입니다. 그 특별한 것은 천재입니다. :)
vvye

2

옥타브, 69 65 64

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

-1을 초래 한 문제를 지적 해 주신 DLosc에게 감사합니다

다음과 같이 입력을받습니다. [1 1] 받아 출력합니다.

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

'1'만 입력하고 1x1을 얻을 수도 있습니다. 입력이 실제로이어야 할 1 1경우 크기는88 8584 :

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

참고 : Matlab은 Octave의 체인 또는 입력 (정수)을 허용하지 않지만 Matlab 버전 ( 67 )은 다음과 같습니다.

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

2

C, 76 바이트

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

여러 행과 열을 인수로 사용하여 함수로 호출됩니다. 예를 들면 다음과 같습니다.

f(5, 2)

2

CJam, 30 29 바이트

+마지막에 중복이 제거 된 새 버전 (감사합니다, Dennis) :

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

Dennis가 이미 이보다 몇 배나 큰 CJam 솔루션을 게시 한 것을 알고 있습니다. 그러나 이것은 CJam의 첫 번째 시도이므로 전혀 효과가없는 기적입니다. :)

상당히 무차별적인 힘. 4 * H + 1 =부호 에서 첫 번째 줄을 작성하고 =반복 된 H시간 에서 두 번째 줄을 작성 하고 다른 줄을 =추가합니다. 그런 다음 두 줄을 연결하고 모든 V시간을 반복 한 다음 첫 번째 줄의 다른 사본을 추가합니다.

스택 조작이 너무 많은 것처럼 느껴지고 스택에서 물건을 더 섞어 야했기 때문에 변수에 첫 번째 줄을 저장하게되었습니다.

전반적으로 우아하지는 않지만 어딘가에서 시작해야합니다 ... 그리고 나는 간단한 문제를 먼저 시도하고 싶었습니다.


+끝에는 필요하지 않습니다 . CJam은 전체 스택을 인쇄합니다.
Dennis

2

CJam, 23

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

온라인으로 사용해보십시오

설명:

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

자바, 181

나는 ~에 따르면

전체 프로그램 또는 기능을 작성할 수 있습니다.

함수 의 바이트 수를 계산하는 규칙을 준수합니다 ( 이 경우 181).

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

출력이 잘못되었습니다. 출력 번호 2 참조 : " 각 상자에는 3 개의 수평 공간이 있어야합니다 ." 귀하의 코드는 3이 아닌 2 개의 공백을 출력합니다
Spikatrix

@CoolGuy 잘못 계산-이제 2 바이트 더,하지만 많이 변경되지 않습니다 ...
Marco13

1
확인. +1. 다음으로 변경 for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}하여 2 바이트를 절약하십시오.for(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

이것은 실제로 경쟁 할 수는 없지만 여기서는 재미입니다.

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

실행하는 방법 :

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

개선을 위해 개방하십시오.


문자열을 var로 바꿉니다.
CSharpie 2016 년

불행히도 그것은 허용되지 않습니다. 이것을보십시오
pmudra

1
int루프 외부에이를 선언 하면 바이트를 절약 할 수 있습니다.
Spikatrix 2016 년

1

Python 2.7, 66 바이트

나는 이미 파이썬에 더 나은 솔루션이 있다는 것을 알고 있지만 그것이 내가 찾은 최고입니다.

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

예:

f(3,4)

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

죄송하지만 테스트 사례 2, 3 및 5에 대해 잘못된 출력이 생성됩니다. 열과 행을 혼합하여 반대 방향으로 가져 왔습니다.
Spikatrix

1

루비, 57 48 45

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

용법:

print f[2,5]

3 바이트 절약을위한 manatwork 덕분입니다.


두 가지 작은 개선 가능성 : '='?="<LF>"$/.
manatwork

또 다른 작은 것 : ?=*(w*4+1)?=+?=*w*4
manatwork

1

자바, (123) 119 바이트

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

입력 매개 변수를 카운터로 사용하면 코드 크기를 줄이는 데 크게 도움이되었습니다.

구문 남용을 제안한 Cool Guy에게 감사드립니다.


for루프 대신 루프를 사용하여 더 많은 골프를 즐기십시오 while.
Spikatrix

불행하게도 for (; w-> 0;)의 길이는 while (w-> 0)과 동일
ECS

1
나는 의미 while(w-->0){d+=" =";b+="====";}> - for(;w-->0;b+="====")d+=" =";3 바이트 저장하는
Spikatrix

네 말이 맞아 나는 실제로 당신의 제안 덕분에 이것으로부터 4 바이트를 짜낼 수있었습니다.
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;%

예:

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

결과:

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

이것을 테스트 할 수있는 온라인 컴파일러가 있습니까? BTW, 결과에 따라 프로그램에서 잘못된 출력이 생성됩니다.
output2

@ CoolGuy, 당신 말이 맞아요, 나는 그것을 잡지 못하고 내 게시물을 업데이트했습니다. SAS On Demand를 사용해 볼 수 있습니다. AWS 인스턴스
Fried Egg

첫 번째 링크가 작동하지 않습니다. 크롬 제공DNS_PROBE_FINISHED_NXDOMAIN
Spikatrix

첫 번째 링크는 SAS On Demand에서 제대로 작동하지만 이 페이지의 링크를 따라 여기
Fried Egg

왜 그런지 모르겠지만, 제어 센터에 가는 것은 이전에 언급 한 것과 같은 오류를 일으 킵니다 : /
Spikatrix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.