Bạn là chủ nhà của Thế vận hội!


17

Bạn tổ chức Thế vận hội Olympic, và cần xây dựng một bể bơi tuyệt vời vì lợi ích của dịp này, nhưng các giám sát viên thường thay đổi suy nghĩ về kích thước và cần một cách nhanh chóng để xây dựng lại nó với kích thước được yêu cầu!


Đưa ra hai số nguyên, Lx, nhiệm vụ của bạn là xây dựng một bể bơi có chiều dài Lxlàn đường.

Làm thế nào là một hồ bơi được xây dựng?

  • Nó chứa một hình vuông bên trong, có các bức tường nằm ngang được tạo bởi các Ldấu gạch ngang ( -) và các bức tường thẳng đứng được làm từ các 3x - 1thanh ( |). Ngoài ra, 4 +dấu hiệu nằm ở mỗi góc. Hãy có một ví dụ ( L = 10, x = 2):

    + ---------- +
    | |
    | |
    | |
    | |
    | |
    + ---------- +
    
  • Mỗi làn có chiều rộng 2 đơn vị dọc. Quảng trường bên trong chứa đầy x-1dải phân cách làn, bao gồm các biểu tượng Ltheo chiều ngang :. Sau khi đặt dải phân cách làn, hồ bơi của chúng ta sẽ trông như thế này:

    + ---------- +
    | |
    | |
    | :::::::::: |
    | |
    | |
    + ---------- +
    
  • Một hồ bơi cũng chứa một phần đệm (một hình vuông bên ngoài), có các bức tường nằm ngang là (L + 4) -s và các bức tường thẳng đứng là (3x + 1) |s, bao quanh hình vuông bên trong:

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

Và đó là bể bơi ** cỡ olympic của chúng tôi!


Thông số kỹ thuật:

  • Đối với mục đích thiết kế và chức năng, bạn được đảm bảo rằng 100 ≥ L ≥ 1015 ≥ x ≥ 2.

  • Đầu ra phải chính xác như được hiển thị. Xuất ra một hồ bơi "được xây dựng theo chiều dọc" * không được phép.

  • Trailing và không gian hàng đầu được cho phép.

  • Bạn có thể lấy đầu vào và cung cấp đầu ra thông qua bất kỳ phương pháp tiêu chuẩn nào .

  • Lỗ hổng mặc định áp dụng.


Ví dụ / Các trường hợp thử nghiệm:

L = 20, x = 3

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



L = 50, x = 5:

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


L = 10, x = 15

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

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

* Nước có thể chảy ra nếu được xây dựng theo chiều dọc: P

** Có, tôi biết rằng làn đường càng nhiều và hồ bơi càng ngắn thì bản vẽ trông giống như một hồ bơi!


Sandbox , cho những người có thể xem bài viết đã bị xóa.
Ông Xcoder

Chuyện gì sẽ xảy ra nếu x>=L??
CraigR8806

@ CraigR8806 Thuật toán tương tự. Chỉ với nhiều làn đường hơn chiều dài của hồ bơi. Tôi có cảm giác rằng bạn đã đọc nhầm câu hỏi ...
Ông Xcoder

Còn trường hợp ở đâu L=10x=15? Sẽ không có nhiều làn đường hơn có thể được đặt trong hồ bơi? Tôi có thể hiểu nhầm ý định
CraigR8806

@ CraigR8806 Chiều dài không liên quan gì đến làn đường! Bạn có thể tự kiểm tra bằng một trong những câu trả lời hiện có
Ông Xcoder

Câu trả lời:


13

Than , 32 byte

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

Hãy thử trực tuyến!

-4 cảm ơn Neil .

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

wow
Char

Bạn vẫn đúng với tên của bạn - bạn đã vượt qua tôi.
notjagan

2
Như thường lệ, yêu cầu giải thích.
Máy

@CalculatorFeline Vâng, tôi không có thời gian để thực hiện tất cả những lời giải thích đó trong khi tôi đang tìm kiếm một cái gì đó để vượt qua ... bạn cũng có thể kiểm tra AST bằng cách sử dụng -ađối số dòng lệnh.
Erik the Outgolfer

tại sao lại -atăng lỗi> _ <
Erik the Outgolfer

12

Than , 40 39 37 byte

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

Hãy thử trực tuyến!

Tôi biết Neil đã có một câu trả lời Char than có cùng độ dài, nhưng tôi đã thực hiện một chút cách tiếp cận khác vì vậy tôi nghĩ rằng tôi cũng có thể đăng bài của mình.

Giải trình

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
Xin giải thích.
Máy

@CalculatorFeline Đã thêm.
notjagan

1
Huh, vậy tham số thứ ba là tùy chọn? Thật tuyệt, điều đó giúp tôi tiết kiệm hai byte!
Neil

11

Than, 40 38 36 31 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Nguyên thủy bản vẽ của than sử dụng tổng số ký tự bao gồm +s, tuy nhiên đầu vào chỉ là số -s, vì vậy chúng ta cần thêm 2 để có được chiều rộng của tường bên trong.

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

Tính chiều cao của bức tường bên trong, một lần nữa, bao gồm hàng dưới cùng, vì vậy ba trên mỗi làn cộng với một.

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

Vẽ các làn đường. Đây chỉ đơn giản là một hình chữ nhật chứa đầy :s được phân cách theo chiều dọc bởi hai dòng trống (các ký hiệu đại diện cho các ký tự dòng mới).

Bθη         Box(q, h);

Các Rectanglelệnh là chính xác những gì chúng ta cần phải rút ra những bức tường bên trong. Chỉnh sửa: Boxcho phép bạn bỏ qua tham số thứ ba của nó, tiết kiệm cho tôi 2 byte.

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

Và một lần nữa để vẽ bức tường bên ngoài, ngoại trừ hơi rộng và cao hơn, và tập trung vào bức tường bên trong.


1
Tại sao các liên kết đến mã Char than tại TIO không bao giờ đến mã thực tế?
Jonathan Allan

1
@Jonathan ALLan Tôi liên kết với mã dài dòng vì nó dễ đọc hơn, cộng với tôi thêm đối số để tự động tạo mã súc tích cho mục đích xác minh.
Neil

... nhưng làm thế nào là 219 ký tự dễ đọc hơn 40? : p
Jonathan Allan

Tôi có thể đã nhìn chăm chỉ hơn và nhận thấy mẹo này :)
Jonathan Allan

1
Như thường lệ, xin vui lòng giải thích.
Máy

8

T-SQL, 284 281 byte

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(':',@))

Đầu vào được lấy từ các cột INT Lx trong bảng có sẵn t , theo các phương thức nhập được phép của chúng tôi .

Về cơ bản, tôi đang tạo một chuỗi dài với các chữ cái đại diện cho các ký tự lặp lại (d = dấu gạch ngang, s = dấu cách, c = dấu hai chấm, b = ngắt dòng), sau đó thay thế tất cả chúng ở cuối bằng các bộ đệm thích hợp.

Định dạng:

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(':',@))

Bên trong vòng lặp, tôi nối thêm 2 hàng trống và 1 hàng dấu hai chấm, sau đó, cuối cùng tôi cắt bỏ hàng phân chia đó và nối thêm đường viền hồ bơi trước khi thực hiện thay thế.

EDIT : Đã lưu 3 byte bằng cách chuyển sang @biến thường được sử dụng nhất và hoán đổi thứ tự khởi tạo.


8

JavaScript (ES6), 137 124 byte

Đánh golf xuống một chút trên điện thoại của tôi, nhiều hơn để làm theo.

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

Thử nó

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>


Tôi thích cái này vì nó tương tác: D
xDaizu

@xDaizu, vì vậy hãy xem một số giải pháp JS khác của tôi, vì vậy;)
Shaggy


4

SOGL V0.12 , 52 51 byte

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

Hãy thử nó ở đây!
Không tệ khi xem xét rằng 20 byte của đây là một hàm hình chữ nhật, mà than có tích hợp sẵn.

Giải trình:

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

Than , 36 byte

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

Hãy thử trực tuyến!

Đây là một thuật toán Char than-y nhiều hơn câu trả lời khác của tôi.


1
Than đã chính thức đảm nhận toàn bộ thử thách. 4/10 câu trả lời là trong Than ...
Ông Xcoder

@ Mr.Xcoder Vâng, đó là một ngôn ngữ được thiết kế dành riêng cho golf ascii-art, vì vậy đó là những gì bạn nhận được cho nó. ;)
Erik the Outgolfer

1
Yêu cầu giải thích.
Máy

@ Mr.Xcoder Và ba trong số chúng cũng có cùng chiều dài!
Neil

2

C (gcc) , 195 byte

#define P printf
y;f(L,l){char s[L+1],t[L+1];memset(s,45,L);memset(t,58,L);t[L]=s[L]=0;P("+-%s-+\n|+%s+|\n",s,s);for(y=3*l;y-->1;y%3?P("||%*c||\n",L,32):P("||%s||\n",t));P("|+%s+|\n+-%s-+",s,s);}

Hãy thử trực tuyến!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.