주어진 문자열 X와 Y는 X가 Y의 서브 시퀀스 인지 여부를 판별합니다 . 빈 문자열은 모든 문자열의 서브 시퀀스로 간주됩니다. (예 ''
와 'anna'
의 서브 시퀀스이다 'banana'
.)
입력
- X, 대소 문자를 구분하는 영숫자 문자열
- 대소 문자를 구분하는 영숫자 문자열 인 Y
산출
- X가 Y의 하위 시퀀스인지 여부를 올바르게 나타내는 True 또는 False (또는 동등한 항목)
I / O 예제
X Y output
'' 'z00' True
'z00' 'z00' True
'z00' '00z0' False
'aa' 'anna' True
'anna' 'banana' True
'Anna' 'banana' False
기준
- 소스 코드의 바이트 수에 따라 가장 짧은 프로그램이 승리합니다.
예제 프로그램
- 이 관련 게시물 에 적용 할 수있는 여러 프로그램이 있습니다 .
답변
Perl 5 , 17 바이트 (+1?), 전체 프로그램
s//.*/g;$_=<>=~$_
에서와 같이 p
펄 인터프리터에 플래그를 사용하여 호출하십시오 perl -pe 's//.*/g;$_=<>=~$_'
. 당 이 문제가 처음 게시 된 기존의 채점 규칙 ,이 플래그를 하나 추가 바이트를 요한다. 에서 최근 규칙 , AFAICT, 그것은 무료로 할 수있다.
어느 쪽이든, 입력 문자열은 stdin에서 별도의 줄 바꿈으로 끝나는 줄에 제공되어야합니다. 1
첫 번째 입력 문자열이 두 번째의 하위 문자열이거나 그렇지 않은 경우 아무것도 출력되지 않습니다 (stdout) .
참고 모두 입력 라인 끝에서 줄 바꿈이 있어야합니다, 또는 프로그램이 제대로 작동하지 않습니다. 또는l
펄이 개행을 제거하도록 명령 행 플래그를 호출에 . 유효한 점수 규칙에 따라 1 바이트의 추가 비용이 들거나 들지 않을 수 있습니다. 이 플래그를 사용하면 출력에 개행이 추가됩니다.
원본 버전 (스 니펫, 18 바이트 / 문자)
$x=~s//.*/g,$y=~$x
입력 값은 변수에 제공 $x
되며 $y
결과는 스칼라 컨텍스트의 표현식 값입니다. 참고 $x
과정에서 수정됩니다. (예, $_
대신 사용 하는 것을 알고 있습니다.$x
하면 네 개의 문자를 절약 할 수 있지만 약간 치즈 맛이 나는 스 니펫에서 그렇게하는 것이 좋습니다.)
어떻게 작동합니까?
첫 번째 부분 은의 각 문자 사이 $x=~s//.*/g
에 문자열을 삽입합니다 . 두 번째 부분 은 정규 표현식으로 취급 하고 일치 합니다. Perl 정규식에서는 0 개 이상의 임의의 문자를 일치시키는 반면 모든 영숫자는 편리하게 일치합니다..*
$x
$y=~$x
$x
$y
.*
답변
루비, 32 자
s=->x,y{y=~/#{[*x.chars]*".*"}/}
이 솔루션은 하위 시퀀스가 아닌 nil
경우 숫자를 반환하고 그렇지 않으면 숫자를 반환합니다 (예 : 및 루비에 해당 ). 예 :x
y
false
true
p s['','z00'] # => 0 (i.e. true)
p s['z00','z00'] # => 0 (i.e. true)
p s['z00','00z0'] # => nil (i.e. false)
p s['anna','banana'] # => 1 (i.e. true)
p s['Anna','banana'] # => nil (i.e. false)
답변
하스켈, 51 37
h@(f:l)%(g:m)=f==g&&l%m||h%m;x%y=x<=y
실질적인 개선을위한 Hammar에게 감사드립니다. 이제는 infix 함수이지만, 그렇게하지 않아야 할 이유가없는 것 같습니다.
데모:
GHCi> :{
GHCi| zipWith (%) ["" , "z00", "z00" , "anna" , "Anna"]
GHCi| ["z00", "z00", "00z0", "banana", "banana"]
GHCi| :}
[True,True,False,True,False]
답변
파이썬 (48 자)
import re;s=lambda x,y:re.search('.*'.join(x),y)
Howard의 Ruby 답변과 동일한 접근 방식입니다. 파이썬이 정규식 패키지와 “verbose”를 가져와야한다는 점이 너무 나쁩니다 lambda
. 🙂
답변
파이썬, 59 자
def s(x,y):
for c in y:
if x:x=x[c==x[0]:]
return x==""
내 대답이 파이썬으로 더 잘 표현 될 것이라고 생각했습니다.
편집 : 입술의 제안을 추가했습니다.
답변
GolfScript (22 자)
X[0]+Y{1$(@={\}*;}/0=!
입력은 두 개의 미리 정의 된 변수로 간주된다고 가정 X
하고 Y
그 GolfScript에서 다소 특이하지만,. 잎 1
사실 또는 0
스택에 거짓합니다.