Рассеянный лингвист

10

Фон

Ваш друг, лингвист, записал и проанализировал несколько простых фрагментов разговора на разных языках. Будучи довольно рассеянными, они забыли, на каком языке был каждый фрагмент. Вы должны помочь им, создав программу, которая анализирует структуры предложений и исключает невозможные случаи.

вход

Ваш ввод - непустая строка, содержащая символы SVO, обозначающие тему , глагол и объект . Он представляет собой фрагмент разговора, проанализированный лингвистом.

Вывод

Ваша задача - разбить строку на предложения и ввести точку .после каждого предложения. Предложение содержит либо глагол, ИЛИ глагол и предмет, ИЛИ глагол, предмет и объект. Однако вы не знаете, какой порядок слов использует исходный язык; Английский язык использует субъект-глагол-объект , но другие языки, такие как латынь, используют субъект-глагол-объект . На самом деле все шесть перестановок существуют на естественных языках, поэтому вы должны проверить каждую из них.

Ваш вывод должен содержать в строке, разделенной символом новой строки, каждый применимый порядок слов, двоеточие :и строку ввода, разбитую на предложения в соответствии с этим порядком. Если строка не может быть проанализирована в некотором порядке слов, соответствующая строка должна быть опущена. Порядок строк не имеет значения, и гарантируется, что хотя бы один порядок слов может быть проанализирован.

пример

Рассмотрим вход

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.
Zgarb
источник
Я знал, что должен был внедрить функцию перестановки строк в Japt час назад ...
ETHproductions

Ответы:

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)*$/}
faubi
источник
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`
`

Возможно, будет в гольф дальше. Предложения приветствуются!

ETHproductions
источник