O linguista distraído

10

fundo

Seu amigo, um linguista, gravou e analisou alguns trechos de conversas simples em vários idiomas. Sendo bastante distraídos, eles esqueceram em qual idioma cada trecho estava. Você deve ajudá-los criando um programa que analise as estruturas das frases e exclua casos impossíveis.

Entrada

Sua entrada é uma sequência não vazia que contém os caracteres SVO, que representam sujeito , verbo e objeto . Representa um trecho de conversa analisado pelo linguista.

Resultado

Sua tarefa é dividir a sequência em frases e inserir um ponto .após cada frase. Uma frase contém um verbo, OU um verbo e um assunto, OU um verbo, um assunto e um objeto. No entanto, você não sabe qual ordem de palavras o idioma original usa; O inglês usa sujeito-verbo-objeto , mas outras línguas, como o latim, usam sujeito-objeto-verbo . De fato, todas as seis permutações existem em idiomas naturais, portanto, você deve verificar cada uma delas.

Sua saída deve conter, em uma sequência separada por nova linha, cada ordem de palavras aplicável, dois pontos :e a sequência de entrada dividida em frases de acordo com essa ordem. Se a sequência não puder ser analisada em alguma ordem de palavras, a linha correspondente será omitida. A ordem das linhas não importa e é garantido que pelo menos uma ordem de palavras possa ser analisada.

Exemplo

Considere a entrada

VSVOSV

Na VOSordem, o recorte pode ser analisado como VS.VOS.V.e, na SVOordem, pode ser analisado como V.SVO.SV.. O pedido OSVtambém funciona e a saída total é

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

Regras e pontuação

Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas. Expressões regulares e todos os incorporados são permitidos.

Casos de teste

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
fonte
Eu sabia que deveria ter implementado um recurso de permutação de cadeia de caracteres em Japt há uma hora ...
ETHproductions

Respostas:

1

Perl 5 - 104 bytes

$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
fonte
1

JavaScript (ES7), 172 bytes

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

Provavelmente poderia ser jogado ainda mais. Sugestões são bem-vindas!

ETHproductions
fonte