advacado에 대한 도전 만드는 데 26 분 (피트

영감을받은 . 이 도전을 할 때 아보카도가 피해를 입지 않았습니다.

안녕하세요, 아보카도 juic에 도움이 필요하므로 juic avocad의 기간을 알려주는 프로그램이 필요합니다.

이 ASCII 아트 아보카도를 관찰하십시오.

    ######
   #      #
   # #### #
  #  # p# #
  ## #### #
   #      #
    ######

이 아보카도는 #s 의 외관 (구체적 #으로 각 라인의 첫 번째 및 마지막 시퀀스 )과 구덩이 ( #아보카도 외부에 닿지 않는 아보카도의 모양 )로 구성됩니다.

이 ASCII 아트 아보카도에 대한 엄격한 실험을 통해 다음을 발견했습니다.

avocado juice in fluid ounces = number of spaces inside avocado but outside pit (the pit is marked with a p in the example) + 2 * number of spaces inside pit

time to juice avocado in minutes = 13 * number of spaces inside pit

예를 들어,이 아보카도는 주스를 만드는 데 26 분 (피트 내부 2 칸 * 13 분)이 걸리고 23 개 (아보카도 내부는 19 칸이지만 구덩이 외부는 2 * 2 칸)의 주스를 ​​줄입니다.

도전

공백과 공백으로 구성된 위와 같은 ASCII 아트 아보카도 를 정확히 하나만 입력 #하면 주스를 만드는 데 걸리는 시간 (분)과 어떤 순서로든 주스를 생산할 수 있습니다.

입력 아보카도에는 항상 정확히 하나의 구덩이가 있고 아보카도와 구덩이는 항상 닫혀 있다고 가정 할 수 있습니다. 구덩이와 아보카도는 항상 연결되며 구덩이의 모든 부분도 연결됩니다. 아보카도와 구덩이는 항상 볼록합니다. 아보카도 외부는 임의로 두껍습니다.

샘플 입력 및 출력

    ######
   #      #
   # #### #
  #  #  # # -> 26 23
  ## #### #
   #      #
    ######


   #######
  #       #
  #  ###   ##
  #  #  #   # -> 26 35
  #   ##   #
  #        #
  ##########

입니다 바이트의 승리에 너무 짧은 코드.



답변

Pyth, 59 51 바이트

*Ksm/.s.s.sd\ \#\ \ fq4l:T"#+"4.z13+-/s.sR\ .zdK*2K

여기 사용해보십시오!

advacado (완전히 영어로 올바른)를 juic하는 시간과 다음 줄에 juic의 양을 출력합니다.

설명

코드-개요

* Ksm / .sssd \ \ # \ \ fq4l : T "# +"4.z13 +-/ s.sR \ .zdK * 2K # .z = 모든 입력 라인 목록

                    fq4l : T "# +"4.z # 피트 라인 가져 오기
   m / .sssd \ \ # \ \ # 피트 라인을 공백 ​​양에 매핑
 Ks # 피트 공간의 양을 합산하고 K에 할당
* 13 # juic 시간을 인쇄하십시오
                                     /s.sR \ .zd # advacado의 모든 공백을 계산
                                    -K # 피트 크기를 빼기
                                   + * 2K # 나머지 양을 계산하여 인쇄


크기 계산 부분에 대한 자세한 설명은 아래를 참조하십시오.

Advacado 크기 얻기

이걸 보자 :

    ######
   # #
   # #### #
  # # # #
  ## #### #
   # #
    ######

먼저 선행 및 후행 공백이 제거됩니다. 그 후 우리는 모든 것을 한 줄로 감싸서이 문자열을 만듭니다 :

#######      ## #### ##  #  # ### #### ##      #######

여기에는 advacado의 모든 공백이 포함되어 있으므로 계산해야합니다 (advacado는 항상 볼록하므로 모든 유효한 입력에 작동합니다). 이 숫자에는 여전히 구덩이에 공백이 포함되어 있지만 juic 양 계산에는 구덩이 공간이없는 과일의 공간 만 필요합니다. 그래서 우리는 그것들도 계산해야합니다.

이에 대한 코드가 자세히 설명되어 있습니다.

/s.sR \ .zd # .z = 모든 입력 줄 목록

  모든 입력 라인에서 .sR \ .z # 스트립 간격
 s # 모든 줄을 연결
/ d # 모든 공간을 센다

피트 크기 얻기

조금 까다 롭습니다. 먼저 구덩이 크기에 영향을 미치지 않는 선을 제거합니다. 이것은 4 그룹 미만의 해시 그룹을 가진 모든 줄을 필터링하여 수행됩니다 (정규 표현식을 사용 #+하고 일치 항목을 계산). 위의 예에서 한 줄만이 프로세스에서 유지됩니다.

  #  #--# #

-여기에 표시된 공간 은 계산해야하는 공간 입니다. 따라서 공백을 제거한 다음 해시 한 다음 다시 공백을 제거하면 다음과 같이됩니다.

#  #

거기에서 우리는 단지 공간을 세어야합니다. 필터링 프로세스에서 살아남은 모든 라인에 대해 모든 작업을 수행하고 모든 것을 합산하면 완료됩니다. 나머지는 사소한 수학입니다.

이에 대한 코드가 자세히 설명되어 있습니다.

sm / .sssd \ \ # \ \ fq4l : T "# +"4.z # .z = 모든 입력 줄 목록

                  f .z # 입력 필터링
                     l : T "# +"4 # 정규식`# +`와 일치하는 길이
                   q4 # 4 개의 해시 그룹이 피트 라인 인 경우
 m # 피트 라인을 매핑합니다.
  / \ # 공백의 발생 ..
   .sssd \ \ # \ # ... 제거 된 피트 라인 (위 설명 참조)
# 구덩이의 모든 공간을 합산


답변

망막 , 70

  • @FryAmTheEggman 및 @randomra 덕분에 25 바이트 절약
T`i` (? <= # + # +) * (? = # + + #)
티`F` # + #
나는
13 $ * iff
((i) | (f) | \ W) +
$ # 2 $ # 3

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


답변

파이썬, 141 119 바이트

import sys
s=str.strip;l=len;o=i=0
for x in sys.stdin:x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
print o+2*i,13*i