Ahli bahasa yang linglung

10

Latar Belakang

Teman Anda, ahli bahasa, telah merekam dan menganalisis beberapa cuplikan percakapan sederhana dalam berbagai bahasa. Karena cukup linglung, mereka lupa bahasa apa yang digunakan oleh setiap cuplikan. Anda harus membantu mereka dengan membuat program yang menganalisis struktur kalimat dan mengesampingkan kasus-kasus yang tidak mungkin.

Memasukkan

Input Anda adalah string kosong yang berisi karakter SVO, yang merupakan subjek untuk subjek , kata kerja , dan objek . Ini mewakili cuplikan percakapan yang dianalisis oleh ahli bahasa.

Keluaran

Tugas Anda adalah memecah string menjadi kalimat, dan memasukkan periode .setelah setiap kalimat. Sebuah kalimat mengandung kata kerja, ATAU kata kerja dan subjek, ATAU kata kerja, subjek dan objek. Namun, Anda tidak tahu urutan kata yang digunakan bahasa asli; Bahasa Inggris menggunakan subjek-kata kerja-objek , tetapi bahasa lain, seperti Latin, menggunakan subjek-objek-kata kerja . Faktanya, keenam permutasi ada dalam bahasa alami, jadi Anda harus memeriksa masing-masing.

Output Anda akan berisi, dalam string yang dipisahkan baris baru, setiap urutan kata yang berlaku, titik dua :, dan string input dipecah menjadi kalimat sesuai dengan urutan itu. Jika string tidak dapat diuraikan dalam beberapa urutan kata, baris yang sesuai harus dihilangkan. Urutan baris tidak masalah, dan dijamin bahwa setidaknya satu urutan kata dapat diuraikan.

Contoh

Pertimbangkan inputnya

VSVOSV

Dalam VOSurutan, potongan dapat diuraikan sebagai VS.VOS.V., dan dalam SVOurutan, dapat diurai sebagai V.SVO.SV.. Urutannya OSVjuga berfungsi, dan output penuhnya adalah

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

Aturan dan penilaian

Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan. Ekspresi reguler dan semua bawaan diizinkan.

Uji kasus

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
sumber
Saya tahu saya seharusnya menerapkan fitur permutasi string ke Japt satu jam yang lalu ...
ETHproduksi

Jawaban:

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

Mungkin bisa bermain golf lebih lanjut. Saran diterima!

Produksi ETH
sumber