Sie sind der Gastgeber der Olympischen Spiele!


17

Sie sind Austragungsort der Olympischen Spiele und müssen aus diesem Anlass einen fantastischen Pool errichten, aber die Aufsichtsbehörden ändern häufig ihre Meinung zu den Abmessungen und benötigen einen schnellen Weg, um ihn mit der gewünschten Größe wieder aufzubauen!


Bei zwei Ganzzahlen Lund xbesteht Ihre Aufgabe darin, ein Schwimmbad mit Längen Lund xGassen zu bauen .

Wie ist ein Pool aufgebaut?

  • Es enthält ein inneres Quadrat, dessen horizontale Wände aus Laufeinanderfolgenden Strichen bestehen ( -) und dessen vertikale Wände aus 3x - 1Balken bestehen ( |). Zusätzlich +liegen 4 Schilder in jeder Ecke. Lassen Sie uns ein Beispiel haben ( L = 10, x = 2):

    + ---------- +
    | |
    | |
    | |
    | |
    | |
    + ---------- +
    
  • Jede Spur hat eine Breite von 2 vertikalen Einheiten. Das innere Quadrat ist mit x-1Spurentrennern gefüllt , die aus Lhorizontal aufeinanderfolgenden :Symbolen bestehen. Nach dem Einsetzen der Spurentrenner sollte unser Pool folgendermaßen aussehen:

    + ---------- +
    | |
    | |
    | :::::::::: |
    | |
    | |
    + ---------- +
    
  • Ein Pool enthält auch eine Polsterung (ein äußeres Quadrat), deren horizontale Wände (L + 4) -und deren vertikale Wände (3x + 1) sind |und die das innere Quadrat umgibt:

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

Und das ist unser olympisches ** Schwimmbad!


Technische Daten:

  • Für Design und Funktionalität Zwecke, werden Sie garantiert , dass 100 ≥ L ≥ 10und 15 ≥ x ≥ 2.

  • Die Ausgabe muss genau wie gezeigt sein. Die Ausgabe eines "vertikal erstellten" * Pools ist nicht zulässig.

  • Nachgestellte und führende Leerzeichen sind zulässig.

  • Sie können die Eingabe und Ausgabe über eine beliebige Standardmethode vornehmen .

  • Es gelten Standardlücken .


Beispiele / Testfälle:

L = 20, x = 3

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



L = 50, x = 5:

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


L = 10, x = 15

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

Das ist , also gewinnt der kürzeste Code in Bytes !

* Das Wasser könnte abfließen, wenn es senkrecht gebaut wird: P

** Ja, mir ist bewusst, dass die Zeichnung umso weniger wie ein Pool aussieht, je länger die Bahnen sind und je kürzer der Pool ist!


Sandbox für diejenigen, die gelöschte Beiträge anzeigen können.
Mr. Xcoder

Was soll passieren wenn x>=L??
CraigR8806

@ CraigR8806 Derselbe Algorithmus. Nur mit mehr Bahnen als die Länge des Pools. Ich habe das Gefühl, dass Sie die Frage falsch verstanden haben ...
Mr. Xcoder

Was ist mit dem Fall wo L=10und x=15? Würde es nicht mehr Gassen geben, als im Pool platziert werden könnten? Ich könnte die Absicht falsch
verstehen

@ CraigR8806 Die Länge hat nichts mit den Fahrspuren zu tun! Sie können es selbst mit einer der vorhandenen Antworten
testen

Antworten:


13

Holzkohle , 32 Bytes

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

Probieren Sie es online!

-4 danke an 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 Holzkohle hat diese Herausforderung :)
Downgoat

Du bist deinem Namen treu geblieben - du hast mich übervorteilt.
Notjagan

2
Wie immer bitte um Erklärung.
CalculatorFeline

@CalculatorFeline Ja, ich habe keine Zeit, all diese Erklärungen zu machen, während ich nach etwas zum Ausgolfen suche ... Sie können den AST auch mit dem -aBefehlszeilenargument überprüfen .
Erik der Outgolfer

Warum wird der -aFehler
ausgelöst?

12

Kohle , 40 39 37 Bytes

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

Probieren Sie es online!

Ich weiß, dass Neil bereits eine Antwort in etwa der gleichen Länge hat, aber ich bin etwas anders vorgegangen, also dachte ich mir, ich könnte auch meine posten.

Erläuterung

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
Erklärung bitte.
CalculatorFeline

@CalculatorFeline Hinzugefügt.
Notjagan

1
Huh, also ist der dritte Parameter optional? Schön, das spart mir zwei Bytes!
Neil

11

Kohle, 40 38 36 31 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

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

Die Zeichengrundelemente von Charcoal verwenden die Gesamtzahl der Zeichen einschließlich +s. Die Eingabe ist jedoch nur die Anzahl -s. Daher müssen wir 2 addieren, um die Breite der Innenwand zu erhalten.

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

Berechnen Sie erneut die Höhe der Innenwand einschließlich der untersten Reihe, also drei pro Spur plus eins.

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

Zeichne die Gassen. Dies ist einfach ein Rechteck, das :durch zwei Leerzeilen vertikal voneinander getrennt ist (die Pilger stehen für Zeilenumbrüche).

Bθη         Box(q, h);

Der RectangleBefehl ist genau das, was wir brauchen, um die Innenwand zu zeichnen. Bearbeiten: Mit dieser Option Boxkönnen Sie den dritten Parameter weglassen und mir 2 Bytes sparen.

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

Und wieder, um die äußere Wand zu zeichnen, außer etwas breiter und höher und zentriert auf der inneren Wand.


1
Warum sind die Links zu Charcoal-Code bei TIO niemals mit dem eigentlichen Code verknüpft?
Jonathan Allan

1
@ JonathanAllan Ich verweise auf den ausführlichen Code, da dieser besser lesbar ist. Außerdem füge ich das Argument hinzu, um den kurzen Code automatisch zu Überprüfungszwecken zu generieren.
Neil

... aber wie sind 219 Zeichen lesbarer als 40? : p
Jonathan Allan

Ich hätte nur härter hinschauen und diesen Tipp beachten können :)
Jonathan Allan

1
Wie immer bitte erklären.
CalculatorFeline

8

T-SQL, 284 281 Bytes

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

Eingang wird von INT Spalten entnommen L und x in vorbestehenden Tabelle t , pro unseren erlaubt Eingabemethoden .

Grundsätzlich erstelle ich eine lange Zeichenfolge mit Buchstaben, die die wiederholten Zeichen darstellen (d = Bindestriche, s = Leerzeichen, c = Doppelpunkte, b = Zeilenumbruch), und ersetze sie am Ende durch die entsprechenden Füllzeichen.

Formatiert:

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

Innerhalb der Schleife hänge ich 2 Reihen Leerzeichen und 1 Reihe Doppelpunkte an. Am Ende schneide ich diese Teilerreihe ab und hänge den Poolrand an, bevor ich die Ersetzungen vornehme.

BEARBEITEN : Speichert 3 Bytes durch Umschalten @auf die am häufigsten verwendete Variable und Vertauschen der Initialisierungsreihenfolge.


8

JavaScript (ES6), 137 - 124 Byte

Ich habe es auf meinem Handy ein bisschen runtergespielt, weitere werden folgen.

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

Versuch es

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>


Ich mag dieses, weil es interaktiv ist: D
xDaizu

@ xDaizu, checkt einige meiner anderen JS-Lösungen aus, also;)
Shaggy


4

SOGL V0.12 , 52 51 Bytes

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

Probieren Sie es hier aus!
Nicht schlecht, wenn man bedenkt, dass 20 Bytes davon eine Rechteckfunktion sind, für die Holzkohle eine eingebaute Funktion hat.

Erläuterung:

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 Byte

(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;}

Probieren Sie es online!





2

Kohle , 36 Bytes

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

Probieren Sie es online!

Dies ist ein mehr Charcoal-y-Algorithmus als meine andere Antwort.


1
Holzkohle hat offiziell die ganze Herausforderung übernommen. 4/10 Antworten sind in Charcoal ...
Mr. Xcoder

@ Mr.Xcoder Nun, es ist eine Sprache, die speziell für das Golfen von ASCII-Kunst entwickelt wurde. ;)
Erik der Outgolfer

1
Erklärungsanfrage.
CalculatorFeline

@ Mr.Xcoder Und drei von ihnen sind auch gleich lang!
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);}

Probieren Sie es online!


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.