Tantangan ini didasarkan pada, dan berisi uji kasus dari, kursus pemrograman yang saya ikuti di Universitas Aalto. Materi digunakan dengan izin.
Dua setengah tahun yang lalu ada tantangan tentang spoonerisme dalam bahasa Inggris . Namun, dalam spoonerisme Finlandia jauh lebih rumit.
Spoonerisme dalam bahasa Finlandia
Dalam bahasa Finlandia, vokal adalah aeiouyäö
dan konsonan adalah bcdfghjklmnpqrstvwxz
. ( å
secara teknis bagian dari bahasa Finlandia, tetapi tidak dipertimbangkan di sini.)
Spoonerisme paling dasar hanya mengambil vokal pertama dari setiap kata, dan setiap konsonan yang mendahuluinya, dan menukar bagian-bagiannya:
henri kontinen -> konri hentinen
tarja halonen -> harja talonen
frakki kontti -> kokki frantti
ovi kello -> kevi ollo
Vokal panjang
Beberapa kata mengandung dua vokal berturut-turut yang sama. Dalam kasus tersebut, pasangan vokal harus ditukar dengan vokal pertama kata lain, memperpendek atau memperpanjang vokal agar panjangnya tetap sama.
haamu kontti -> koomu hantti
kisko kaappi -> kasko kiippi
Dalam hal dua vokal berturut-turut yang berbeda ini tidak berlaku:
hauva kontti -> kouva hantti
puoskari kontti -> kooskari puntti
Tiga atau lebih huruf berturut-turut yang sama tidak akan muncul di input.
Harmoni vokal
Bahasa Finlandia memiliki hal yang indah yang disebut harmoni vokal . Pada dasarnya, ini berarti bahwa vokal belakang aou
dan vokal depan äöy
tidak boleh muncul dengan kata yang sama.
Ketika swapping depan atau belakang vokal dalam kata, semua vokal dari jenis lain di sisa kata harus diubah agar sesuai dengan awal baru dari kata ( a <-> ä
, o <-> ö
, u <-> y
):
köyhä kontti -> kouha köntti
hauva läähättää -> läyvä haahattaa
e
dan i
netral dan dapat muncul dengan semua surat lainnya; menukarnya dengan kata tidak boleh menyebabkan perubahan pada kata lainnya.
Kasus khusus
Harmoni vokal tidak berlaku untuk beberapa kata, termasuk banyak kata pinjaman dan kata majemuk. Kasus-kasus ini tidak perlu ditangani "dengan benar".
Tantangan
Diberi dua kata, tampilkan kata-kata spoonerised.
Kata-kata input hanya akan berisi karakter a-z
dan äö
. Anda dapat memilih untuk menggunakan huruf besar atau kecil, tetapi pilihan Anda harus konsisten antara kata dan input / output.
I / O dapat dilakukan dalam format yang mudah . (Kata-kata harus dianggap string atau array karakter.)
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
Uji kasus
U+0308 COMBINING DIAERESIS
harus ditangani dengan U+00E4 LATIN SMALL LETTER A WITH DIAERESIS
baik-baik saja.)
e
dan i
netral, apakah fihus keksy
, huvu lehy
dan lesmä prihti
jawaban yang dapat diterima kehys fiksu
, levy huhu
dan prisma lehti
masing - masing?
puoskari äyskäri --> äöskäri puuskari --> puoskari ääskäri
.