Dalam bahasa Inggris, ada perbedaan yang menyenangkan dan sederhana antara an
dan a
: Anda gunakan an
saat mendahului kata yang dimulai dengan bunyi vokal, dan a
ketika kata itu dimulai dengan bunyi konsonan.
Demi kesederhanaan dalam tantangan ini, an
mendahului kata yang dimulai dengan vokal ( aeiou
), dan a
mendahului kata yang dimulai dengan konsonan.
Memasukkan
String yang hanya terdiri dari karakter ASCII yang dapat dicetak, dengan [?]
muncul di tempat-tempat di mana Anda harus memilih untuk memasukkan an
atau a
. [?]
akan selalu muncul sebelum kata. Anda dapat mengasumsikan bahwa kalimat tersebut akan benar secara tata bahasa dan diformat seperti biasa.
Keluaran
String input dengan [?]
diganti dengan kata yang sesuai ( an
atau a
). Anda harus khawatir tentang penggunaan huruf besar!
Kapan Melakukan Kapitalisasi
Kapitalkan kata jika didahului dengan tidak ada karakter (adalah yang pertama di input) atau jika didahului oleh salah satu .?!
diikuti oleh spasi.
Contohnya
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
sumber
[?]
dan?[?] hour ago I met [?] European.
hanya untuk membuat semua orang merasa ngeri.[?] hour ago I met [?] horse.
Jawaban:
V , 41 byte
Cobalah online! , yang dengan mudah juga dapat digunakan untuk memverifikasi semua kasus uji tanpa jumlah byte tambahan.
Ini mengambil keuntungan dari "Regex Compression" V. Ini menggunakan banyak karakter yang tidak patut dicetak, jadi di sini ada hexdump:
sumber
Perl, 48 byte
Disimpan 1 byte karena Ton Hospel .
Menghitung shebang sebagai satu, input diambil dari stdin.
Penjelasan
Contoh Penggunaan
sumber
/[.?!]/
diikuti oleh ruang tidak ada\G
backwarsds. PPS, sedikit lebih pendek:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Rubi,
7872 byteTidak disatukan
sumber
"anAn"[...]
sangat pintar. 👍🏻 Anda dapat menyimpan beberapa byte dengan melompati bagian dalamsub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 byte
Saya suka solusi yang lebih lengkap dari waktu ke waktu ...
tetapi saya harus mengakui bahwa ini sedikit berlebihan, meskipun sama sekali tidak selesai.
Simpan ke file, jalankan
php <filename>
dengan input dari STDIN.uji kasus
kerusakan
sumber
[?][?][?]s [?]lert!
Minkolang 0,15 , 75 byte
Coba di sini!
Penjelasan
Perhatikan bahwa karena Minkolang adalah toroidal, ketika penghitung program bergerak dari tepi kanan, ia muncul kembali di sebelah kiri. Tentu saja golf, tetapi karena saya harus menambahkan 21 byte karena spek, saya mungkin tidak mencoba.
sumber
JavaScript (ES6), 90
86 87 85Edit sekali lagi karena spek kapitalisasi telah berubah (lebih masuk akal sekarang)
Edit lagi 1 byte save thx @Huntro
Edit 2 byte lagi untuk mengelola tanda kutip dan sejenisnya, seperti yang ditunjukkan oleh IsmaelMiguel (bahkan jika saya tidak tahu apakah itu diminta oleh op). Perhatikan bahwa sebelumnya saya telah menghitung 86 byte tetapi jumlahnya 85
Mencoba mengikuti aturan kapitalisasi yang dinyatakan dalam acara komentar jika tidak lengkap (setidaknya)Uji
sumber
[?][?]
memberiAna
? Dan bukankah seharusnya[?][?] a.
menghasilkanAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
, tanda kutip tidak relevan) dan untuk[?] "A".
(berfungsi dengan baik untuk[?] A.
).[?] "[?]"
bukan input yang valid.[?] will always appear before a word
dan "[?]" bukan sebuah kata.]
tidak perlu./(\w )?\[\?](\W*.)/g
Batch, 136 byte
Mengambil garis input pada STDIN.
sumber
PHP,
10092 byteDimungkinkan untuk golf lebih jauh dari ekspresi reguler.
Memberi pemberitahuan tentang konstanta yang tidak ditentukan tetapi masih berfungsi.
Sunting: 8 byte disimpan berkat Primo
sumber
[n,A,a]
dengan menggunakan pernyataan melihat-lihat (\K
dan(?= )
).Python 3.5.1,
153147124BytesMemasukkan :
[?] apple [?] day keeps the doctor away. [?] lie.
Keluaran:
An apple a day keeps the doctor away. A lie.
Versi 123 Bytes - Ini tidak menangani aturan huruf besar.
Ide itu!
sumber
;
dan bermain golf.m.start() for
seharusnyam.start()for
,s[i+2] in 'aeiouAEIOU'
haruss[i+2]in'aeiouAEIOU'
. Mencukur -3-byte yang mudah karena spasi.('an','a')[s[i+2]in'aeiouAEIOU']
terbalik, Anda bisa menggunakannya'a'+'n'*(s[i+2]in'aeiouAEIOU')
untuk memperbaikinya dan menyimpan 2 byte. Di sini Anda dapat menemukan banyak tips untuk bermain golf .enumerate()
itu keren. Terima kasih @ chepner.Java,
180178 bytePosting pertama saya di sini, saya memang menggunakan bagian dari posting Kevin Cruijssen tetapi dan dengan pendekatan yang berbeda, dia membantu saya mengurangi sedikit lebih banyak, terima kasih padanya!
Ini dia ungolfed:
Dan hasilnya
Penjelasan sederhana, saya menggunakan pendekatan rekursif untuk menemukan setiap
[?]
.Saya tidak bisa menemukan cara untuk menggunakan korek api dengan case tidak sensitif (tidak yakin itu mungkin).
178bytes: Terima kasih kepada Martin Ender!
sumber
]
di regex Anda.05AB1E ,
383635 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
]
setelah::
}
nanti karena saya pikir itu akan menghemat satu byte, tetapi Anda memang benar bahwa ia gagal untuk[?] vowel
kasus - kasus .. Terima kasih telah memberi tahu saya!C #,
204235 byteProgram lengkap tidak digabungkan:
Saya yakin ini bisa diperbaiki, terutama bagian Regex, tetapi tidak bisa memikirkan apa pun sekarang.
sumber
Java 7,
239214213 byteKasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
isEmpty
menggunakan regex^$
. Saya yakin saya berakhir dengan 202;)String c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
selain itu : Jadi pasti lebih pendek dari pada loop-answer saya. :)Racket 451 byte (tanpa regex)
Ini jelas merupakan jawaban yang panjang tetapi menggantikan a dan a dengan huruf kapital juga:
Pengujian:
Keluaran:
Versi detail:
sumber
J , 113 byte
Cobalah online!
Malu, malu!
sumber
Retina ,
6660 byteCobalah online.
Penjelasan:
Lakukan pencarian case-insensitive untuk
[?]
diikuti oleh vokal atau konsonan, di mana vokal opsional disimpan dalam kelompok tangkapan 2, dan seluruh kecocokan dalam kelompok tangkapan 1:Ganti ini dengan
a
, diikuti dengan panjang jumlah grup keduan
(jadi 0 atau 1n
), diikuti dengan huruf dari grup tangkap 1:Kemudian cocokkan
a
di awal string, atau setelah salah satu dari.?!
spasi:Dan huruf besar A, tanpa menghapus karakter lain dari grup tangkap 1:
sumber
Java (JDK) , 154 byte
Cobalah online!
Penjelasan:
sumber
C (gcc) ,
225207202201 byteBerkat ceilingcat untuk -24 byte
Cobalah online!
sumber
Groovy,
73162 bytesunting: sial, huruf besar semua rumit di sini
sumber
C # 209 byte
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
Diformat
sumber
Perl 6 , 78 byte
Penjelasan:
Uji:
sumber
} $1
pada akhirnya (membuatnya}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 Bytes.
Meskipun lua adalah bahasa yang buruk untuk bermain golf, saya merasa saya telah melakukannya dengan cukup baik.
sumber
Pip ,
62555450 byteMengambil string sebagai argumen baris perintah.
Cobalah online!
Penjelasan:
sumber
Racket (dengan regex) 228 byte
Pengujian:
Keluaran:
sumber
Python 3 ,
104103 byte-1 byte, tidak terhapus
]
Cobalah online!
Mulai dengan mengganti semua kemunculan
[?]
dengana
,Lalu mengganti semua
a
diikuti dengan vokal, denganan
.Kemudian ganti semua
a
pada awal input atau kalimat denganA
.Berasumsi bahwa
[?]
tidak akan pernah menyentuh kata lain, dan huruf kecila
seharusnya tidak pernah memulai kalimat.sumber
PowerShell , 124 byte
terinspirasi oleh jawaban Avi untuk Jawa .
Cobalah online!
sumber