물 풍선 채우기


15

이 도전에서는 풍선으로 채워진 물의 양을 고려하여 물 풍선의 ASCII 아트를 표시해야합니다.

|  __||__  |
| / #   #\ |
| |######| |
| |######| |
| |######| |
| |######| |
| |######| |
| \######/ |
|          |
|          |
+----------+

풍선을 그리는 방법

크기의 풍선을 표시하려면 n다음 단계를 따르십시오 (참고 : 나누기 기호 ( /)가 사용될 때마다 정수 나누기, 내림차순을 나타냄).

  1. |왼쪽과 오른쪽에 10 개의 수직 막대 ( ) -, 아래쪽에 10 개의 대시 ( ), +왼쪽과 오른쪽 하단 모서리에 더하기 부호 ( ) 로 구성된 컨테이너 를 그 립니다. 이것은 모든 것을 12x11로 만들고 "내부"10x10을 만듭니다.

    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    +----------+
    
  2. 상단 행 가운데에 가운데에 두 개의 수직 막대 (풍선의 개구부 )를 그리고 양쪽에 n/2밑줄 ( _)을 붙입니다 ( 이 예에서는 n5).

    |  __||__  |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    +----------+
    
  3. 이 맨 위 행을 둘러싸는 슬래시 ( /)와 백 슬래시 ( )를 하나씩 \아래에 그리 십시오.

    |  __||__  |
    | /      \ |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    |          |
    +----------+
    
  4. 그리기 n동일하게 이격 된 수직 바의 행을하고 (여전히 동일하게 이격) 슬래시 슬래시의 쌍 중 하나 개의 행 :

    |  __||__  |
    | /      \ |
    | |      | |
    | |      | |
    | |      | |
    | |      | |
    | |      | |
    | \      / |
    |          |
    |          |
    +----------+
    
  5. 해시 기호 ( #)로 표시되는 물로 풍선을 채 웁니다 . 가장 낮은 줄에서 시작하여 위로 진행하십시오. 행이 완전히 채워지지 않은 경우 원하는 위치에 해시 마크를 배치 할 수 있습니다 (아래 예에서는 임의로 배치되지만 원하는 경우 왼쪽에 모두 배치 할 수 있음).

    |  __||__  |
    | / #   #\ |
    | |######| |
    | |######| |
    | |######| |
    | |######| |
    | |######| |
    | \######/ |
    |          |
    |          |
    +----------+
    

최대 값 n은 7이고 최소값은 0입니다.

입력

입력은 정수입니다 i 이며,이 값은 그려야하는 해시 마크 (물)의 양입니다.

절대로 2보다 작거나 100보다 클 수 없습니다.

산출

출력은 해시 마크 (물 단위)를 n포함하는 크기의 풍선이어야합니다. i여기서 물 단위를 n보유 할 수있는 가장 작은 크기입니다 i. 이후로는 i항상 2 이상이어야합니다n 항상 0 이상이 될 것입니다.

풍선을 그릴 수있는 최대 크기는 n= 7입니다. 크기 7 풍선이 지정된 양의 물에 맞지 않으면 풍선이 나타납니다.

|          |
|          |
|##  #  ###|
|##########|
|##########|
|##########|
|##########|
|##########|
|##########|
|##########|
+----------+

(위의 입력 i= 76에 대한 출력이어야합니다. 튀어 나오지 않은 풍선과 마찬가지로 맨 위 줄에 물 6 개가 추가로 배열 될 수 있습니다.)

테스트 사례

테스트 케이스를 모두 가질 수 있는데 왜 하나의 테스트 케이스가 있습니까?

다음 i은 2에서 100까지 의 모든 입력에 대한 애니메이션 GIF입니다 .

2에서 100까지의 모든 i의 애니메이션

채점

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


답변:


2

옥타브, 523 바이트

이 바이트 중 23 개는 n = 100의 경우입니다. 누군가가보다 효율적인 방법을 제안 할 수 있습니다 ...

n=input(0);x=zeros(11,6)+32;x(:,1)=124;x(11,:)=45;x(11,1)=43;
if n<5
w=3;h=2;a=2;
elseif n<7
w=3;h=3;a=2;
elseif n<17
w=4;h=4;a=4;
elseif n<37
w=5;h=6;a=6;
else
w=6;h=9;a=8;
end
if n<73
x(1,6)=124;x(1,9-w:5)=95;x(2,8-w)=47;x(3:1+h,8-w)=124;x(1+h,8-w)=92;x(2:1+h,9-w:6)=35;x=[x,fliplr(x)];x(2,5+w)=92;x(1+h,5+w)=47;x(2:1+floor((a*h-n)/a),9-w:4+w)=32;x(2+floor((a*h-n)/a),9-w+a-mod(a-n,a):4+w)=32;
else
x=[x,fliplr(x)];x(max(1,ceil((100-n)/10)):10,2:11)=35; if (n<100) x(ceil((100-n)/10),(2+mod(n,10)):11)=32; end
end
char(x)

테스트

입력 : 21

산출:

| __ || __ |
| / \ |
| | | |
| | ### | |
| | ###### | |
| | ###### | |
| \ ###### / |
| |
| |
| |
+ ---------- +

2

파이썬 2, 591 바이트

시간이 좀 걸렸고 아마도 더 많은 골프를 쳤을 것입니다.

큰 오류가 없기를 바랍니다.

r=[list(x)for x in ("|          |!"*10+"+----------+").split('!')]
s,t=[0]*4+[1]*2+[2]*10+[3]*4+[4]*16+[5]*6+[6]*22+[7]*8+[8]*29,[(4,2,2),(4,3,2),(3,4,4),(3,5,4),(2,6,6),(2,7,6),(1,8,8),(1,9,8),(0,9,10)]
a,b,c,d,e='|','/','\\','_','#'
def p(x,y,w):r[y][x]=w
def q(l):
 h,j,u=l
 p(5,0,a);p(6,0,a)
 for o in range(4-h):p(h+o+1,0,d);p(h+u-o,0,d)
 p(h,1,b);p(h+u+1,1,c)
 for o in range(j-2):p(h,o+2,a);p(h+u+1,o+2,a)
 p(h,j,c);p(h+u+1,j,b)
def w(i,l):
 h,j,u=l
 for o in range(i):x,y=o%u,o/u;p(h+x+1,j-y,e)
def f(i):
 n=s[i]
 l=t[n]
 if n<8:q(l)
 w(i,l)
 print "\n".join(["".join(x)for x in r])

예제 실행 :

f(34)

제공합니다 :

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