El lingüista despistado

10

Antecedentes

Su amigo, un lingüista, ha grabado y analizado algunos fragmentos de conversación simples en varios idiomas. Al ser bastante distraídos, han olvidado en qué idioma estaba cada fragmento. Debes ayudarlos creando un programa que analice las estructuras de las oraciones y descarte casos imposibles.

Entrada

Su entrada es una cadena no vacía que contiene los caracteres SVO, que representan sujeto , verbo y objeto . Representa un fragmento de conversación analizado por el lingüista.

Salida

Su tarea es dividir la cadena en oraciones e ingresar un punto .después de cada oración. Una oración contiene un verbo, O un verbo y un sujeto, O un verbo, un sujeto y un objeto. Sin embargo, no sabe qué orden de palabras usa el idioma original; El inglés usa subject-verb-object , pero otros idiomas, como el latín, usan subject-object-verb . De hecho, las seis permutaciones existen en idiomas naturales, por lo que debe verificar cada una de ellas.

Su salida contendrá, en una cadena separada por una nueva línea, cada orden de palabras aplicable, dos puntos :y la cadena de entrada dividida en oraciones de acuerdo con ese orden. Si la cadena no se puede analizar en algún orden de palabras, se omitirá la línea correspondiente. El orden de las líneas no importa, y se garantiza que se puede analizar al menos un orden de palabras.

Ejemplo

Considere la entrada

VSVOSV

En el VOSorden, el recortado se puede analizar como VS.VOS.V., y en el SVOorden, se puede analizar como V.SVO.SV.. El orden OSVtambién funciona, y la salida completa es

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

Reglas y puntaje

Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. Se permiten expresiones regulares y todos los elementos integrados.

Casos de prueba

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
fuente
Sabía que debería haber implementado una función de permutación de cadenas en Japt hace una hora ...
ETHproductions

Respuestas:

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

Probablemente podría jugar más golf. Sugerencias bienvenidas!

ETHproductions
fuente