E와 문자 E


19

당신의 임무는 5 개의 입력이 주어지면 아래 문자 "E"모양의 ASCII 아트를 표시하는 것입니다.

예 :

입력 : 7,2,+,|,-(참고 :이 정확한 입력 형식을 따를 필요가 없으며 사용하지 않으면 자신의 입력 형식이 어떻게 작동하는지 설명해야합니다)

설명:

  • 7 왼쪽 및 오른쪽 가장자리 문자를 포함한 총 너비

  • 2 세로 문자 수

  • + 가장자리에 표시 할 문자입니다.

  • | 가장자리 사이에 세로로 표시되어야하는 문자입니다.

  • - 가로로 표시해야하는 문자입니다.

위 예제의 출력 :

+-----+ 
|
|
+-----+
|
|
+-----+


다른 예 :

입력: 7,2,@,|,-

산출:

@-----@
|
|
@-----@
|
|
@-----@


입력: 7,2,+,|,#

산출:

+#####+
|
|
+#####+
|
|
+#####+


입력: 8,3,+,|,#

산출:

+######+
|
|
|
+######+
|
|
|
+######+


입력: 8,3,+,@,#

산출:

+######+
@
@
@
+######+
@
@
@
+######+


입력: 9,4,^,$,!

산출:

^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^


부정 행위 및 표준 허점은 허용되지 않습니다.

귀하의 코드는 STDERR에 아무것도 인쇄하지 않아야합니다.

코드는 입력으로 선택한 모든 문자 인코딩을 허용 할 수 있지만, 선택한 모든 문자 인코딩은 최소한 95 개의 인쇄 가능한 ASCII 문자를 모두 지원 해야합니다.

이 과제를 성공적으로 완료하는 가장 짧은 코드 (바이트)는이기는 코드입니다.

리더 보드


27
나는 '입력이 주어지지 않은'특별한 경우를 싫어합니다. 내 생각에, 그것은 도전에 아무것도 추가하지 않으며 아무것도 복잡하지 않습니다.
Yytsi

3
당신이 줄 수 있기 때문에 제목입니다 E입력으로, 그리고 만들 EE들?
trichoplax

3
내가 싫어하지만 '입력 없음'은 실제로 무엇을 의미합니까? 입력을 통과하지 않으면 내 플로 로이드 솔루션이 나머지 영원 동안 중단됩니다. 내 솔루션이 경쟁하기 위해서는 5 개의 0 을 전달 해야하며 입력이 0인지 확인하고 그에 따라 처리해야합니다 ...? -1.
Yytsi

4
@TheBitByte 내가 잘못 생각하는 것을 보려면 두 번째 주석을 참조하십시오. 이제 편집 했으므로 +1.
Yytsi

1
@ 케빈 up. 나는 '입력 없음'의 해석과 약간의 혼란을 겪었습니다. 빈 문자열은 마음에 '입력 없음'과 같지 않습니다. 그리고 나는 인터프리터 내부에서 코드를 실행하는 데 익숙해 져서 문자 그대로 입력이 공급되기를 기다렸습니다. 그래서 나는 그것을 밖으로 던졌습니다.
Yytsi

답변:


6

05AB1E , 16 14 바이트

Í×s.ø©|`×`»D®»

설명

Í×                  # create a string of the correct nr of horizontal chars
  s.ø               # add the corner char on both sides
     ©              # save in register while keeping it on the stack
      |`            # push the remaining inputs to the top of the stack
        ×`          # push the correct nr of vertical chars on the stack
          »         # join on newline (joining the top vertical and horizontal sections)
           D        # duplicate this
            ®       # push the horizontal part again
             »      # join everything on newline

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

Adnan 덕분에 4 바이트를 절약했습니다.


1
호기심 때문에 왜 ©register : p 를 사용하고 있습니까?
Adnan

1
@Adnan : 잘 잡아! 나는 가고
싶었지만

1
@ muddyfish : 질문이 명확하지 않은 질문의 설명을 읽었으므로 놓쳤습니다. 알려 줘서 고마워!
Emigna

1
여기에서 작동하는 특수 서라운드 명령도 있습니다 Í×s.øU×S»X»D»Xr».
Adnan

2
@Adnan : 그렇습니다. 좋은 생각이야! 나는 전에 그것을 사용한 적이 없다 :)
Emigna

6

파이썬, 53 51 55 바이트

lambda a,b,c,d,e:d.join("\n"*-~b).join([c+e*(a-2)+c]*3)

@nimi에게 +4 바이트

익명 람다 함수, 그것을 호출 f=하기 전에 그것을 작성 하십시오. 예:

>>> print f(4,1,"€","|","-")
€--€
|
€--€
|
€--€

대안, 53 바이트

lambda a,b,c,d,e:((c+e*a+c+"\n"+(d+"\n")*b)*3)[:-b*2]

입력이없는 특수한 경우가있는 이전 버전, 69 65 63 바이트

도전 과제 중반 요구 사항 변경에

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)

2
작은 버그 : 첫 번째 인수 ( 2예에서)는 모서리를 포함하여 선의 총 길이이므로 모양에 대한 올바른 입력은 f(4,1 ...)입니다.
nimi

팁을 주셔서 감사합니다. (4 바이트 :() OPS 첫 번째 예는 약간 혼란이다 (다른 답변 중 일부는이 버그 aswell이).
KarlKastor

4

C, 167 (161) 159 바이트

네.

#define p putchar
i,j;g(a,c,e){p(c);for(i=2;i++<a;)p(e);p(c);p(10);}h(b,d){for(i=0;i++<b;){p(d);p(10);}}f(a,b,c,d,e){g(a,c,e);h(b,d);g(a,c,e);h(b,d);g(a,c,e);}

테스트 사례와 함께 Ideone에서 사용해보십시오.


2
puts ( "")-> p ( '\ n')? 또는 작동한다면 p (10)
RiaD

내가 어떻게 그리워 했어! 감사합니다, @RiaD.
betseg

또한 2로 루프를 시작하면 더 많은 바이트를 절약 할 수 있습니다.
RiaD

3

루비, 54 45 42 바이트

->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}

입력의 다른 부분을 별도의 매개 변수로 사용하고 결과를 완전한 문자열로 반환하는 익명 함수입니다.

예를 들어

f=->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}
puts f[6, 2, 'Ø', 'V', '>']

인쇄물

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø

3

자바 스크립트 (ES6), 64 바이트

(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

let f =
(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

console.log(f(8,3,'+','@','#'))


입력이없는 특수한 경우를 처리합니까?
Conor O'Brien

{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }인라인으로 실행될 때.
noɥʇʎԀʎzɐɹƆ

@AgentCrazyPython-IE에서 실행 하시겠습니까? 그것은 어떤 지원이 없습니다 에 대한.repeat()
Arnauld

@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ

오, 그것은 ES6입니다.
noɥʇʎԀʎzɐɹƆ


3

R, 80 바이트

꽤 반복적 :

function(h,v,a,b,c)cat(t<-c(a,rep(c,h),a,"\n"),d<-rep(c(b,"\n"),v),t,d,t,sep="")

언 골프 :

function(h,v,a,b,c)

cat(t<-c(a,rep(c,h),a,"\n"),
    d<-rep(c(b,"\n"),v),
    t,d,t,
    sep="")


2

Pyth, 19 바이트

jP*3,++Jw*-E2wJj*Ew

코너 문자, 가로 문자 수, 가로 문자, 세로 문자 수 및 세로 문자의 STDIN에서 줄 바꿈으로 구분 된 입력을 받아 결과를 인쇄하는 프로그램입니다.

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

작동 원리

jP*3,++Jw*-E2wJj*Ew  Program.
       Jw            Get the corner character. Store in J
           E         Get the number of horizontal characters
          - 2        -2
         *   w       Get the horizontal character and repeat it that many times
      +              Add J at the beginning of that
     +         J     and at the end
                 E   Get the number of vertical characters
                * w  Get the vertical character and repeat it that many times
               j     Join the above on newlines
    ,                Construct a 2-element list from the horizontal and vertical strings
  *3                 Repeat it 3 times
 P                   Everything except the last element
j                    Join the above on newlines
                     Implicitly print

2

MATLAB, 95 92 91 85 81 바이트

MATLAB 'E'기능. (편집 : 옥타브에서는 작동하지 않습니다)

function a=e(n,m,c,h,v);a(1:n)=h;a=[c a c];a(2:m+1,1)=v;a=[a;a;a];a=a(1:3+2*m,:);

그리고 골퍼되지 않은 :

function a=e(n,m,c,h,v); %Declare the function
a(1:n)=h;                %Initialise return with top line excluding the corners
a=[c a c];               %Then add corner pieces
a(2:m+1,1)=v;            %Next add the first vertical part
a=[a;a;a];               %Repeat three times vertically to get an E with a tail
a=a(1:3+2*m,:);          %And then lop off the tail

함수는 다음과 같이 호출되어야합니다.

e(5,2,'*','-','|')

어느 것이 반환됩니까?

+-----+
|      
|      
+-----+
|      
|      
+-----+

이것은 아마도 조금 단순화 될 수 있습니다. 계속 연구하겠습니다. 입력을 얻기 위해 전체 함수 선언을 좋아하지 않으므로 개선 할 수 있는지 확인할 것입니다.


  • 첫 번째 줄의 생성을 단순화하여 먼저 모서리없이 줄을 만든 다음 인덱싱이 필요한 횟수를 줄이므로 모서리를 추가하여 3 바이트를 절약했습니다.

  • 첫 번째 코너부터 시작하여 다른 바이트를 저장했습니다.

  • repmat(a,3,1)call을 교체하여 6 바이트를 더 추가합니다 [a;a;a].

  • a특정 초기화없이 사용하여 4 바이트를 절약 했습니다 (이미 함수 선언에 선언되어 있습니다)-고맙습니다 @LuisMendo


1
@LuisMendo 흥미 롭습니다. 나는 원래 a=[c a c]거기에 있었지만 존재하지 않는 변수에 대한 액세스를 색인화하고 프로세스에서 만들 수 없으므로 정상적으로 축소하기 위해 제거했습니다. 이것이 함수라는 것을 잊었으므로 함수 a선언에서 이미 반환 값으로 선언되었습니다. 감사합니다 :)
Tom Carpenter

실제로 함수에없는 경우에도 수행 할 수 있습니다-존재하지 않는 변수를 인덱싱하면 변수가 만들어집니다. 매일 새로운 것을 배우십시오.
Tom Carpenter

2

Perl, 40 + 1 ( -n) = 41 바이트

14 바이트를 절약하고 프로그램이 10보다 큰 항목으로 작업 할 수있게 해준 @Ton Hospel 에게 감사합니다 .

/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3

필요 -n뿐만 아니라 -E(또는 -M5.010) 실행합니다. 예를 들면 :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'

1
@TheBitByte 좋아요, 감사합니다.
Dada

2
이것은 이미 매우 좋습니다. 하지만 당신은 입력 형식으로 비트를 연주하고 또한 문제가 반복이 말을하지 않는 결함 해결할 수 있습니다 < 10넣어 /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3(이것은 사용하기 때문에 파일에 $')와 함께 전화 perl -M5.010 -n prog.pl <<< '^!S\n4\n9'(48 바이트로하는 수를 (실제 줄 바꿈을 사용) 2 여분을 장애인이 함께 할 수 없기 때문에 -e)
톤 Hospel

@TonHospel 감사합니다. 맞아, 나는 이것이 숫자로는 작동하지 않는다는 것을 알지 못했다 >10. .. 입력 형식으로 훌륭하게 작동했다.
Dada

이것은 입력 형식을 선택하는 자유를 남용하는 것에 가까워지고 있지만, perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'41 바이트 (더 이상은 아닙니다 $')와 가짜 후행 줄 바꿈을 제거합니다
Ton Hospel

@TonHospel 실제로, 나는 당신의 첫 번째 제안 후에 그 해결책을 생각해 냈지만 입력 형식 때문에 너무 편안하지 않았습니다 ... 우리는 그것에 대해 생각했기 때문에 대답을 바꾸었지만 여전히 느낌이 듭니다. 그것은 약간 건방진입니다 ...
Dada

2

Dyalog APL , 31 29 바이트

가로 문자, 너비, 접점 문자, 높이, 세로 문자를 순서대로 묻습니다.

h↓⊃⍪/3/⊂↑(⍞⍴⍨h←⎕),⊂⍞{∊⍺⍵⍺}⎕⍴⍞

⎕⍴⍞입력 가로 문자 및 입력 너비 시간 반복 ( 아래 )

⍞{... }것 입력 접점 문자 함수에 ...

∊⍺⍵⍺ 병합 [[접합], [가로], [접합]]

목록의 일부가 될 수 있도록 캡슐화

(... ),앞에 ...

h←⎕ 입력 높이

⍞⍴⍨ 입력 수직 문자를 여러 번 반복

문자열 목록을 문자표로 만든다

캡슐화 (전체로 반복 가능)

3/ 세 번 반복

    
┗━ ┗━ ┗━

⍪/ 세 조각을 세로로 연결하다


┣━
┣━
┗━

(이것도 그것들을 캡슐화하므로 우리는 ...)

캡슐화 제거

h↓h를 버린다 (행)

┏━
┣━
┗━

TryAPL 온라인!


2

C, 130 바이트

#define p putchar
#define E for(o=0;o++<O;p(10))p(S);
#define W for(p(P),D=0;D++<C-2;)p(_);p(P);p(10);
f(C,O,P,S,_,D,o){W E W E W}

용법:

main(){f(7,2,'+','|','-');}

산출

+-----+
|
|
+-----+
|
|
+-----+

의 세미콜론을 제거 define하고 추가하면 f(C,O,P,S,_,D,o){W;E;W;E;W;}바이트가 저장됩니다.
betseg

2

C #, 108 바이트

(m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

각 수평 및 수직선을 생성하고 최종 출력을 생성하는 익명 함수.

언 골프 기능 :

(m,n,e,v,h)=>
{
    string x = e + new string(h, m - 2) + e + "\n",
        y = new string(v, n).Replace(v + "", v + "\n");
    return x + y + x + y + x;
};

테스트 케이스가 포함 된 전체 프로그램 :

using System;

namespace LetterEWithoutE
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,int,char,char,char,string>f= (m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

            Console.WriteLine(f(7,2,'+','|','-'));
            Console.WriteLine(f(7,2,'@','|','-'));
            Console.WriteLine(f(7,2,'@','|','#'));
            Console.WriteLine(f(8,3,'+','|','#'));
            Console.WriteLine(f(8,3,'+','@','#'));
            Console.WriteLine(f(9,4,'^','$','!'));
        }
    }
}

2

MATL , 15 바이트

수정을 위해 @muddyfish에게 감사합니다.

2-Y"yv!iiY"!yyy

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

설명

도전의 첫 번째 예를 사용하여 각 단계 후 스택 내용이 명확하게 표시됩니다.

2-    % Implicitly input number of repetitions of the char of the horizontal line.
      % Subtract 2
      %   STACK: 5
Y"    % Implicitly input char of the horizontal line. Apply run-length decoding
      %   STACK: '-----' (string)
y     % Implicitly input (from below) the char of the corners. Duplicate onto the top
      %   STACK: '+', '-----', '+'
v!    % Concatenate all the stack horizontally. We now have the horizontal line
      % including the corners
      %   STACK: '+-----+'
iiY"  % Take two inputs: char of the vertical line and number of repetitions
      %   STACK: '+-----+', '||'
!     % Transpose. This tranforms the string into a vertical char array, which
      % gives the vertical line
      %   STACK: '+-----+', ['|';'|'] (vertical char array)
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+'
y     % Duplicate from below: this pushes a new copy of the vertical line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'],
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'], '+-----+'
      % Implicitly display

1

배쉬 + coreutils, 105 바이트

printf -- "$3`printf -- "$4%.0s" $(seq $1)`$3`printf "\n$5%.0s" $(seq $2)`%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

파일이 저장된 파일의 이름이이라고 가정하면 A.sh사용법은 다음과 같습니다.

bash A.sh <Horizontal Segment Length w/out Edge Chars> <Vertical Segment Length> '<Left/Right Edge Char>' '<Char Between Edges>' '<Vertical Char>'

--문자 입력 중 하나가 될 일이 단지의 경우, 필요 -, 그리고 printf이중 대시없이 아주 좋은 문자열의 시작 부분에 대시를 처리하지 않습니다 분명히.

설명

입력이 있다고 가정하면 5 2 + * |...

  1. $3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)

    첫 번째 가로 세그먼트와 세로 세그먼트를 모두 만듭니다. 결과는 다음과 같습니다.

    +*****+
    |
    |
    
  2. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}

    이전에 만든 부분을 반복 3 . 결과는 다음과 같습니다.

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    |
    |
    
  3. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

    마지막으로 sed의 첫 번째 <Vertical Segment Length>*2+3줄만 출력하여 마지막 두 줄 세그먼트를 제거하기 위해 이전 출력을 파이프 합니다 E. 우리는 마침내 E우리가 원하는 것을 얻습니다 .

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    

1

PowerShell v2 +, 60 59 바이트

param($a,$b,$c,$d,$e)(,($x="$c$($e*($a-2))$c")+,$d*$b)*2;$x

입력을 개별 명령 행 인수로 사용합니다. 수평 문자열 $x을 구성하고 나중에 사용하기 위해 저장 한 다음 쉼표 연산자를 사용하여 배열로 구성합니다 ,. 배열 연결을 수행합니다 (즉, 끝에 요소 추가).$d 배열로 공식화 된$b 합니다. 이는 다른 쉼표 연산자를 사용하여 두 요소의 배열로 구성되며 파이프 라인에 남아 있습니다. 그런 다음 수평 $x이 파이프 라인에 남습니다. 기본 형식을 남용합니다.Write-Output 요소 사이에 개행을 넣습니다.

PS C:\Tools\Scripts\golfing> .\the-letter-e-without-e.ps1 5 3 "z" "v" "d"
zdddz
v
v
v
zdddz
v
v
v
zdddz

1

파이썬 3, 60 바이트

기능

def p(a,b,c,d,e):q=c+e*(a-2)+c;return(q+'\n'+(d+'\n')*b)*2+q

테스트 사례

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+

출력에 너무 많은 대시가 2 개 있습니다
Blue

1

Brainf * ck, 147 바이트

,>,>++++++++[<------<------>>-]<<-->>>,>,>,>+++>++>++++++++++<<[-<<<.<<<[->>+>>>.<<<<<]>>[-<<+>>]>.>>>>>.<[-<<<<<<[->+>>.>>>>.<<<<<<<]>[<+>-]]>>>>]

처음 5자를 입력 한대로 stdin에서 입력을받습니다. 처음 두 개는 ASCII 코드에서 48을 빼므로 0-9가 예상대로 작동합니다. 숫자가 9보다 크면 숫자에 48을 더하고 해당 문자를 사용하십시오. 다른 세 문자는 챌린지에 지정된대로입니다.

나는 그것이 최적의 해결책은 아니지만 골프 브레인에 너무 짧다는 것을 확신합니다.

의견으로 :

[
    Input: number number corner vertical horizontal
    Numbers are single digits; add 48 and use the ASCII character corresponding
    to the number you want for numbers > 9.
    First number is the number of characters across. Second is the number down.

    Layout: {first number-2} {second number} {temp} {a} {b} {c}
]

,>,>++++++++[<------<------>>-]<<-->>>,>,>,
now we should have the first five cells with the specified layout
the 6th will hold 3 as a counter and the 7th 2 and the 8th 10 '\n'

>+++>++>++++++++++<<
[  while the 6th cell is not 0
    -
    <<<.    print corner
    <<<[->>+>>>.<<<<<]  print horizontal characters
    >>[-<<+>>]         copy temp back to 1st cell
    >.>>>>>.           print corner and newline
    <
    [ If the second counter is not zero
        -
        <<<<<<[->+>>.>>>>.<<<<<<<]  print vertical and newline n times
        >[<+>-]           copy temp back to 2nd cell
    ]
    >>>>
]

예제 실행 :

sean@SEANSBOX:~/Dropbox/Code/BF$ ./bf E.b
94^$!
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^

1

PHP, 97 바이트

list(,$w,$h,$c,$v,$r)=$argv;echo$b=str_pad($a=str_pad($c,++$w,$r)."$c\n",--$h*2+$w,"$v\n"),$b,$a;

루프가없고 내장 만 있습니다.

으로 실행합니다 php -r '<code>' <parameters>.


1

자바 7 205 129 바이트

String c(int w,int h,String a,char b,char c){String r=a,n="\n",l="";for(;w-->2;r+=c);r+=a+n;for(;h-->0;l+=b+n);return r+l+r+l+r;}

익명의 낯선 사람 덕분에 -76 바이트.
추신 : 다음에 다른 사람의 글을 편집하지 마십시오. 당신이 골프에 뭔가가있는 경우 의견으로 남겨주세요, 또는 완전히 다른 접근 방식을 사용하는 경우 자신의 답변을 할 수 있습니다. 그래도이 모든 바이트를 골라내어 주셔서 감사합니다.

언 골프 및 테스트 사례 :

여기에서 시도하십시오.

class M {
    static String c(int w, int h, String a, char b, char c){
        String r = a,
               n = "\n",
               l = "";
        for(; w-- > 2; r += c);
        r += a+n;
        for( ;h-- > 0; l += b+n);
        return r+l+r+l+r;
    }

    public static void main(String[] a) {
        System.out.print(c(7, 2, "+", '|', '-'));
        System.out.print(c(9, 4, "?", '¡', '¿'));
    }
}

산출:

+-----+
|    
|    
+-----+
|    
|    
+-----+

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?

0

라켓 124 바이트

(λ(w h a b c)(for((i 3))(display a)(for((i w))(display c))(display a)(when(< i 2)(displayln "")(for((j h))(displayln b)))))

더 읽기 쉬운 형태 :

(define(f w h a b c)
  (for((i 3))
    (display a)
    (for((i w))
      (display c))
    (display a)
    (when(< i 2)
      (displayln "")
      (for((j h))
        (displayln b)))))

테스트 :

(f 7 2 "+" "|" "-" )

+-------+
|
|
+-------+
|
|
+-------+

0

C ++, 121 바이트

#import<string>
#import<iostream>
#define f(w,h,C,W,H){std::string s(w,W),t;s=C+s+C+"\n";for(int i=h;i--;)t=t+H+"\n";std::cout<<s+t+s+t+s;}

언 골프 드 :

#import<string>
#import<iostream>
#define f(w,h,C,W,H){
    std::string s(w,W),t;  //define two strings, one empty, one with horizontal characters
    s = C+s+C+"\n";        //assemble a horizontal bar
    for(int i=h;i--;) 
        t=t+H+"\n";        //assemble a vertical bar
    std::cout<<s+t+s+t+s;  //print
}

C ++에서는 C와 같이 유형이없는 함수를 선언 할 수 없습니다. 그러나 함수처럼 동작하는 매크로는 완전히 가능합니다. 또한 ungolfed 버전은 매크로의 마지막 줄을 제외한 각 줄에 "\"를 추가 할 때까지 컴파일되지 않습니다. {}를 제거하여 두 개의 추가 바이트를 절약 할 수 있지만 매크로를 한 번에 두 번 사용할 수는 없습니다.

용법:

int main() {
    f(4,2,'+','-','|')
    f(2,1,'@','#','i')
    return 0;
}

산출:

+----+
|
|
+----+
|
|
+----+
@##@
i
@##@
i
@##@

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


0

CJam , 23 바이트

riri)N*r2*\r*\@r**a3*\*

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

입력은 주어진 순서대로되어 있지만 쉼표를 사용하는 대신 공백으로 구분해야합니다. 어려움 중 일부는 CJam의 조인 작업에* 올바른 입력을 입력하는 것입니다 . 입력을 다시 정렬 하면 4 바이트를 절약 할 수 있습니다. 있습니다.

입력이 더빙 A B C D E되면 프로그램은 다음과 같이 작동합니다.

ri     e# get A as integer
ri)N*  e# create B+1 newlines
r2*    e# create 2 Cs
\r*    e# join newlines with D (hereafter ND)
\@     e# bring A & Cs to the front
r*     e# create A Es
*      e# join, puts Es between Cs (hereafter CEC)
a3*    e# makes 3 copies of CEC strings
\*     e# join, puts NDs between CECs

0

루아 (5.2), 144 바이트

k,a,p,q=loadstring,arg,io.write,print l,d=k"for i=3,a[1]do p(a[5])end",k"for i=1,a[2]do q(a[4])end"b=a[3]p(b)l()q(b)d()p(b)l()q(b)d()p(b)l()p(b)

온라인으로 사용해보십시오! (코딩 장)

다음과 같이 출력해야합니다.

+@@@@@+
l
l
+@@@@@+
l
l
+@@@@@+

자신의 입력 : 7 2 + l @

프로젝트-> 컴파일 옵션에서 입력을 변경하고 값을 변경할 수 있습니다. 각 값은 예제와 같이 쉼표로 구분되지 않고 공백으로 구분됩니다.


0

QBIC, 44 바이트

::;;;X=A[q,a-2|X=X+C]X=X+A ?X[1,2|[1,b|?B]?X

설명

::;;;                 Get the input parameters, 2 numbers and 3 strings
X=A[q,a-2|X=X+C]X=X+A Build the horizontal string: The corner string, x-2 times the filler string and another corner
?X                    Print the horizontal string
[1,2|                 Do the next thing twice
[1,b|?B]?X            Print the right number of vertical strings, then the horizontal string.

0

PHP, 94 바이트

<?list($v,$h,$p,$d,$r)=$_GET[a];for($h++;$i<=2*$h;)echo$i++%$h?$d:str_pad($p,$v-1,$r).$p,"\n";

제안 된 문자열과 동일한 순서로 배열의 입력 형식


,"\n"대신에 를 사용 ."\n"하면 삼항에 대한 괄호를 떨어 뜨릴 수 있습니다.
Titus

for($h++;$i<=2*$h;)그리고 $i++%$h또 다른 바이트를 저장합니다.
Titus

$v-1에 3 개의 수평 문자 만 제공합니다 [5,2,+,|,-]. 왼쪽 및 오른쪽 가장자리 문자를 제외한 가로 문자 수
Titus

@Titus가 맞습니다. 편집 내용을 롤백했습니다. 5 수평은 2 모서리 = 5 인 3 개의 문자를 의미합니다. 질문을보십시오. 그리고 다른 사람들을 위해 감사합니다
Jörg Hülsermann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.