몇 개의 지미가 맞을 수 있습니까?


29

에서 이 간단하지만 재미있는 도전 , 당신은 지미가 자신의 플랫폼으로 떨어질 것입니다 있는지 확인했다. 지미 세 신체 부위를 갖고 /, o그리고 \이와 같이 배치

/o\

플랫폼은로 표시됩니다 -. 지미는 플랫폼 바로 위에 있지 않은 두 개 이상의 신체 부위가있는 경우 플랫폼에서 떨어집니다.

몇 가지 예 :

   /o\
- -------

지미는 모든 신체 부위가 위에 있기 때문에 균형을 잡을 것 -입니다.

   /o\
    ------   ---

지미는 두 신체 부위가 -s 이상이기 때문에 균형을 잡습니다 .

 /o\
-- ----  --

지미는 두 플랫폼으로 나뉘어도 균형을 잡을 것입니다

  /o\
   -

두 신체 부위가 플랫폼 위에 있지 않기 때문에 Jimmy는 균형을 맞출 수 없습니다.


당신의 임무는 플랫폼을 -s와 s 만을 포함하는 길이가 긴 컨테이너로 가져 가고 플랫폼 에 놓을 수있는 지미 수를 출력하여 아무도 떨어지지 않고 아무것도하지 않는 프로그램을 작성하는 것입니다. 중복. 지미는 줄의 시작 부분이나 줄 끝의 오른쪽에 신체 부위 중 하나가있을 수 있습니다.

이것은 이므로 답은 바이트 수로 목표 점수가됩니다.

테스트 사례

입력

-  -  -

- -
--
-- --
----
- -- --
------- -

각 출력

0
0
1
1
2
2
2
3

답변:


15

자바 스크립트 (ES6),  45 41  40 바이트

@Shaggy 덕분에 4 바이트 절약

s=>(0+s+0).split(/.--|-.-|--./).length-1

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



7
@Shaggy 감사합니다! 나는 뭔가 잘못되었다는 것을 알고 있었지만 그동안 아내를 슈퍼 마리오 갤럭시 레벨에서 도와야했습니다 ... 그리고 그것은 깨진 플랫폼에 관한 문제 이기도 했습니다. : p
Arnauld

2
---내 포트에서 작업하고 필요하지 않은 실현 될 때까지, 하나 저와 잘 앉아되지 않았습니다. 내가 여기에서 하루라고 부르고, 캔을 들고 SMG를 던질 것이라고 생각하십시오.
얽히고 설킨

그리고 다른 모든 답변은 동일한 정규 표현식을 사용하고 있습니다.
Cœur

8

파이썬 2 , 53 바이트

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

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

Arnauld의 정규식을 기반으로 합니다. 겹치지 않는 길이가 3 인 하위 문자열을 2 개 이상으로 탐욕스럽게 검색합니다 -. 트릭은 `s`입력 문자열을 따옴표로 묶어 패딩으로 채워서 Jimmys가 양쪽 끝에서 끊을 수있는 공간을 남겨 둡니다.

/o\/o\
'----'

파이썬 2 , 57 바이트

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

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

이미 따옴표로 묶인 입력의 치즈 I / O 형식이 필요합니다. False0에 대한 출력 .

지미가 지미를 잡을 수 있으면 처음 세 문자 위에 지미를 배치하거나 첫 번째 문자를 삭제하여 각 지미를 허용되는 가장 왼쪽 위치에 배치하는 재귀 함수입니다. 귀여운 트릭인지 확인하는 s[:3]두 가지 이상을 포함 -수행하여 '--'in s[:3]*2두 복사본 연접하는 s[:3]인접하는 2 및 점검 -.



3

Japt , 16 바이트

Arnauld의 독창적 인 JS 솔루션을 기반으로합니다. 입력의 양쪽에 필요한 패딩을 얻기 위해 몇 가지 다른 방법을 시도했지만 모두 같은 길이로 들어갔습니다. 여전히 더 짧은 방법을 찾고 있습니다 ...

ûUÊÄÄ è".--|-."ê

그것을 테스트

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

엑셀, 96 바이트

A1= 플랫폼. 배열 수식으로 입력 Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E , 16 바이트

ðì‚ε3ôʒ'-¢2@}g}à

확실히 골프를 칠 수 있습니다. 때로는 모든 종류의 정규식이없는 05AB1E를 사용할 때 도전에 모든 정규식 답변을 보는 것이 성가시다. ;)

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

자바 8, 41 바이트

s->(0+s+10).split(".--|--.|-.-").length-1

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

포트 @Arnauld 의 자바 스크립트 대답 것을 제외하고는, +0+10등의 수정 테스트 케이스에 ----. String#split내장 된 Java는 기본적으로 후행 빈 문자열을 제거 하기 때문에 필요합니다 . 내장 매개 변수에 추가 매개 변수를split 추가하여이를 변경할 수 있습니다 ( 0기본적 split으로 단일 문자열 인수로 -builtin에 있음). 문서에서이 추가 매개 변수의 사용법을 인용하려면 다음을 수행하십시오.

limit 매개 변수는 패턴이 적용되는 횟수를 제어하므로 결과 배열의 길이에 영향을줍니다.
한도되고 0보다 큰 후 패턴은 기껏 적용될1 시간, 배열의 길이는 배열의 마지막 항목에는 마지막으로 일치 한 구분자를 초과하는 모든 입력이 포함됩니다.
만약양수아닌 경우 패턴은 가능한 한 여러 번 적용되며 배열의 길이는 얼마든지 가능합니다.
만약되고 제로는 그 패턴이 가능한 한 많이 적용되어, 어레이는 임의의 길이를 가질 수 있고, 후행 빈 문자열을 삭제한다 .

이 때문에 일반적으로 모든 후행 빈 문자열 .split("...",-1)을 유지하는 데 사용 되며이 답변에도 사용할 수 있습니다 ( 온라인 시도 ). 이 경우를 변경하면 을 통해 2 바이트 가 절약 됩니다. :)+0+10,-1



0

, 25 바이트

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

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

Pθ↖

커서를 움직이지 않고 플랫폼을 인쇄 한 다음 커서를 첫 번째 잠재적 지미 위치로 커서를 위아래로 움직입니다.

Fθ

플랫폼 위치만큼 많은 Jimmies를 찾으십시오.

¿›№KM-¹

이 위치에 둘 이상의 플랫폼이 있는지 확인하십시오.

«⊞υω

그렇다면 유효한 지미 위치를 확인하십시오 ...

M³→»

... 그리고 Jimmies가 겹치지 않도록 오른쪽으로 3자를 이동하십시오.

그렇지 않으면 다음 잠재적 지미 위치는 오른쪽의 한 문자입니다.

⎚ILυ

플랫폼을 지우고 발견 된 위치 수를 출력하십시오.



0

느릅 나무 0.19, 108 바이트

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

Arnauld 의 JavaScript 답변 의 정규식을 기반으로합니다. . 모든 테스트 사례를 여기에서 확인 하십시오. .

정규 표현식이없는 대체 솔루션으로 171 바이트 에서 크게 길어집니다 .

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

여기에서 모든 테스트 사례를 확인 하십시오 .

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