Der zerstreute Linguist


10

Hintergrund

Ihr Freund, ein Linguist, hat einige einfache Konversationsausschnitte in verschiedenen Sprachen aufgezeichnet und analysiert. Da sie ziemlich abwesend sind, haben sie vergessen, in welcher Sprache sich jedes Snippet befand. Sie müssen ihnen helfen, indem Sie ein Programm erstellen, das die Satzstrukturen analysiert und unmögliche Fälle ausschließt.

Eingang

Ihre Eingabe ist eine nicht leere Zeichenfolge, die die Zeichen enthält SVO, die für Subjekt , Verb und Objekt stehen . Es handelt sich um einen vom Sprachwissenschaftler analysierten Konversationsausschnitt.

Ausgabe

Ihre Aufgabe ist es, die Zeichenfolge in Sätze zu zerlegen und .nach jedem Satz einen Punkt einzugeben . Ein Satz enthält entweder ein Verb ODER ein Verb und ein Subjekt ODER ein Verb, ein Subjekt und ein Objekt. Sie wissen jedoch nicht, welche Wortreihenfolge die Originalsprache verwendet. Englisch verwendet Subjekt-Verb-Objekt , aber andere Sprachen, wie Latein, verwenden Subjekt-Objekt-Verb . Tatsächlich existieren alle sechs Permutationen in natürlichen Sprachen, daher müssen Sie jede von ihnen überprüfen.

Ihre Ausgabe muss in einer durch Zeilenumbrüche getrennten Zeichenfolge jede zutreffende Wortreihenfolge, einen Doppelpunkt :und die Eingabezeichenfolge enthalten, die gemäß dieser Reihenfolge in Sätze unterteilt sind. Wenn die Zeichenfolge nicht in einer Wortreihenfolge analysiert werden kann, wird die entsprechende Zeile weggelassen. Die Reihenfolge der Zeilen spielt keine Rolle, und es wird garantiert, dass mindestens eine Wortreihenfolge analysiert werden kann.

Beispiel

Betrachten Sie die Eingabe

VSVOSV

In der VOSReihenfolge kann der Ausschnitt als analysiert werden VS.VOS.V., und in der SVOReihenfolge kann er als analysiert werden V.SVO.SV.. Die Reihenfolge OSVfunktioniert auch und die volle Ausgabe ist

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

Regeln und Wertung

Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig. Reguläre Ausdrücke und alle integrierten Funktionen sind zulässig.

Testfälle

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.

Ich wusste, ich hätte vor einer Stunde eine String-Permutationsfunktion in Japt implementieren sollen ...
ETHproductions

Antworten:


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)*$/}

1

JavaScript (ES7), 172 Byte

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

Könnte wahrscheinlich weiter Golf gespielt werden. Vorschläge willkommen!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.