Latar Belakang
Artikel yang pasti Italia (sesuai dengan bahasa Inggris yang ) memiliki tujuh bentuk yang berbeda: l' , il , lo , gli , i , la , le . Yang mana yang akan digunakan tergantung pada tiga variabel:
- Jenis kelamin: maskulin / feminin.
- Nomor: tunggal / jamak.
- huruf awal dari kata berikutnya: vokal / konsonan tipe A / konsonan tipe B.
- Vokal adalah salah satunya: aeiou .
- Konsonan tipe B adalah setiap kasus ini: S- diikuti oleh konsonan lain, z , gn- , pn- , ps , x- , i- diikuti oleh vokal (ini saya bertindak sebagai semivokal).
- Konsonan tipe A adalah konsonan yang bukan tipe B.
Tabel menunjukkan bentuk artikel yang akan digunakan dalam masing-masing dua belas kombinasi dari tiga variabel di atas. Perhatikan bahwa formulir l terlampir pada kata berikut dengan kutipan tunggal dan tanpa spasi.
Tantangan
Masukkan kata dan satu atau dua string, angka atau Boolean yang menunjukkan jenis kelamin dan angka . (Huruf awal harus diperoleh dari kata input).
Kata input akan menjadi urutan huruf ASCII huruf kecil. Vokal beraksen akan diganti dengan versi non-aksennya (misalnya, realtà akan dimasukkan sebagai realta ).
Input gender dan angka dapat berupa angka terpisah, Boolean atau string, atau gabungan jumlah string (misalnya, 1 untuk maskulin singular, 2 untuk feminin singular, dll).
Format dan pemisah yang masuk akal dapat digunakan, selama itu ditentukan dalam jawabannya.
Keluarkan kata yang didahului dengan bentuk artikel yang sesuai , dengan spasi atau kutipan tunggal sesuai kebutuhan. Outputnya juga harus huruf kecil. Trailing atau ruang kosong dibolehkan.
Golf kode, kemenangan terpendek.
Uji kasus
Berikut ini saya menggunakan huruf input m
, f
untuk menentukan jenis kelamin, dan s
, p
untuk angka (ini hanya satu format input yang mungkin).
Input Output Comment
macchina f s la macchina Initial letter is cons. A
zio m s lo zio Initial letter is cons. B
libri m p i libri Initial letter is cons. A
ieri m s lo ieri Initial letter is cons. B
aquile f p le aquile Initial letter is vowel
spagnoli m p gli spagnoli Initial letter is cons. B
golf m s il golf Initial letter is cons. A
ombra f s l'ombra Initial letter is vowel
impossibili m p gli impossibili Initial letter is vowel
sumber
ieri
test case karena kata keterangan dan bukan kata benda! (BTW itu secara resmi benar) Tolong!Jawaban:
Retina,
138133129113 byteSuite uji. (diawali
%(G`\n
untuk menjalankan semua uji sekaligus)Format input:
macchina f s
menjadi2macchina
gantinya.Tabel konversi berkat Kevin Lau .
sumber
Python 3.5,
238235192181178 byte:( -13 bytes berkat tips dari Leaky Nun! )
Fungsi lambda anonim yang mengambil argumen dalam bentuk
(<String>, <Integer Gender-Plurality mapping>)
, di mana pemetaannya adalah sebagai berikut:Untuk memanggilnya, cukup berikan fungsi nama yang valid, lalu panggil seperti fungsi normal yang dibungkus dalam pernyataan cetak. Karena itu, jika pertanyaan itu ingin disebutkan
U
, cukup sebut saja sepertiprint(U(<String>, <Integer Gender-Plurality mapping>))
.Cobalah secara Online! (Ideone)
sumber
zzz and yyy or xxx
lebih pendek dua byte dari[xxx,yyy][bool(zzz)]
yyy
benar.["l'",'gli '][b%2]
lebih pendek 3 byte dari["l'",'gli ',"l'"][b]
Java,
227208195 byte-13 byte berkat Leaky Nun
Mengambil string dan int Anda berdasarkan pemetaan berikut:
Mengembalikan string dengan hasilnya.
Tidak digabungkan dengan kasus uji dan tanpa operator ternary (sekarang nyata):
Menggunakan sedikit sihir regex dan bertindak tergantung pada dua boolean yang ditentukan. Yang mengejutkan saya, tidak ada impor yang diperlukan, yang membantu dengan ukuran kode!
sumber
0/1
alih-alihfalse/true
yang seharusnya menghemat beberapa byte.String e = "[^aeiou]).*";
sebenarnya menghemat 5 byte.Ruby,
147146 byteCoba online?
Mungkin dimungkinkan untuk menggunakan metode yang lebih baik untuk menentukan artikel mana yang akan digunakan, tetapi saya tidak mengetahui adanya.
Sesuai spek, pengenal adalah angka, sebagai berikut:
sumber
Batch,
446390385380 byteVersi baru menggunakan
0-3
pengodean yang sama untuk jenis kelamin dan angka seperti beberapa jawaban lainnya. Bekerja dengan menciptakan array 1 dimensi%2
..%13
dari bentuk, kemudian menggeser1+%1
elemen pertama sehingga bentuk yang menarik menjadi%1
,%5
dan%9
(yang beruntung karena Batch tidak akan pergi ke atas%9
tanpa bergeser). Kemudian dengan susah payah memeriksa daftar awalan untuk mencari tahu formulir mana yang perlu digunakan._
digunakan sebagai pengganti untuk mewakili spasi sampai kata tersebut ditampilkan.sumber
Python 3, 235 byte
Saya tertarik untuk melihat seberapa pendek saya bisa mendapatkan ini dengan Python tanpa regex. Ternyata ini bukan pilihan terbaik ...
Fungsi anonim yang mengambil input melalui argumen kata
s
dan kode nomor genderc
sebagai bilangan bulat, menggunakan pemetaan berikut:dan mengembalikan kata dengan artikel yang benar.
Bagaimana itu bekerja
Daftar yang berisi kemungkinan untuk masing-masing
c
sebagai daftar terpisah dibuat. Daftar ini kemudian diindeks menjadi menggunakan nilaic
, menghasilkan daftar 3-elemen dengan opsi yang relevan. Indeks daftar sekarang dipilih dengan mengindeks ke daftar bersarang lain dengan hasil ekspresi Boolean. Jika karakter pertamas
adalah vokal dan tidaki
diikuti oleh vokal, opsi untukvowel
dihasilkan melalui kembalinya indeks0
. Lain, ekspresi Boolean kembaliTrue
untukcons. B
danFalse
untukcons. A
dievaluasi, menghasilkan indeks2
dan1
masing-masing. Akhirnya, indeks digunakan untuk menghasilkan artikel, yang digabungkan dengan spasi dan string asli sebelum dikembalikan.Cobalah di Ideone
sumber
JavaScript 210 byte
Fungsi anonim mengambil dua parameter s dan p di mana
Setelah menetapkan fungsi ke variabel dan beberapa membongkar), itu dapat diuji sebagai
dimana
c
adalah fungsi untuk mengujis
konsonan pada posisii
.r
mengevaluasi ke 0 untuk memulai dengan vokal, 1 untuk memulai dengan konsonan tipe A dan 2 untuk memulai dengan konsonan tipe B (diuji dalam urutan terbalik).sumber