advacado에 대한 도전


16

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

안녕하세요, 아보카도 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
  #   ##   #
  #        #
  ##########

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



3
@Mego 나는 채팅에서 사람들과 이야기했고 우리는 그것이 아보카도 구덩이 때문에 충분히 다르다고 결정했습니다.
스파게티

3
나는 아직도 그것이 속담이라고 생각합니다.
Mego

1
@DigitalTrauma 수정되었습니다.
스파게티

1
유효한 입력 세트가 무엇인지 여전히 명확하지 않은 것 같습니다.
feersum

답변:


6

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 \ \ # \ # ... 제거 된 피트 라인 (위 설명 참조)
# 구덩이의 모든 공간을 합산


5

망막 , 70

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

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


1
몰라, 그것은 도움이됩니다하지만 만약 내가 가지고 90 바이트를 사용하여 $*... 아직도 정말 golfable하지만 느낌 ...
FryAmTheEggman

2
@FryAmTheEggman Ohh, 리터럴을 $*_?로 사용할 수 있습니다 . 좋은 데요 나는 70 바이트 를 얻을 수 있었다 .
randomra

1
@randomra 네, 실제로 "토큰"을 사용합니다. 아주 좋습니다! 비슷한 구성표를 만들려고했지만 추가 구문 분석을 계속해야하므로 재사용 f이 매우 영리합니다! 올바른 "인수" $*는 토큰이 아닌 캐릭터 일 수 있지만 미래를위한 또 다른 대체품이 될 수 는 있지만 너무 나쁩니다 . : 0
FryAmTheEggman

@randomra 매우 시원합니다-감사합니다!
Digital Trauma

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

1
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 당신이 정의하는 경우 ss=str.strip, 루프 본문이 될 수 있습니다 x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#')). 또한 마지막 줄에는 작동하지 않는 공간이 있습니다.
Dennis

아아 나는 당신이 그것을 할 수 있다는 것을 몰랐습니다, 감사합니다 :)
mtp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.