Tantangan
Tulis fungsi yang mengambil argumen yang merupakan kata kerja, dan mengembalikan bentuk lampau kata kerja. (Asumsikan bahwa kata kerjanya teratur)
Waktu lampau
Catatan: anggap y bukan konsonan atau vokal.
Biasanya, hanya menambahkan ed
setelah akhir kata kerja membuat bentuk lampau kata kerja.
Contoh: jump
→ jumped
, ask
→asked
Namun, ada aturan lain.
Jika karakter terakhir dari kata kerja yang diberikan
e
, hanya menambahkand
.Contoh:
love
→loved
,move
→moved
Jika kata kerja diakhiri dengan konsonan +
y
, maka ubahy
menjadii
, dan tambahkaned
.Contoh:
study
→studied
,cry
→cried
Namun, jika kata kerjanya diakhiri dengan vokal +
y
, maka tambahkan sajaed
.Contoh:
play
→played
,stay
→stayed
Jika kata kerja diakhiri dengan vokal dan konsonan, maka tulis konsonan sekali lagi, dan tambahkan
ed
.Contoh:
stop
→stopped
,plan
→planned
Namun, jika kata kerja diakhiri dengan banyak vokal + konsonan atau vokal tunggal + banyak konsonan, maka tambahkan saja
ed
.Contoh:
look
→looked
,jump
→jumped
Ada lebih banyak aturan, tetapi mari kita perhatikan aturan di atas saja. Misalnya, sesuai aturan di atas, visit
→ visitted
.
Pemenang
Karena ini adalah kode golf, kode terpendek yang dengan benar mengembalikan bentuk lampau menang.
Contoh (JS, 127)
function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
Jawaban:
sed, 76 karakter
Apakah skrip sed dianggap sebagai fungsi untuk masalah ini?
sumber
Mathematica 43 karakter
Pemakaian:
Juga:
sumber
Groovy - 111 karakter
sumber
Perl 5 (82 karakter):
Saya yakin itu bisa diperbaiki.
sumber
C -
120119 karakterDalam gaya C yang khas, fungsi f memperbarui buffer string pada tempatnya, dengan asumsi bahwa pemanggil telah menyediakan ruang yang cukup untuk hingga tiga karakter tambahan. Argumen kedua harus diberikan sebagai 0. Deklarasi variabel keadaan global
l
termasuk dalam jumlah total karakter.Penjelasan: Fungsi ini berulang pada karakter secara rekursif. Argumen kedua
i
mengkodekan yang mana dari tiga karakter sebelumnya adalah konsonan dalam tiga bit bagian bawahnya. Pada akhir string, jikai==5
kemudian tiga karakter terakhir adalah konsonan, vokal dan konsonan, dan dengan demikian karakter terakhir harus diduplikasi. Demikian pula, jika bit 1 darii
menunjukkan bahwa karakter kedua-ke-terakhir adalah konsonan dan karakter terakhir adalah 'y', maka 'y' digantikan oleh 'i'.sumber
Scala 199
273karakterDoa:
Pendekatan pertama saya jauh lebih lama, dengan memindahkan if-else-cascade ke daftar => ke suatu fungsi:
Mungkin pendekatannya menarik. Degolfed dan menjelaskan:
sumber
Ruby, 101 karakter
Mungkin bisa lebih kecil.
Pemakaian:
sumber
f=->(x){...}
untuk mendapatkan kode yang lebih pendek.aeiouy
IMHO juga harus berupa konstanta.Kotoran - 72 karakter
sumber
Python - 147
sumber