번호 사물함!


25

양의 정수 <100 (1과 99를 포함하여 1과 99 포함)이 주어지면 많은 로커를 출력합니다.

사물함은 다음과 같이 정의됩니다.

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

여기서, nn한 자리 숫자가있는 경우, 기지국 (10)에서, 그 앞에 0 로커 숫자로 표현된다. 예를 들어, 로커 번호 2는 번호를 표시합니다 02.

사물함은 쌓을 수 있지만 최대 2 개까지만 쌓을 수 있습니다.

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

on홀수, 짝수를 나타냅니다 en. 사물함은 나란히 놓을 수도 있습니다.

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

로커 번호 5는 하단에있는 홀수 번호 로커입니다. 홀수 번호의 입력이있을 때, 마지막 사물함이 바닥에 놓여 야하기 때문입니다 (호버링 사물함 비용이 너무 비싸기 때문). 따라서 위의 예는 n = 5에 대한 예상 출력입니다. n = 0은 아무것도 반환하지 않아야합니다.

규칙 : 표준 입출력 방법. 편리한 형식으로 입력하고 문자열로 출력합니다. 표준 허점이 적용됩니다.

테스트 사례 :

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

이것은 이므로 가장 짧은 코드가 승리합니다!



15
이제 빌더에게 홀수 사물함을 바닥에 놓으라고 지시 할 때입니다.
mbomb007

3
사례의 선행 줄 바꿈을 1출력해야합니까?
dzaima

@ComradeSparklePony는 전혀 영향을 미치지 않았습니다 :). 사용하려는 가혹한 음색에 대해 죄송합니다.
Magic Octopus Urn

답변:




4

PHP, 191 바이트

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

온라인으로 사용해보십시오!

PHP, 235 바이트

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

선택적인 개행을 가진 사례 1

온라인으로 사용해보십시오!

넓히는

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 바이트

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

대신 ["","",""]["\n","\n","\n"]당신이 경우에 대한 줄 바꿈을 원하는 경우1

온라인으로 사용해보십시오!


2

루비, 256 239 201 119183 바이트

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

이것은 너무 길다. 나는 그것을 더 골프에 노력할 것입니다.


2

C (GCC) , 426 (335) 300 294 282 252 249 246 244 237 바이트

정말 골프를 쳐야합니다

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

온라인으로 사용해보십시오!


-~n/2대신 추천n/2+n%2
천장 고양이

1

배치, 305 바이트

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

+----+| |유사 모두 + +가 하나의 대체를 통해 생성 할 수 있다는 점에서, 그것은 (의 추가가 필요 인용이 별도로 생성보다 약간 짧은 것으로 판명 |들 도움이되지 않습니다).



1

자바 스크립트 ES6, 224 바이트

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)

math junkie 's Python answer의 아이디어를 사용했습니다.

테스트 스 니펫

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>

정리

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

PPCG에 오신 것을 환영합니다!
caird coinheringaahing

0

, 37 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

Nθ

로커 수를에 입력하십시오 q.

F…·¹θ«

에서 사물함을 통해 루프 1q포함.

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

다음 사물함의 방향을 계산하고 5 번 반복하십시오 (점프 운동보다 골퍼).

B⁶±⁶

왼쪽 하단에서 시작하여 사물함을 그립니다. (오른쪽 아래 모서리에도 4 바이트가 걸리고 오른쪽 위 모서리에는 5 바이트가 필요합니다. 왼쪽 위 모서리에는 3 바이트 만 걸리지 만 로커 번호를 그리는 데 시간이 더 걸립니다.)

↗→→0

필요한 경우 사물함 번호의 선행 0을 그립니다.

P←⮌Iι

사물함 번호를 거꾸로 오른쪽에서 왼쪽으로 그리십시오.

←←↙

다음 왼쪽 사물함의 방향을 계산할 준비가되면 왼쪽 하단으로 돌아갑니다.

편집 : 차콜의 이후 버전은이 32 바이트 솔루션을 지원합니다.

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

F⪪…·¹N²«

1입력 번호까지 의 숫자를 쌍으로 가져옵니다 . 입력 번호가 홀수 인 경우 마지막 배열에는 하나의 요소 만 있습니다.

F⮌ι«

각 쌍을 역순으로 반복합니다.

↗→→0

필요한 경우 사물함 번호의 선행 0을 그립니다.

P←⮌Iι

사물함 번호를 거꾸로 오른쪽에서 왼쪽으로 그리십시오.

↖↖↖↑UR⁶

사물함의 왼쪽 상단으로 이동하여 그립니다. 이것은 또한 다음 사물함의 왼쪽 하단이므로 해당하는 경우 쌍의 두 번째 사물함을 그릴 준비가되었습니다.

»M⁵χ

다음 로커 쌍으로 이동하십시오. (이것은 1 바이트를 절약하기 위해 내부 루프 앞에 있어야하지만 숯은 어떤 이유로 1의 입력에 대해 잘못된 출력을 생성합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.