あなたはオリンピックのホストです!


17

あなたはオリンピック大会を主催し、機会のために素晴らしいプールを構築する必要がありますが、監督者はしばしば寸法に関する考えを変え、要求されたサイズでそれを再構築する迅速な方法が必要です!


2つの整数、Lおよびが与えられた場合x、あなたの仕事は長さLxレーンのスイミングプールを構築することです。

プールはどのように構築されますか?

  • 内側の正方形が含まれ、その水平壁はL連続するダッシュ(-)で作られ、垂直壁は3x - 1バー(|)で作られています。さらに、+各コーナーに4つの標識があります。例(L = 10, x = 2)を見てみましょう:

    + ---------- +
    | |
    | |
    | |
    | |
    | |
    + ---------- +
    
  • 各レーンの幅は2垂直ユニットです。内側の正方形はx-1L水平方向に連続する:シンボルで構成されるレーンセパレーターで満たされています。レーンセパレータを配置すると、プールは次のようになります。

    + ---------- +
    | |
    | |
    | ::::::::::: |
    | |
    | |
    + ---------- +
    
  • プールには、水平方向の壁が(L + 4)sで、垂直方向の壁が(3x + 1)sである内側の正方形を囲むパディング(外側の正方形)も含まれています-|

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

それがオリンピックサイズのスイミングプールです!


仕様:

  • デザインと機能性の目的のために、あなたが保証されている100 ≥ L ≥ 1015 ≥ x ≥ 2

  • 出力は、示されているとおりでなければなりません。「垂直に構築された」*プールの出力は許可されていません。

  • 末尾と先頭のスペースは許可されます。

  • 標準的な方法で入力を行い、出力を提供できます。

  • デフォルトの抜け穴が適用されます。


例/テストケース:

L = 20、x = 3

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



L = 50、x = 5:

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


L = 10、x = 15

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

これはなので、バイト単位の最短コード勝ちです!

*水が垂直に構築されている場合、水が流出する可能性があります:P

**はい、レーンが多く、プールが短いほど、図面がプールのように見えないことを知っています!


Sandbox、削除された投稿を表示できる人向け。
ミスターXcoder

もしどうなりますかx>=L??
CraigR8806

@ CraigR8806同じアルゴリズム。プールの長さよりも車線が多いだけです。私は...あなたが質問をmistreadていることを感じている
氏Xcoder

どのようなケースについてL=10x=15?プールに配置できる以上のレーンはありませんか?私は意図誤解することができ
CraigR8806

@ CraigR8806長さはレーンとは関係ありません!あなたは、既存の答えの一つを自分でそれをテストすることができます
ミスターXcoder

回答:


13

、32バイト

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

オンラインでお試しください!

-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

2
いつものように、説明依頼。
電卓

@CalculatorFelineええ、アウトゴルフをするために何かを探している間、これらすべての説明をする時間はありません... -aコマンドライン引数を使用してASTを確認することもできます。
エリックアウトゴルファー

なぜ-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が追加されました。
notjagan

1
では、3番目のパラメータはオプションですか?いいですね、2バイト節約できます!
ニール

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

下の列も含めて、内壁の高さを計算します。したがって、車線ごとに3プラス1を加えます。

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

車線を描きます。これは:、2つの空白行で縦方向に区切られたsで満たされた単純な長方形です(ピルクローは改行文字を表します)。

Bθη         Box(q, h);

このRectangleコマンドは、まさに内壁を描くために必要なものです。編集:Box3番目のパラメーターを省略して、2バイト節約できます。

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

そして再び外壁を描きますが、わずかに幅が広く背が高く、内壁の中央に配置されます。


1
TIOのCharcoalコードへのリンクが実際のコードにリンクしないのはなぜですか?
ジョナサンアラン

1
@JonathanAllan読みやすいので詳細なコードにリンクし、さらに検証のために簡潔なコードを自動的に生成する引数を追加します。
ニール

...しかし、どのように219文字は40よりも読みやすいですか?:p
ジョナサンアラン

私はもっ​​と難しく見えるかもしれませんが、このヒントに気づいたかもしれません:)
ジョナサンアラン

1
いつものように説明してください。
電卓

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既存のテーブルにトン当社の許可入力方法ごと

基本的に、繰り返される文字を表す文字(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]                     





2

Charcoal, 36 bytes

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

Try it online!

This is a more Charcoal-y algorithm than my other answer.


1
Charcoal has officially taken over the whole challenge. 4/10 answers are in Charcoal...
Mr. Xcoder

@Mr.Xcoder Well, it's a language specifically designed to golf ascii-art, so that's what you get for it. ;)
Erik the Outgolfer

1
Explanation request.
CalculatorFeline

@Mr.Xcoder And three of them are the same length too!
Neil

2

C (gcc), 195 bytes

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

Try it online!


1

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

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

Try it online!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.