결석 한 언어 학자


10

배경

언어학자인 친구가 간단한 대화 스 니펫을 여러 언어로 기록하고 분석했습니다. 그들은 결석 한 마음으로 각 스 니펫의 언어를 잊어 버렸습니다. 문장 구조를 분석하고 불가능한 경우를 배제하는 프로그램을 만들어서 도움을 주어야합니다.

입력

귀하의 입력은 문자가 포함 된 비어 있지 않은 문자열 SVO에 대해 서, 주제 , 동사오브젝트 . 언어학자가 분석 한 대화 스 니펫을 나타냅니다.

산출

당신의 임무는 문자열을 문장으로 나누고 .각 문장 뒤에 마침표를 입력하는 것 입니다. 문장에는 동사, OR 동사 및 주제, 또는 동사, 주제 및 객체가 포함됩니다. 그러나 원래 언어가 어떤 단어 순서를 사용하는지 모릅니다. 영어는 subject-verb-object 를 사용하지만 라틴어와 같은 다른 언어는 subject-object-verb를 사용 합니다. 실제로 6 개의 순열은 모두 자연 언어로 존재하므로 각각을 확인해야합니다.

출력은 개행으로 구분 된 문자열에 적용 가능한 각 단어 순서, 콜론 :및 입력 문자열을 해당 순서에 따라 문장으로 나눕니다. 문자열을 단어 순서로 파싱 할 수 없으면 해당 행을 생략해야합니다. 행 순서는 중요하지 않으며 적어도 하나의 단어 순서를 구문 분석 할 수 있습니다.

입력을 고려하십시오

VSVOSV

에서 VOS위해 상기 잘린 같이 분석 될 수있는 VS.VOS.V., 상기의 SVO순서로, 이는로서 해석 될 수있다 V.SVO.SV.. 순서도 OSV작동하며 전체 출력은

VOS:VS.VOS.V.
SVO:V.SVO.SV.
OSV:V.SV.OSV.

규칙과 득점

전체 프로그램 또는 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점이 허용되지 않습니다. 정규식과 모든 내장 기능이 허용됩니다.

테스트 사례

Input:
V
Output:
VSO:V.
VOS:V.
SVO:V.
OVS:V.
SOV:V.
OSV:V.

Input:
SVV
Output:
SVO:SV.V.
SOV:SV.V.
OSV:SV.V.

Input:
VSVOV
Output:
SVO:V.SVO.V.

Input:
VSOVS
Output:
VSO:VSO.VS.
OVS:VS.OVS.

Input:
SVOSV
Output:
SVO:SVO.SV.
OSV:SV.OSV.

Input:
VSVOSV
Output:
VOS:VS.VOS.V.
SVO:V.SVO.SV.
OSV:V.SV.OSV.

Input:
VSVVSOVSV
Output:
VSO:VS.V.VSO.VS.V.
OVS:VS.V.VS.OVS.V.
SOV:V.SV.V.SOV.SV.

Input:
SVVSVSOVSVV
Output:
SOV:SV.V.SV.SOV.SV.V.

Input:
VSOVSVSOVSVVS
Output:
VSO:VSO.VS.VSO.VS.V.VS.
OVS:VS.OVS.VS.OVS.V.VS.

한 시간 전에 Japt에 문자열 순열 기능을 구현해야한다는 것을 알았습니다 ...
ETHproductions

답변:


1

펄 5-104 바이트

$a=<>;for(qw/VSO VOS SVO OVS SOV OSV/){$s=s/O//r;print"$_:".$a=~s/($_|$s|V)/$1./gr if$a=~/^($_|$s|V)*$/}

1

자바 스크립트 (ES7), 172 바이트

x=>[for(i of"V(SO?)?0V(O?S)?0(SVO?|V)0(O?VS|V)0(SO?)?V0(O?S)?V".split(0))if((y=x.match(RegExp(i,"g"))).join``==x)i.match(/\w/g).slice(0,3).join``+":"+y.join`.`+"."].join`
`

아마도 더 골프를 칠 수있을 것입니다. 제안을 환영합니다!

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