영감을받은 이 . 이 도전을 할 때 아보카도가 피해를 입지 않았습니다.
안녕하세요, 아보카도 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