Anzahl Schließfächer!


25

Bei einer positiven Ganzzahl <100 (von 1 bis 99, einschließlich 1 und 99) werden so viele Schließfächer ausgegeben.

Ein Schließfach ist wie folgt definiert:

+----+
|    |
|    |
|    |
| nn |
+----+

Wo nnist die Schließfachnummer in Basis 10. Wenn es eine einstellige Nummer gibt, wird sie mit einer 0 davor ausgedrückt. Beispiel: Schließfach Nummer 2 zeigt die Nummer an 02.

Schließfächer können gestapelt werden, aber nur bis zu 2 hoch:

+----+
|    |
|    |
|    |
| on |
+----+
|    |
|    |
|    |
| en |
+----+

onbezeichnet eine ungerade Zahl, eneine gerade Zahl. Schließfächer können auch nebeneinander gestellt werden.

+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+

Beachten Sie, dass Schließfach Nummer 5 ein Schließfach mit ungerader Nummer ist, das sich unten befindet. Dies liegt daran, dass bei einer Eingabe mit ungeraden Zahlen das letzte Schließfach auf dem Boden abgelegt werden sollte (da ein schwebendes Schließfach zu viel kostet). Das obige Beispiel ist daher die erwartete Ausgabe für n = 5. n = 0 sollte nichts zurückgeben.

Regeln: Standardmethoden für die Eingabe / Ausgabe. Eingabe in einem beliebigen Format, Ausgabe als String. Es gelten Standardlücken.

Testfälle:

Input
Output
---------------------
1






+----+
|    |
|    |
|    |
| 01 |
+----+
--------------------- (newlines optional in case 1)
4
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+
|    |    |
|    |    |
|    |    |
| 02 | 04 |
+----+----+
---------------------
5
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+
---------------------
16
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 01 | 03 | 05 | 07 | 09 | 11 | 13 | 15 |
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 02 | 04 | 06 | 08 | 10 | 12 | 14 | 16 |
+----+----+----+----+----+----+----+----+

Das ist , also gewinnt der kürzeste Code!



15
Es ist Zeit, den Bauherren zu sagen, dass sie die ungeraden Schließfächer auf den Boden stellen sollen.
mbomb007

3
Müssen die vorangestellten Zeilen des Falls 1ausgegeben werden?
Dzaima

@ComradeSparklePony hat mich überhaupt nicht beeinflusst :). Tut mir leid wegen des harten Tons, der verwendet wurde, nur um zu helfen.
Magic Octopus Urn

Antworten:




4

PHP, 191 Bytes

for(;a&$k="01112344453"[$i++];print"$l\n")for($l="",$b="+||"[$k%3],$n=0;$n++<$a=$argn;)$l.=$i<6&$n%2&$n!=$a|$i>5&($n%2<1|$n==$a)?($l?"":"$b").["----+","    |",sprintf(" %02d |",$n)][$k%3]:"";

Probieren Sie es online!

PHP, 235 Bytes

for(;$i++<$a=$argn;)$r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0);for(;$j<6;)$l[]=($a<2&$j<3?"":[$p("+",$c=($j<3?floor:ceil)($a/2)*5+1,"----+"),$p("|",$c,"    |"),"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n";echo strtr("01112344453",$l);

Fall 1 mit optionalen Zeilenumbrüchen

Probieren Sie es online!

Erweitert

for(;$i++<$a=$argn;)
  $r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0); # make an 2D array 0:odd values 1:even values and last value  
for(;$j<6;) # create 6 strings for each different line
  $l[]=($a<2&$j<3 # if last value =1 and line number under 3 
    ?"" # make an empty string empty [] as alternative
    :[$p("+",$c=($j<3 # else make the 0 or 3 line and store the count for next line
      ?floor # if line number =0 count=floor ($a/2)  multiply 5 and add 1
      :ceil)($a/2)*5+1,"----+") # else count= ceil($a/2) multiply 5 and add 1
    ,$p("|",$c,"    |") # make lines 1 and 4
    ,"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n"; #make lines 2 odd values and 5 even values and last value
echo strtr("01112344453",$l); # Output after replace the digits with the 6 strings

PHP, 300 Bytes

for(;$i++<$a=$argn;)$r[$i==$a||!($i%2)][]=($p=str_pad)($i,2,0,0);echo strtr("01112344453",($a>1?[$p("+",$c=($a/2^0)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[0])." |\n"]:["","",""])+[3=>$p("+",$c=ceil($a/2)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[1])." |\n"]);

ersetzen Sie ["","",""]mit, ["\n","\n","\n"]wenn Sie Zeilenumbrüche für den Fall wünschen1

Probieren Sie es online!


2

Ruby, 256 239 201 191 183 Bytes

n=gets.to_i;a=n/2;z=a+n%2;t=a*2;q="+----+";r=->x{q*x+?\n+("|    |"*x+?\n)*3+"| n |"*x+?\n};u=r[a]+r[z]+q*z;n.times{|i|j=2*i+1;u[?n]="%02d"%(i<a ?j:i>=t ?j-t:j-t+1)};puts u.squeeze'+|'

Das ist furchtbar lang. Ich werde mehr daran arbeiten, Golf zu spielen.


2

C (gcc) , 426 335 300 294 282 252 249 246 244 237 Bytes

Das muss wirklich abgespielt werden

#define L puts("")
#define P(s)printf(&s[i>1]
#define F(x)for(i=0;i++<x;)P(
#define O(x,y)F(x)"+----+"));for(j=0;L,j++<3;)F(x)"|    |"));j=y;F(x)"| %02d |")
e,i,j;f(n){e=n/2+n%2;O(n/2,-1),j+=2);L;O(e,0),j+=i^e?2:2-n%2);L;F(e)"+----+"));}

Probieren Sie es online!


Schlagen Sie -~n/2anstelle vonn/2+n%2
ceilingcat 29.11.18

1

Batch, 305 Bytes

@echo off
set/a"n=%1&-2
if %1 gtr 1 call:l %n% 1
call:l %1 2
echo %s: =-%
exit/b
:l
set s=+
set "t=|
for /l %%i in (%2,2,%n%)do call:c %%i
if %1 gtr %n% call:c %1
for %%s in ("%s: =-%" "%s:+=|%" "%s:+=|%" "%s:+=|%" "%t%")do echo %%~s
exit/b
:c
set s=%s%    +
set i=0%1
set "t=%t% %i:~-2% |

+----+und | |beide sind insofern ähnlich + +, als sie durch eine einzige Ersetzung generiert werden können, und es stellt sich heraus, dass sie etwas kürzer sind als die separate Generierung (das zusätzliche Zitat, das für |s benötigt wird, hilft nicht).



1

JavaScript ES6, 224 Bytes

n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)

Ich habe einige Ideen aus der Python-Antwort von Math Junkie verwendet

Testschnipsel

f=
n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)

O.innerHTML=f(I.value);
<input id="I" value="5" type="number" min="0" max="99" oninput="O.innerHTML=f(this.value)">
<pre id="O"></pre>

Aufgeräumt

n => {
    r=(s,k)=>s.repeat(k);
    s="";
    [0,1].map(i => {
        c = (n/2 + n%2 * i)|0;
        if (c) {
            s += "+" + r(l="----+", c) + "\n|" + r(r("    |",c) + "\n|", 3);
            [...Array(c).keys()].map(j => {
                s += ` ${(h = 2*j + (i + !(i & j>c-2 & n%2))) > 9 ? h:"0"+h} |`;
            });
            s += "\n" + (i ? `+${r(l,c)}\n` : "");
        }
    });
    return s;
};

Willkommen bei PPCG!
Caird Coinheringaahing

0

Kohle , 37 Bytes

NθF…·¹θ«F⁵¿﹪ι²¿⁼ιθ→↗↓B⁶±⁶↗→→0P←⮌Iι←←↙

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

Nθ

Geben Sie die Anzahl der Schließfächer in ein q.

F…·¹θ«

Schlaufe über die Schließfächer von 1bis qeinschließlich.

F⁵¿﹪ι²¿⁼ιθ→↗↓

Berechnen Sie die Richtung zum nächsten Schließfach und wiederholen Sie dies fünfmal (mehr Golf als mit Sprungbewegungen).

B⁶±⁶

Zeichne das Schließfach, beginnend in der unteren linken Ecke. (Die untere rechte Ecke benötigt ebenfalls 4 Bytes, während die obere rechte Ecke 5 Bytes benötigt. Die obere linke Ecke benötigt nur 3 Bytes, aber dann würde das Zeichnen der Schließfachnummer länger dauern.)

↗→→0

Zeichnen Sie gegebenenfalls die führende Null der Schließfachnummer.

P←⮌Iι

Zeichnen Sie die Schließfachnummer umgekehrt und von rechts nach links.

←←↙

Gehen Sie zurück in die linke untere Ecke, um die Richtung zum nächsten Schließfach zu berechnen.

Bearbeiten: Spätere Versionen von Charcoal unterstützen diese 32-Byte-Lösung:

F⪪…·¹N²«F⮌ι«↗→→0P←⮌Iκ↖↖↖↑UR⁶»M⁵χ

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

F⪪…·¹N²«

Nehmen Sie die Zahlen von 1bis einschließlich der eingegebenen Zahl paarweise. (Wenn die eingegebene Nummer ungerade ist, enthält das letzte Array nur ein Element.)

F⮌ι«

Schleife über jedes Paar in umgekehrter Reihenfolge.

↗→→0

Zeichnen Sie gegebenenfalls die führende Null der Schließfachnummer.

P←⮌Iι

Zeichnen Sie die Schließfachnummer umgekehrt und von rechts nach links.

↖↖↖↑UR⁶

Gehen Sie zum oberen linken Rand des Schließfachs und zeichnen Sie es. Dies ist auch die linke untere Ecke des nächsten Schließfachs, sodass wir gegebenenfalls das zweite Schließfach des Paares zeichnen können.

»M⁵χ

Gehe zum nächsten Schließfachpaar. (Dies sollte vor der inneren Schleife stehen, um 1 Byte zu sparen, aber Charcoal erzeugt aus irgendeinem Grund eine falsche Ausgabe für eine Eingabe von 1.)

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.