태그 보관물: ascii-art

ascii-art

당신은 올림픽의 주인입니다! | | | | | | | |

올림픽 게임을 주최하고 행사를 위해 환상적인 수영장을 만들어야하지만 감독관은 종종 차원과 관련하여 마음을 바꾸고 요청한 크기로 빨리 재구성 할 수있는 방법이 필요합니다!


두 정수를 감안할 때, L그리고 x, 당신의 작업은 길이의 수영장을 구축하는 것입니다 Lx차선을.

수영장은 어떻게 지립됩니까?

  • 여기에는 수평 사각형이 L연속 대시 ( -)로 만들어지고 세로 벽이 3x - 1막대 ( |) 로 만들어지는 내부 정사각형이 포함 됩니다. 또한 +각 모서리에 4 개의 표시가 있습니다. 예를 들어 보자 ( L = 10, x = 2) :

    + ---------- +
    | |
    | |
    | |
    | |
    | |
    + ---------- +
    
  • 각 레인 의 너비는 세로 단위 2입니다. 내부 정사각형은 가로로 연속 된 기호 x-1로 구성된 레인 구분 기호로 채워져 있습니다. 레인 분리기를 놓은 후 수영장은 다음과 같아야합니다.L:

    + ---------- +
    | |
    | |
    | :::::::::: |
    | |
    | |
    + ---------- +
    
  • 풀에는 안쪽-|을 둘러싸는 가로 벽이 (L + 4) 이고 세로 벽이 (3x + 1) 인 패딩 (외부 정사각형) 이 포함됩니다 .

    + -------------- +
    | + ---------- + |
    | | | |
    | | | |
    | | :::::::::: | |
    | | | |
    | | | |
    | + ---------- + |
    + -------------- +
    

그리고 이것이 올림픽 크기의 수영장입니다!


명세서:

  • 디자인 및 기능 목적을 위해 100 ≥ L ≥ 10그리고 15 ≥ x ≥ 2.

  • 출력은 표시된 그대로 여야합니다. “수직으로 구축 된”풀 출력이 허용되지 않습니다.

  • 후행 및 선행 공간이 허용됩니다.

  • 표준 방법으로 입력하고 출력 할 수 있습니다 .

  • 기본 허점이 적용됩니다.


예 / 테스트 사례 :

L = 20, x = 3

+ ------------------------ +
| + -------------------- + |
| | | |
| | | |
| | :::::::::::::::::::: | |
| | | |
| | | |
| | :::::::::::::::::::: | |
| | | |
| | | |
| + -------------------- + |
+ ------------------------ +



L = 50, x = 5 :

+ ------------------------------------------------- ----- +
| + ------------------------------------------------- -+ |
| | | |
| | | |
| | :::::::::::::::::::::::::::::::::::::::::::::::::::::::: : | |
| | | |
| | | |
| | :::::::::::::::::::::::::::::::::::::::::::::::::::::::: : | |
| | | |
| | | |
| | :::::::::::::::::::::::::::::::::::::::::::::::::::::::: : | |
| | | |
| | | |
| | :::::::::::::::::::::::::::::::::::::::::::::::::::::::: : | |
| | | |
| | | |
| + ------------------------------------------------- -+ |
+ ------------------------------------------------- ----- +


L = 10, x = 15

+ -------------- +
| + ---------- + |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| | :::::::::: | |
| | | |
| | | |
| + ---------- + |
+ -------------- +

이것은 이므로 바이트 단위 의 가장 짧은 코드 이깁니다!

* 수직으로 설치하면 물이 흘러 나올 수 있습니다. : P

** 예, 레인이 많을수록 수영장이 짧을수록 수영장처럼 보이는 그림이 줄어 듭니다!



답변

, 32 바이트

NθNη↓Eθ×η:  B⁺θ²⁺׳η¹↖←B⁺θ⁶⁺׳η³

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

Neil 덕분에 -4 .

AST :

Program
├N: Input Number
│└θ: Identifier θ
├N: Input Number
│└η: Identifier η
├Print
│├↓: Down
│└E: Map
│ ├θ: Identifier θ
│ └×: Product
│  ├η: Identifier η
│  └':  ': String ':  '
├B: Box
│├⁺: Sum
││├θ: Identifier θ
││└2: Number 2
│└⁺: Sum
│ ├×: Product
│ │├3: Number 3
│ │└η: Identifier η
│ └1: Number 1
├Move
│└↖: Up Left
├Move
│└←: Left
└B: Box
 ├⁺: Sum
 │├θ: Identifier θ
 │└6: Number 6
 └⁺: Sum
  ├×: Product
  │├3: Number 3
  │└η: Identifier η
  └3: Number 3


답변

, 40 39 37 바이트

NθNηB⁺θ⁶⁺׳η³↘→B⁺θ²⁺׳η¹→F⁻η¹«M³↓P×:θ

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

나는 Neil이 이미 같은 길이의 숯 답변을 가지고 있다는 것을 알고 있지만, 약간 다른 접근법을 취하여 내 게시물을 게시 할 수도 있다고 생각했습니다.

설명

NθNηB⁺θ⁶⁺׳η³↘→B⁺θ²⁺׳η¹→F⁻η¹«M³↓P×:θ
NθNη                                         take the two inputs as numbers in θ and η
      B⁺θ⁶⁺×³η³                               draw a rectangle θ + 6 by 3η + 3
                                               (characters default to |, - and +)
                ↘→                             move the cursor down one and right two
                   B⁺θ²⁺×³η¹                  draw a rectangle θ + 2 by 3η + 1
                             F⁻η¹«            for ι (unused) from 0 up until η - 1:
                                   M³↓            move the cursor down by 3
                                       P×:θ       print θ :s without moving the cursor
                                               [implicit end of for]


답변

숯, 40 38 36 31 바이트

A⁺²NθA⁺¹×³NηUOθη:¶¶Bθη↖←B⁺⁴θ⁺²η

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

A⁺²Nθ       Assign(Plus(2, InputNumber()), q);

Charcoal의 도면 프리미티브는 +s를 포함한 전체 문자 수를 사용 하지만 입력은 -s 의 수에 불과 하므로 내벽의 너비를 얻으려면 2를 더해야합니다.

A⁺¹×³Nη     Assign(Plus(1, Times(3, InputNumber())), h);

맨 아래 줄을 포함하여 내벽의 높이를 다시 계산하십시오.

UOθη:¶¶     Oblong(q, h, ":\n\n");

차선을 그립니다. 이것은 단순히 :두 개의 빈 줄로 세로로 구분 된 s로 채워진 사각형입니다 (필로우는 개행 문자를 나타냄).

Bθη         Box(q, h);

Rectangle명령은 정확히 우리가 내벽을 그릴 필요하다. 편집 : Box세 번째 매개 변수를 생략하고 2 바이트를 절약 할 수 있습니다.

↖           Move(:UpLeft);
←           Move(:Left);
B⁺⁴θ⁺²η     Box(Plus(4, q), Plus(2, h));

그리고 더 넓고 키가 큰 것을 제외하고 외벽을 중심으로 외벽을 그립니다.


답변

T-SQL, 284 281 바이트

DECLARE @ INT,@x INT,@S VARCHAR(MAX)='+--d--+b| +d+ |b'SELECT @=L,@x=x FROM t
P:SET @S+='| |s| |b| |s| |b| |c| |b'SET @x-=1IF @x>0GOTO P
PRINT REPLACE(REPLACE(REPLACE(REPLACE(LEFT(@S,LEN(@S)-6)+'+d+ |b+--d--+','d',REPLICATE('-',@)),'b',CHAR(13)),'s',SPACE(@)),'c',REPLICATE(':',@))

입력 INT의 열에서 가져 LX 기존 테이블에서 t , 우리의 허용 입력 방법에 따라 .

기본적으로 반복되는 문자 (d = 대시, s = 공백, c = 콜론, b = 줄 바꿈)를 나타내는 문자로 긴 문자열을 만든 다음 끝에 적절한 필러로 모두 바꿉니다.

형식화 :

DECLARE @ INT,@x INT,@S VARCHAR(MAX)='+--d--+b| +d+ |b'
SELECT @=L,@x=x FROM t
P:
    SET @S+='| |s| |b| |s| |b| |c| |b'
    SET @x-=1
IF @x>0 GOTO P
PRINT REPLACE(REPLACE(REPLACE(REPLACE( LEFT(@S,LEN(@S)-6)+'+d+ |b+--d--+'
     ,'d',REPLICATE('-',@))
     ,'b',CHAR(13))
     ,'s',SPACE(@))
     ,'c',REPLICATE(':',@))

루프 내에서 2 행의 공백과 1 행의 콜론을 추가 한 다음 마지막에 해당 분배기 행을 잘라 내고 풀 테두리를 추가하여 교체를 수행합니다.

편집 : @가장 자주 사용되는 변수 로 전환 하고 초기화 순서를 바꾸어 3 바이트를 절약했습니다 .


답변

자바 스크립트 (ES6) 137 124 바이트

내 휴대 전화에서 조금 아래로 골프를 쳤다.

x=>y=>`+--0--+
| +0+ |
${((a=`| |1| |
`)+a+`| |2| |
`).repeat(y-1)+a+a}| +0+ |
+--0--+`.replace(/\d/g,n=>"- :"[n].repeat(x))

시도 해봐

f=
x=>y=>`+--0--+
| +0+ |
${((a=`| |1| |
`)+a+`| |2| |
`).repeat(y-1)+a+a}| +0+ |
+--0--+`.replace(/\d/g,n=>"- :"[n].repeat(x))
oninput=_=>o.innerText=f(+i.value)(+j.value);o.innerText=f(i.value=50)(j.value=5)
input{font-family:sans-serif;margin:0 5px 0 0;width:50px;}
<label for=i>L: </label><input id=i type=number><label for=j>x: </label><input id=j type=number><pre id=o>


답변

파이썬 (2) , 124 (120) 117 바이트

Hyper Neutrino 덕분에 -2 바이트

l,x=input()
o='+--%s--+\n| +%s+ |\n'%(('-'*l,)*2)
print o+'| |%s| |\n'*(x*3-1)%((' '*l,' '*l,':'*l)*x)[:-1]+o[-2::-1]

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


답변

SOGL V0.12 , 52 51 바이트

:┌* +1Ο;@*┐1ΟG∙⁴++⁰
b3*Ie4+⁰b3*He⁰32žbH∫3*2+4;e :*ž

여기 사용해보십시오!
이것의 20 바이트는 사각형 함수이며, 숯에는 내장되어 있습니다.

설명:

Rectangle function: (example: on stack 4, 2)
:                   duplicate the top of stack (X pos)      [4, 2, 2]
 ┌*                 get that many "-"es                     [4, 2, "--"]
    +               push "+"                                [4, 2, "--", "+"]
     1Ο             wrap the dashes in pluses               [4, 2, "+--+"]
       ;            get the duplicated X position           [4, "+--+", 2]
        @*          get that many spaces                    [4, "+--+", "  "]
          ┐         push "|"                                [4, "+--+", "  ", "|"]
           1Ο       wrap the spaces with "|"                [4, "+--+", "|  |"]
             G      get the Y value ontop                   ["+--+", "|  |", 4]
              ∙     get an array with that many strings     ["+--+", ["|  |", "|  |", "|  |", "|  |"]]
               ⁴    duplicate the dashes wrapped in pluses  ["+--+", ["|  |", "|  |", "|  |", "|  |"], "+--+"]
                ++  add everything to one array             [["+--+", "|  |", "|  |", "|  |", "|  |", "+--+"]]
Main function: (example input: 2, 5)
b3*                              push variable B (input 1, Y length) multiplied by 3                     [6]
   I                             increase it                                                             [7]
    e4+                          push variable E (input 2, X length) + 4                                 [7, 9]
       ⁰                         execute the rectangle function [in X: E+4, Y: b*3+1]                    [["+---------+","|         |","|         |","|         |","|         |","|         |","|         |","|         |","+---------+"]]
        b3*                      push variable B * 3                                                     [["+---------+",..,"+---------+"], 6]
           H                     decrease it                                                             [["+---------+",..,"+---------+"], 5]
            e                    push variable E                                                         [["+---------+",..,"+---------+"], 5, 5]
             ⁰                   execute the rectangle function [on X: E, Y: B*3-1]                      [["+---------+",..,"+---------+"], ["+-----+","|     |","|     |","|     |","|     |","|     |","+-----+"]]
              32ž                at coordinates [3;2] (1-indexed) in the first rectangle put in the 2nd  [["+---------+",
                                                                                                           "| +-----+ |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| +-----+ |",
                                                                                                           "+---------+"]
                 bH∫             iterate over the numbers from 1 to B-1:                                 [[...], 1]
                    3*2+           push pop()*3+2                                                        [[...], 5]
                        4;         push 4 one below the stack                                            [[...], 4, 5]
                          e        push the variable E (X length)                                        [[...], 4, 5, 5]
                            :*     get that many colons                                                  [[...], 4, 5, ":::::"]
                              ž    insert [at coordinates [4; cIter*3+2] the colons]