pengantar
Dalam tantangan ini, tugas Anda adalah membuat daftar kasus dua kata benda Finlandia dengan benar. Twist adalah bahwa Anda dapat menggunakan salah satu daftar sebagai panduan untuk menghasilkan yang lain.
The Nouns
Kami menggunakan dua tabel deklinasi berikut sebagai data kami. Mereka mencantumkan case dari dua kata benda, satu case per baris dalam urutan yang sama seperti pada artikel Wikipedia yang terhubung di atas, dalam bentuk singular: jamak jika dapat diterapkan.
Tabel 1: Kasus ovi ("pintu")
ovi : ovet
oven : ovien
oven : ovet
ovea : ovia
ovessa : ovissa
ovesta : ovista
oveen : oviin
ovella : ovilla
ovelta : ovilta
ovelle : oville
ovena : ovina
oveksi : oviksi
ovin
ovetta : ovitta
ovine
Tabel 2: Kasus jalka ("kaki")
jalka : jalat
jalan : jalkojen
jalan : jalat
jalkaa : jalkoja
jalassa : jaloissa
jalasta : jaloista
jalkaan : jalkoihin
jalalla : jaloilla
jalalta : jaloilta
jalalle : jaloille
jalkana : jalkoina
jalaksi : jaloiksi
jaloin
jalatta : jaloitta
jalkoine
Tugas
Tugas Anda adalah menulis dua program f
dan g
(mungkin dengan nama berbeda) yang mengambil satu string sebagai input, memberikan satu string sebagai output, dan memiliki properti berikut. Jika Tabel 1 diberikan f
sebagai input, output Tabel 2, dan jika Tabel 2 diberikan g
, output Tabel 1. Semua input lainnya menghasilkan perilaku yang tidak ditentukan. Tabel harus muncul persis seperti di atas dalam input dan output. Anda dapat secara opsional berasumsi bahwa ada baris baru yang tertinggal, tetapi kemudian harus digunakan di kedua tabel, dan dalam input dan output. Tidak ada baris sebelumnya.
Aturan dan Bonus
Anda dapat menulis f
dan g
sebagai salah satu fungsi atau program penuh, tetapi mereka harus dari jenis yang sama, dan mereka harus benar-benar terpisah (jika Anda menulis fungsi pembantu f
, Anda harus menuliskannya kembali g
jika Anda ingin menggunakannya di sana) . Jumlah total byte terendah menang, dan celah standar tidak diizinkan.
Ada bonus -25% untuk tidak menggunakan ekspresi reguler.
Beberapa Klarifikasi
Sangatlah baik untuk menulis fungsi / program f
yang mengabaikan inputnya dan selalu mengembalikan Tabel 2, dan fungsi / program g
yang selalu mengembalikan Tabel 1. Hanya diperlukan itu dan ; perilaku dan pada semua input lainnya tidak relevan.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
Bagian "sepenuhnya terpisah" berarti yang berikut ini. Jawaban Anda memberikan dua bagian kode, satu untuk f
dan satu untuk g
, lebih disukai dalam kotak kode yang berbeda. Jika saya menaruh kode untuk f
dalam file dan menjalankannya, itu berfungsi, dan sama untuk g
. Skor Anda adalah jumlah jumlah byte dari dua bagian kode. Kode duplikat dihitung dua kali.
if Table 1 is given `f` as input
Bagaimana cara seseorang memasukkan fungsi ke dalam tabel? Saya tidak mengerti bagian inif
sebagai masukan"Jawaban:
Perl, 105 + 54 = 159
Program
f
(coba saya ):Program
g
(coba saya ):Versi alternatif
f
, hanya 2 byte lebih lama (metode ini juga dapat diterapkang
tetapi akan terlalu lama):Secara teknis ini masih menggunakan regexp (untuk memecahkan kode string substitusi dan kemudian menerapkannya) jadi saya tidak bisa mengklaim bonus di sini.
sumber
s/jalk?o?/ov/g
! Yang itu kuat.Perl, 131 + 74 = 205
Tabel 1 hingga Tabel 2
Diperluas:
Tabel 2 hingga Tabel 1
Diperluas:
(Terima kasih kepada @nutki untuk beberapa tips Perl)
Terlepas dari hukuman pada regex, saya memutuskan untuk tetap melakukannya dan belajar Perl saat saya masih di sana. Saya berasumsi ada beberapa trik Perl yang mungkin membuat saya mengganti rantai, tetapi saya tidak dapat menemukannya di pencarian cepat saya secara online.
Jauh lebih sulit untuk beralih dari tabel ovi ke tabel jalka , yang saya duga adalah karena tabel jalka memiliki nuansa tambahan untuk membuat kata-kata lebih mudah diucapkan.
Ini meja pengganti tempat saya bekerja:
sumber
Python 2, 371 - 25% = 278
Ketika tabel 1 adalah input untuk berfungsi f, ia mengembalikan tabel 2. Jika input bukan tabel 1, outputnya tidak ditentukan (namun kemungkinan tetapi tidak dijamin untuk mengembalikan tabel 2). Misalnya, panggilan
f(9**9**9**9)
mungkin tidak akan mengembalikan tabel 2.Logika yang sama digunakan dengan fungsi g:
Fungsinya independen.
sumber
Python - 462 - 25% = 346.5
Program ini melakukan pendekatan langsung yang jelas kecuali beberapa trik golf data. Untuk perilaku yang tidak terdefinisi, ia mencetak tabel seperti perilaku yang didefinisikan. Benar-benar "kebetulan" yang menakjubkan! :)
Sekarang, jika seseorang mempertimbangkan kecurangan ini (ya benar), saya dapat mengikuti semangat aturan untuk 20 karakter lagi = 482 - 25% = 361.5 . Cukup ganti dua baris terakhir dengan:
Ini akan membuat perilaku yang tidak didefinisikan kembali bukan tabel yang benar tetapi tabel input.
sumber
x
dany
dalam satu ekspresi, dan menggunakan satu dif
dan yang lain dalamy
.y
" -> "ing
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)Pendekatan langsung.
Sunting: Bug yang diperbaiki dan trik ganti bekas dari @Maltysen
Jalankan dari jendela Segera:
sumber
JavaScript (ES6) 271 (165 + 196 -25%)
Mulai dari yang sederhana. Fungsi mengabaikan parameter input sama sekali.
Menggunakan split / join alih-alih ganti untuk menghindari ekspresi reguler.
Uji di Firefox / konsol FireBug
sumber