Liczba szafek!

25

Biorąc pod uwagę dodatnią liczbę całkowitą <100 (od 1 do 99, w tym 1 i 99), wyprowadza tyle szafek.

Szafkę definiuje się następująco:

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

gdzie nnjest numer szafki, w bazie 10. Jeśli jest 1-cyfrowy numer, jest on wyrażony przed nim 0. Na przykład szafka numer 2 wyświetla numer 02.

Szafki można ustawiać jeden na drugim, ale tylko do 2 wysokości:

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

onoznacza liczbę nieparzystą, liczbę enparzystą. Szafki można również umieścić obok siebie.

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

Zauważ, że szafka numer 5 to nieparzysta szafka, która znajduje się na dole. Dzieje się tak dlatego, że gdy wprowadzasz nieparzyste dane, ostatnia szafka powinna zostać umieszczona na podłodze (ponieważ unosząca się szafka kosztuje zbyt dużo). Powyższy przykład jest zatem oczekiwaną wydajnością dla n = 5. n = 0 powinno zwrócić nic.

Zasady: Standardowe metody wejścia / wyjścia. Wprowadź w dowolnym dogodnym formacie, wyślij jako ciąg. Obowiązują standardowe luki.

Przypadki testowe:

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 |
+----+----+----+----+----+----+----+----+

To jest , więc wygrywa najkrótszy kod!

Towarzyszu SparklePony
źródło
Powiązane
Kudłaty
15
Czas powiedzieć budowniczym, aby postawili dziwne szafki na dole.
mbomb007
3
Czy należy wydać nowe linie sprawy 1?
dzaima 27.04.17
@ComradeSparklePony w ogóle mnie nie wywarło :). Przepraszam za ostry ton, po prostu próbuję pomóc.
Magic Octopus Urn

Odpowiedzi:

6

Python 2, 201 191 185 175 171 166 164 163 bajtów

n=input()
for j in 0,1:c=n/2+n%2*j;m='+----'*c+'+\n';print['\n',m+('|    '*c+'|\n')*3+''.join('| %02d '%-~i for i in range(j,n-n%2,2)+n%2*j*[~-n])+'|\n'+m*j][c>0],

Wypróbuj online!

ćpun matematyki
źródło
Obecnie nie udaje się to w pierwszym przypadku testowym.
Towarzysz SparklePony 27.04.17
@ComradeSparklePony Naprawiono
matematyki
4

PHP, 191 bajtów

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]:"";

Wypróbuj online!

PHP, 235 bajtów

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

Przypadek 1 z opcjonalnymi znakami nowej linii

Wypróbuj online!

Rozszerzony

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 bajtów

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

wymienić ["","",""]ze ["\n","\n","\n"]jeśli chcesz nowe linie dla sprawy1

Wypróbuj online!

Jörg Hülsermann
źródło
2

Rubinowy, 256 239 201 191 183 bajtów

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'+|'

To jest okropnie długie. Popracuję nad golfem.

Peter Lenkefi
źródło
2

C (gcc) , 426 335 300 294 282 252 249 246 244 237 bajtów

To naprawdę wymaga gry w golfa

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

Wypróbuj online!

cleblanc
źródło
Zaproponuj -~n/2zamiastn/2+n%2
ceilingcat
1

Partia, 305 bajtów

@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% |

+----+i | |oba są podobne do + +tego, że można je wygenerować za pomocą pojedynczego podstawienia, i okazuje się, że jest nieco krótszy niż generowanie ich osobno (dodatkowe cytowanie wymagane dla |s nie pomaga).

Neil
źródło
1

Pyth - 97 74 86 80 75 bajtów

V3K+:?&NtQ2 1Q2?NQYIlK+*+\+*\-4lK\+IqN2BFTU4+sm?qT3.F"| {:02d} "d+\|*\ 4K\|

Wypróbuj tutaj

Maria
źródło
1
Przykro nam, ale obecnie nie udaje się to na wejściu 1.
Towarzysz SparklePony
@ComradeSparklePony Naprawiono. Dzięki.
Maria
1

JavaScript ES6, 224 bajty

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)

Wykorzystałem kilka pomysłów z odpowiedzi Python z matematyki ćpuna

Test Snippet

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>

Oczyszczone

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;
};
Justin Mariner
źródło
Witamy w PPCG!
caird coinheringaahing
0

Węgiel drzewny , 37 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

Nθ

Wprowadź liczbę szafek do q.

F…·¹θ«

Pętla nad szafkami od 1do qwłącznie.

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

Oblicz kierunek do następnej szafki i powtórz to 5 razy (bardziej golfowo niż za pomocą ruchów skoku).

B⁶±⁶

Narysuj szafkę, zaczynając od lewego dolnego rogu. (Prawy dolny róg zajmuje również 4 bajty, podczas gdy prawy górny róg zajmuje 5. Lewy górny róg zajmuje tylko 3 bajty, ale wtedy numer szafki rysowałby dłużej).

↗→→0

W razie potrzeby narysuj wiodące zero numeru szafki.

P←⮌Iι

Narysuj numer szafki odwrócony i od prawej do lewej, skutecznie uzasadniając go.

←←↙

Wróć do lewego dolnego rogu, aby obliczyć kierunek do następnej szafki.

Edycja: Późniejsze wersje Charcoal obsługują to 32-bajtowe rozwiązanie:

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

F⪪…·¹N²«

Przenieś liczby od 1na liczbę wejściową łącznie parami. (Jeśli liczba wejściowa jest nieparzysta, ostatnia tablica będzie miała tylko jeden element.)

F⮌ι«

Pętlę nad każdą parą w odwrotnej kolejności.

↗→→0

W razie potrzeby narysuj wiodące zero numeru szafki.

P←⮌Iι

Narysuj numer szafki odwrócony i od prawej do lewej, skutecznie uzasadniając go.

↖↖↖↑UR⁶

Przejdź do lewej górnej części szafki i narysuj ją. Jest to również dolny lewy róg następnej szafki, więc jesteśmy gotowi narysować drugą szafkę z pary, jeśli dotyczy.

»M⁵χ

Przejdź do następnej pary szafek. (Powinno to nastąpić przed wewnętrzną pętlą, aby zaoszczędzić 1 bajt, ale węgiel drzewny generuje niepoprawne wyjście dla wejścia 1 z jakiegoś powodu.)

Neil
źródło