Le linguiste distrait

10

Contexte

Votre ami, un linguiste, a enregistré et analysé quelques extraits de conversation simples dans différentes langues. Étant assez distraits, ils ont oublié dans quelle langue se trouvait chaque extrait. Vous devez les aider en créant un programme qui analyse les structures des phrases et exclut les cas impossibles.

Contribution

Votre entrée est une chaîne non vide contenant les caractères SVO, qui représentent le sujet , le verbe et l' objet . Il représente un extrait de conversation analysé par le linguiste.

Production

Votre tâche consiste à diviser la chaîne en phrases et à saisir un point .après chaque phrase. Une phrase contient soit un verbe, OU un verbe et un sujet, OU un verbe, un sujet et un objet. Cependant, vous ne savez pas quel ordre de mots la langue d'origine utilise; L'anglais utilise le sujet-verbe-objet , mais d'autres langues, comme le latin, utilisent le sujet-objet-verbe . En fait, les six permutations existent dans les langues naturelles, vous devez donc vérifier chacune d'elles.

Votre sortie doit contenir, dans une chaîne séparée par des sauts de ligne, chaque ordre de mots applicable, deux points :et la chaîne d'entrée divisée en phrases selon cet ordre. Si la chaîne ne peut pas être analysée dans un certain ordre de mots, la ligne correspondante doit être omise. L'ordre des lignes n'a pas d'importance et il est garanti qu'au moins un ordre de mots peut être analysé.

Exemple

Considérez l'entrée

VSVOSV

Dans l' VOSordre, le fragmenté peut être analysé en tant que VS.VOS.V., et dans l' SVOordre, il peut être analysé en tant que V.SVO.SV.. L'ordre OSVfonctionne également et la sortie complète est

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

Règles et notation

Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites. Les expressions régulières et tous les intégrés sont autorisés.

Cas de test

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
la source
Je savais que j'aurais dû implémenter une fonction de permutation de chaînes dans Japt il y a une heure ...
ETHproductions

Réponses:

1

Perl 5 - 104 octets

$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
la source
1

JavaScript (ES7), 172 octets

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

Pourrait probablement être joué plus loin. Suggestions bienvenues!

ETHproductions
la source