Лінгвіст-розвідник


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.

Я знав, що я повинен був реалізувати функцію перестановки струн у 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)*$/}

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

Можливо, можна було б пограти в гольф далі. Пропозиції Ласкаво просимо!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.