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


17

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


두 정수를 감안할 때, 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

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


삭제 된 게시물을 볼 수있는 사용자를위한 샌드 박스
Mr. Xcoder 2018 년

그렇다면 어떻게됩니까 x>=L??
CraigR8806

@ CraigR8806 같은 알고리즘입니다. 수영장 길이보다 더 많은 레인이 있습니다. 나는 당신이 그 질문을 잘못 이해했다고 생각합니다 ...
Mr. Xcoder

어디 L=10에서 x=15? 수영장에 넣을 수있는 레인 수가 더 많지 않습니까? 나는 의도를 오해 할 수있다
CraigR8806

@ CraigR8806 길이는 레인과 관련이 없습니다! 당신은 기존의 답변 중 하나를 사용하여 스스로를 테스트 할 수 있습니다
씨 Xcoder에게

답변:


13

, 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

와우 차콜 이이 도전을 아래로 내려왔다 :)
Downgoat

당신은 당신의 이름에 충실했습니다-당신은 나를 능가했습니다.
notjagan 2016 년

2
평소처럼 설명 요청.
CalculatorFeline

@CalculatorFeline 예, 아웃 고프 대상을 찾는 동안 모든 설명을 할 시간이 없습니다 ... 또한 -a명령 줄 인수를 사용하여 AST를 확인할 수 있습니다 .
Outgolfer Erik

-a> _ <오류가 발생
합니까?

12

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

1
설명 해주세요
CalculatorFeline

@CalculatorFeline이 추가되었습니다.
notjagan

1
응, 그래서 세 번째 매개 변수 는 선택 사항입니까? 니스, 그것은 2 바이트를 절약합니다!
Neil

11

숯, 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));

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


1
TIO의 숯 코드 링크가 실제 코드에 링크되지 않는 이유는 무엇입니까?
Jonathan Allan

1
@JonathanAllan 더 읽기 쉽기 때문에 자세한 코드에 연결하고 검증 목적으로 간결 코드를 자동으로 생성하는 인수를 추가합니다.
Neil

...하지만 219자가 40보다 더 읽기 쉽습니다. : p
Jonathan Allan

난 그냥 열심히
Jonathan Allan

1
평소와 같이 설명하십시오.
CalculatorFeline

8

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 바이트를 절약했습니다 .


8

자바 스크립트 (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>


나는 인터랙티브이기 때문에 이것을 좋아한다 : D
xDaizu

@ xDaizu, 다른 JS 솔루션을 확인하십시오.;)
Shaggy


4

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]                     





2

, 36 바이트

NθNηFη«M³↑P×θ:»←B⁺θ²⁺׳η¹↖←B⁺θ⁶⁺׳η³

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

이것은 내 다른 대답보다 더 숯불 알고리즘입니다.


1
숯은 공식적으로 모든 문제를 해결했습니다. 4/10 답변이 숯불에 있습니다 ...
Mr. Xcoder

@ Mr.Xcoder 글쎄, 그것은 아스키 아트를 골프하기 위해 특별히 고안된 언어이기 때문에 그것이 당신이 얻는 것입니다. ;)
Outgolfer Erik

1
설명 요청.
CalculatorFeline

@ Mr.Xcoder 그리고 그들 중 3 명도 같은 길이입니다!
Neil


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.