Loker Angka!

25

Diberikan bilangan bulat positif <100 (dari 1 hingga 99, termasuk 1 dan 99), menghasilkan banyak loker.

Loker didefinisikan sebagai berikut:

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

di mana nnnomor pengunci, dalam basis 10. Jika ada nomor 1-digit, itu dinyatakan dengan 0 di depannya. Misalnya, nomor loker 2 menampilkan nomor tersebut 02.

Loker dapat ditumpuk, tetapi hanya hingga 2 tinggi:

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

onmenunjukkan angka ganjil, enangka genap. Loker juga dapat diletakkan di samping satu sama lain.

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

Perhatikan bahwa loker nomor 5 adalah loker bernomor ganjil yang ada di bagian bawah. Ini karena ketika Anda memiliki input bernomor ganjil, loker terakhir harus diletakkan di lantai (karena loker yang melayang terlalu mahal). Karena itu, contoh di atas adalah output yang diharapkan untuk n = 5. n = 0 harus mengembalikan apa-apa.

Aturan: Metode standar input / output. Input dalam format apa pun yang nyaman, output sebagai string. Celah standar berlaku.

Kasus uji:

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

Ini , jadi kode terpendek menang!

Kamerad SparklePony
sumber
Terkait
Shaggy
15
Sudah waktunya untuk memberitahu pembangun untuk meletakkan loker aneh di bagian bawah.
mbomb007
3
Apakah baris baru yang berurutan dari kasus 1ini harus dikeluarkan?
dzaima
@ComradeSparklePony sama sekali tidak mempengaruhi saya :). Maaf tentang nada kasar yang digunakan, hanya berusaha membantu.
Guci Gurita Ajaib

Jawaban:

7

Pyth , 66 byte

A.[Y2m+.rKXJr6j" | "++km.[\02`kdkjkUT;" -|+"+*3]KJ_.T_McSQ2js[GHhH

Suite uji.

Biarawati Bocor
sumber
6

Python 2, 201 191 185 175 171 166 164 163 byte

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],

Cobalah secara Online!

pecandu matematika
sumber
Ini saat ini gagal pada kasus uji pertama.
Kamerad SparklePony
@ComradeSparklePony Tetap
pecandu matematika
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]:"";

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

Kasus 1 dengan baris baru opsional

Cobalah online!

Diperluas

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

ganti ["","",""]dengan ["\n","\n","\n"]jika Anda ingin baris baru untuk kasus1

Cobalah online!

Jörg Hülsermann
sumber
2

Ruby, 256 239 201 191 183 byte

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

Ini sangat panjang. Saya akan bekerja lebih banyak golf.

Peter Lenkefi
sumber
2

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

Ini benar-benar perlu diturunkan

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

Cobalah online!

Cleblanc
sumber
Sarankan -~n/2alih-alihn/2+n%2
ceilingcat
1

Batch, 305 byte

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

+----+dan | |keduanya mirip dengan + +di mana mereka dapat dihasilkan melalui substitusi tunggal, dan ternyata sedikit lebih pendek daripada menghasilkan mereka secara terpisah (kutipan tambahan yang diperlukan untuk |s tidak membantu).

Neil
sumber
1

Pyth - 97 74 86 80 75 byte

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

Coba di sini

Maria
sumber
1
Maaf, tetapi saat ini gagal pada input 1.
Kamerad SparklePony
@ComradeSparklePony Memperbaikinya. Terima kasih.
Maria
1

JavaScript ES6, 224 byte

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)

Menggunakan beberapa ide dari jawaban Python junkie matematika

Cuplikan Tes

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>

Dibersihkan

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
sumber
Selamat datang di PPCG!
caird coinheringaahing
0

Arang , 37 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

Nθ

Masukkan jumlah loker ke dalam q.

F…·¹θ«

Loop atas loker dari 1ke qinklusif.

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

Hitung arah ke loker berikutnya, dan ulangi itu 5 kali (golfier daripada menggunakan gerakan lompat).

B⁶±⁶

Gambar loker, mulai dari sudut kiri bawah. (Pojok kanan bawah juga membutuhkan 4 byte sedangkan pojok kanan atas mengambil 5. Pojok kiri atas hanya membutuhkan 3 byte tetapi kemudian nomor loker akan membutuhkan waktu lebih lama untuk menggambar.)

↗→→0

Gambarkan nol di depan dari nomor loker, jika perlu.

P←⮌Iι

Tarik nomor loker terbalik dan kanan-ke-kiri, secara efektif membenarkannya.

←←↙

Pindah kembali ke sudut kiri bawah siap untuk menghitung arah ke loker berikutnya.

Sunting: Versi Charcoal nanti mendukung solusi 32-byte ini:

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

F⪪…·¹N²«

Ambil angka dari 1ke nomor input inklusif berpasangan. (Jika nomor input ganjil, array terakhir hanya akan memiliki satu elemen.)

F⮌ι«

Ulangi setiap pasangan dalam urutan terbalik.

↗→→0

Gambarkan nol di depan dari nomor loker, jika perlu.

P←⮌Iι

Tarik nomor loker terbalik dan kanan-ke-kiri, secara efektif membenarkannya.

↖↖↖↑UR⁶

Pindah ke kiri atas loker dan gambarkan. Ini juga merupakan kiri bawah dari loker berikutnya, jadi kami siap untuk menggambar loker kedua dari pasangan jika berlaku.

»M⁵χ

Pindah ke sepasang loker berikutnya. (Ini harus sebelum loop dalam untuk menghemat 1 byte tetapi Charcoal menghasilkan output yang salah untuk input 1 karena beberapa alasan.)

Neil
sumber