Nieobecny językoznawca

10

tło

Twój przyjaciel, językoznawca, nagrał i przeanalizował kilka prostych fragmentów rozmowy w różnych językach. Będąc całkowicie roztargnionymi, zapomnieli, w jakim języku znajduje się każdy fragment kodu. Musisz im pomóc, tworząc program analizujący struktury zdań i wykluczający niemożliwe przypadki.

Wejście

Twoje dane wejściowe są niepustym ciągiem zawierającym znaki SVO, które oznaczają podmiot , czasownik i obiekt . Reprezentuje fragment konwersacji analizowany przez językoznawcę.

Wynik

Twoim zadaniem jest podzielenie łańcucha na zdania i wprowadzenie kropki .po każdym zdaniu. Zdanie zawiera albo czasownik, albo czasownik i temat, LUB czasownik, podmiot i przedmiot. Jednak nie wiesz, jakiej kolejności słów używa oryginalny język; Angielski używa podmiot-czasownik-przedmiot , ale inne języki, takie jak łacina, używają podmiot-czasownik-przedmiot . W rzeczywistości wszystkie sześć permutacji istnieje w językach naturalnych, więc musisz sprawdzić każdą z nich.

Twój wynik powinien zawierać, w ciągach rozdzielanych znakiem nowej linii, każdą odpowiednią kolejność słów, dwukropek :i ciąg wejściowy podzielony na zdania zgodnie z tą kolejnością. Jeśli ciąg nie może zostać przeanalizowany w jakiejś kolejności słów, odpowiedni wiersz należy pominąć. Kolejność wierszy nie ma znaczenia i gwarantuje się, że można przeanalizować co najmniej jedną kolejność słów.

Przykład

Rozważ dane wejściowe

VSVOSV

W VOSkolejności wycinek można przeanalizować jako VS.VOS.V., a w SVOkolejności - jako V.SVO.SV.. Kolejność OSVrównież działa, a pełna moc wyjściowa to

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

Zasady i punktacja

Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone. Wyrażenia regularne i wszystkie wbudowane są dozwolone.

Przypadki testowe

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
źródło
Wiedziałem, że powinienem zaimplementować w Japt funkcję permutacji łańcuchów godzinę temu ...
ETHproductions

Odpowiedzi:

1

Perl 5–104 bajtów

$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
źródło
1

JavaScript (ES7), 172 bajty

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

Prawdopodobnie można by dalej grać w golfa. Sugestie mile widziane!

ETHprodukcje
źródło