您是奥运会的东道主!


17

您主办奥林匹克运动会,并且需要为此建立一个梦幻般的游泳池,但是主管们经常改变尺寸的主意,并需要一种快速的方法来按要求的尺寸进行重建!


给定两个整数Lx,您的任务是建立一个长度Lx车道的游泳池。

游泳池如何建造?

  • 它包含一个内部正方形,该内部正方形的水平壁由L连续的破折号(-)组成,而垂直壁由3x - 1条形(|)组成。此外,+每个角落都有4个标志。让我们举一个例子(L = 10, x = 2):

    + ---------- +
    | |
    | |
    | |
    | |
    | |
    + ---------- +
    
  • 每个通道的宽度为2个垂直单位。内部正方形x-1由车道分隔符填充,该分隔符由L水平连续的:符号组成。放置通道分隔符后,我们的池应如下所示:

    + ---------- +
    | |
    | |
    | :::::::::: ||
    | |
    | |
    + ---------- +
    
  • 池还包含一个填充(一个外部正方形),其填充水平(L + 4)-秒,垂直填充壁(3x +1)|秒,围绕内部正方形:

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

那就是我们的奥林匹克**游泳池!


眼镜:

  • 出于设计和功能目的,您必须保证100 ≥ L ≥ 1015 ≥ x ≥ 2

  • 输出必须完全如图所示。不允许输出“垂直构建的” *池。

  • 允许尾随空格。

  • 您可以通过任何标准方法接受输入并提供输出。

  • 默认漏洞适用。


示例/测试用例:

L = 20,x = 3

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



L = 50,x = 5:

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


L = 10,x = 15

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

这是,因此以字节为单位的最短代码胜出!

*如果垂直建造,水可能会流出:P

**是的,我知道车道越多,泳池越短,图纸看起来就越像泳池!


沙盒,适合那些可以查看已删除帖子的人。
Xcoder先生17年

如果x>=L?? 会发生什么?
CraigR8806

@ CraigR8806相同的算法。车道多于泳池长度。我觉得您对这个问题有误解……
Xcoder先生,2015年

怎么样的情况下L=10x=15?泳道的数量是否会超过游泳池的数量?我可能误会了意图
CraigR8806

@ CraigR8806长度与泳道无关!您可以自己与现有的答案的一个测试
Xcoder先生

Answers:


13

木炭,32字节

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

在线尝试!

-4感谢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

木炭已经克服了这个挑战:)
Downgoat

你忠实于自己的名字-你让我失望了。
notjagan

2
与往常一样,要求解释。
CalculatorFeline

@CalculatorFeline是的,我没有时间做所有这些解释,而我正在寻找一些值得推崇的东西...也可以使用 -a命令行参数。
大公埃里克(Erik the Outgolfer)'17年

为什么会-a引起错误> _ <
Erik the Outgolfer

12

木炭40 39 37字节

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

在线尝试!

我知道尼尔已经有大约相同长度的木炭答案,但是我采取了不同的方法,所以我认为我也可以发布。

说明

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
呵呵,所以第三个参数是可选的?很好,这为我节省了两个字节!
尼尔

11

木炭40 38 36 31字节

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

在线尝试!链接是详细版本的代码。说明:

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

木炭的绘画图元使用整体字符数,包括 + s的,但是输入仅是-s 的数量,因此我们需要加2以获得内壁的宽度。

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

再次计算内壁的高度,包括底行在内,因此每条车道加三。

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

画线。这只是一个充满:由s垂直 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我链接到详细代码,因为它更具可读性,此外,我添加了参数以自动生成用于验证的简洁代码。
尼尔

...但是219个字符比40个更具可读性?:p
Jonathan Allan

我本可以更努力地观察并注意到此提示的:)
Jonathan Allan

1
和往常一样,请解释。
CalculatorFeline

8

T-SQL,284281字节

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

根据我们允许的输入法,输入来自现有表t中的 INT列Lx

基本上,我要创建一个长字符串,并用字母表示重复的字符(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

JavaScript(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.1252 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]                     

4

C#(.NET Core),202字节

(L,x)=>{char p='+',n='\n',e=' ';string v="|",r="",s=p+new string('-',L+4)+p+n,q=v+e+p+new string('-',L)+p+e+v+n;r+=s+q;for(int i=0;i<3*x-1;)r+=v+e+v+new string(i++%3<2?e:':',L)+v+e+v+n;r+=q+s;return r;}

在线尝试!




3

Python 2,97字节

L,x=input()
for i in'01'+'223'*~-x+'2210':r=('+|||-   -+||'+L*'-- :')[int(i)::4];print r+r[2::-1]

在线尝试!


Python 2,98个字节

L,x=input()
s='+---| +-%s+-+---'%'|:'.join(['| '*5]*x)
while s:print s[:3]+s[3]*L+s[2::-1];s=s[4:]

在线尝试!


2

木炭,36字节

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

在线尝试!

这比我的其他答案更有效。


1
木炭已正式接管了整个挑战。木炭中有4/10个答案...
Xcoder先生17年

@ Mr.Xcoder嗯,这是专门为高尔夫ascii-art设计的语言,所以这就是您要得到的。;)
Erik the Outgolfer

1
说明要求。
CalculatorFeline

@ Mr.Xcoder而且其中三个长度也一样!
尼尔

2

C(gcc),195字节

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

在线尝试!


1

Perl 5,124 +1(-a)= 125字节

say$o='+'.'-'x($l=pop@F),$t="----+
",$i="| $o+ |
",$e=($d="| |").$"x$l.$d,$/,$e;say$d.':'x$l."$d
$e
$e"for 2..$_;say$i,$o,$t

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.