心不在a的语言学家


10

背景

您的朋友是一名语言学家,已记录并分析了各种语言的一些简单对话片段。由于心不在a,他们忘记了每个摘录使用哪种语言。您必须通过创建一个程序来分析句子结构并排除可能出现的情况,来帮助他们。

输入值

您的输入是一个非空字符串SVO,其中包含字符,分别代表subjectverbobject。它代表语言学家分析的对话摘要。

输出量

您的任务是将字符串分成多个句子,并.在每个句子后输入句点。一个句子包含一个动词,或者一个动词和一个主语,或者一个动词,一个主语和一个宾语。但是,您不知道原始语言使用的单词顺序。英语使用subject-verb-object,但是其他语言(例如拉丁语)使用subject-object-verb。实际上,所有六个排列都以自然语言存在,因此您必须检查每个排列。

您的输出应以换行符分隔的字符串包含每个适用的单词顺序,冒号:和根据该顺序分成句子的输入字符串。如果无法按某些单词顺序解析字符串,则应省略相应的行。行的顺序无关紧要,并且保证至少可以解析一个单词顺序。

考虑输入

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 2016年

Answers:


1

Perl 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

JavaScript(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`
`

可能会打得更远。建议欢迎!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.