Il linguista distratto


10

sfondo

Il tuo amico, un linguista, ha registrato e analizzato alcuni semplici frammenti di conversazione in varie lingue. Essendo piuttosto distratti, hanno dimenticato la lingua in cui si trovava ogni frammento. Devi aiutarli creando un programma che analizzi le strutture delle frasi ed escluda casi impossibili.

Ingresso

L'input è una stringa non vuota contenente i caratteri SVO, che rappresentano soggetto , verbo e oggetto . Rappresenta uno snippet di conversazione analizzato dal linguista.

Produzione

Il tuo compito è dividere la stringa in frasi e inserire un punto .dopo ogni frase. Una frase contiene un verbo, O un verbo e un soggetto, O un verbo, un soggetto e un oggetto. Tuttavia, non sai quale ordine di parole utilizza la lingua originale; L'inglese usa soggetto-verbo-oggetto , ma altre lingue, come il latino, usano soggetto-verbo-oggetto . In effetti, tutte e sei le permutazioni esistono nei linguaggi naturali, quindi è necessario verificarne ognuna.

L'output deve contenere, in una stringa separata da una nuova riga, ogni ordine di parole applicabile, due punti :e la stringa di input suddivisa in frasi in base a tale ordine. Se la stringa non può essere analizzata in un certo ordine di parole, la riga corrispondente deve essere omessa. L'ordine delle righe non ha importanza ed è garantito che almeno un ordine di parole possa essere analizzato.

Esempio

Considera l'input

VSVOSV

In VOSordine, lo snipped può essere analizzato come VS.VOS.V., e in SVOordine, esso può essere analizzato come V.SVO.SV.. Anche l'ordine OSVfunziona e l'output completo è

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

Regole e punteggio

È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard. Sono consentite espressioni regolari e tutti i built-in.

Casi 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.

Sapevo che avrei dovuto implementare una funzione di permutazione delle stringhe in Japt un'ora fa ...
ETHproductions

Risposte:


1

Perl 5 - 104 byte

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

Probabilmente potrebbe essere ulteriormente giocato a golf. Suggerimenti benvenuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.