Tujuannya sangat sederhana. Menerima string sebagai input, parsing semua entitas HTML yang sesuai dengan karakter berikut (termasuk varian huruf besar mereka):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Aturan parsing:
- Setiap entitas dimulai dengan
&
dan diakhiri dengan;
- Karakter pertama setelah
&
akan menjadi karakter yang dimodifikasi (huruf besar!) - Karakter yang tersisa merujuk ke nama aksen untuk menggunakan (
acute
,grave
,circ
,tilde
danuml
). Nama aksen HARUS dalam huruf kecil! * - Setiap entitas HTML yang menghasilkan karakter yang tidak ada di daftar itu, atau bahwa tidak valid, harus dibiarkan tak tersentuh (Misalnya:
&
,&etilde;
,&a;
) - Entitas numerik harus diabaikan, karena tidak sesuai dengan aturan di atas
Perubahan ini diperkenalkan pada 18-02-2016. Semua jawaban yang ada yang menerima entitas HTML dengan nama aksen huruf besar adalah valid. Setiap jawaban di masa depan harus mengikuti aturan ini.
Contoh:
á //á
Téhèh //Téhèh
an & //an &
Keluaran:
Outputnya bisa dalam ISO-8859- X (1-15), windows-1252 atau UTF-8/16/32.
Anda dapat memilih satu dan hanya satu dari pengkodean yang valid dan menggunakannya untuk output apa pun . Anda dapat dengan aman berasumsi bahwa input akan berada di ASCII.
Salah satu dari yang berikut ini adalah output yang valid untuk á
:
á
(ISO-8859-1 / 15 atau windows-1252, setara dengan\xE1
)á
(UTF-8, setara dengan\xC3\xA1
atau\u00E1
)aÌ
(UTF-8, setara dengana\xCC\x81
ataua\u0301
)- Setiap kombinasi diakritik, tanpa menggunakan entitas HTML.
Outputnya harus serupa secara visual, ketika ditampilkan / ditampilkan, dengan karakter dalam daftar.
Ingat, semua celah standar dan bawaan * tidak diizinkan . Karena ini adalah kode-golf , jawaban terpendek menang.
* Perubahan ini dilakukan karena tidak disetujuinya bonus dan penalti, dan pada saat penulisan, tidak membatalkan jawaban apa pun
Jawaban:
Japt,
8175 byteKeenam
?
mewakili karakter yang tidak patut. Uji secara online!Catatan: Ini menampilkan opsi penyandian ketiga; yaitu, huruf yang diikuti oleh pengkodean UTF-8 mentah dari tanda diakritik gabungan yang sesuai.
Bagaimana itu bekerja
Hexdump kode:
sumber
Ý
JavaScript (ES6),
141122134 byteMengikuti contoh daavko menggunakan tanda diakritik, dan saya merasa seperti orang idiot karena tidak berpikir untuk menggunakannya lebih cepat. Secara mengejutkan mendapatkan singkatan untuk JavaScript.
EDIT: Neil menangkap beberapa kasus buruk yang tidak terdefinisi, yang sekarang diperbaiki.
sumber
String.prototype.replace
sangat golfable untuk string traversal.É
(apa pun itu benar).Retina , 115 byte
Saya baru mengenal kode-golf, tetapi saya pikir ini mungkin berhasil.
Versi ini dibuat sebelum aturan, yang tidak memungkinkan penggantian entitas html huruf besar (misalnya
Á
) diperkenalkan.Pencarian dan penggantian yang cukup sederhana. Menggunakan UTF-8.
Menggunakan pendekatan [huruf] \ xCC \ x [kode hex mark]. Tanda diakritik ditambahkan setelah setiap surat yang relevan.
Untuk beberapa alasan, font Droid Sans Mono default pada interpreter tidak dapat membuat huruf "circ" dan "uml" dengan benar. Jika Anda mengubahnya melalui alat pengembang ke sesuatu seperti DejaVu Sans, itu menunjukkan baik-baik saja. Saya pikir ini adalah batasan font, bukan programnya. Tetapi jika itu kesalahan program, saya akan mencoba memperbaikinya.
Ini adalah versi 129 byte, yang tidak menggantikan entites HTML huruf besar (misalnya
Á
)Cobalah online!
Cobalah online! Versi 129-byte
sumber
JavaScript (ES6), 288 byte
Membuat objek peta karakter (dengan kode numerik dasar untuk setiap karakter), dan menggunakan offset (atau 0 jika tidak ada) untuk menentukan apakah entitas harus dikonversi dan seperti apa kode karakternya. Simetri dalam kasing berarti menambahkan 32 jika huruf kecil, kecuali untuk
Ÿ
, di mana ia menggunakan offset berbeda untuk UTF8.sumber
Ÿ
di UTF8: itu hanya di tempat yang aneh. Semua sama, saya pikir saya mengembun dan mengoptimalkannya dengan cukup baik, mengingat daftar ganti literal akan lebih dari dua kali lebih lama. Apakah Anda melihat sesuatu yang bukan saya?.toLowerCase()
. Nama itu BESAR !!! Juga,String.fromCharCode
dapat menerima beberapa parameter, atau disebut sebagaiString.fromCharCode.call([...])
i
bendera.