Berikut adalah daftar dari beberapa pengikat umum di Unicode (yang bisa saya buat dengan kunci Tulis saya di Debian):
Orig Ascii Lig
ae [ae] æ
AE [AE] Æ
oe [oe] œ
OE [OE] Œ
ij [ij] ij
IJ [IJ] IJ
ff [ff] ff
fi [fi] fi
fl [fl] fl
ffi [ffi] ffi
ffl [ffl] ffl
Anda memiliki dua opsi dalam tantangan ini: gunakan ligatur UTF-8 yang sebenarnya, atau gunakan varian ASCII saja. Jika Anda menggunakan varian ligatur UTF-8 yang sebenarnya, Anda mendapatkan bonus 20%. Jika Anda menggunakan varian ASCII saja, Anda dapat menganggap tanda kurung tidak akan pernah terlibat kecuali untuk menandakan ligatur.
Tantangannya: diberi string sebagai input, output string yang sama
dengan semua ikatan asli digantikan oleh rekan-rekan mereka yang diperluas.
- cocok dengan rakus:
affib
menjadiaffib
(a[ffi]b
), bukanaffib
(a[ff]ib
) atauaffib
(af[fi]b
).
- cocok dengan rakus:
dengan semua urutan huruf "diperluas" digantikan oleh ligatur.
- misalnya,
æOEfoo
([ae]OEfoo
) menjadiaeŒfoo
(ae[OE]foo
).
- misalnya,
Lakukan ini sepenuhnya independen: ffi
( [ff]i
) menjadi ffi
( ffi
), bukan ffi
( [ffi]
).
Kedengarannya cukup sederhana? Ada tangkapan: setiap kali dua non-pengikat tumpang tindih dengan tepat satu karakter , kedua pengikat harus dimasukkan ke dalam string. Berikut adalah beberapa kasus uji untuk ditunjukkan:
Input Ascii-output Output
fij [fi][ij] fiij
fIJ f[IJ] fIJ * remember, capitalization matters!
fffi [ff][ffi] ffffi
fff [ff][ff] ffff
ffffi [ff][ff][ffi] ffffffi
ffffij [ff][ff][ffi][ij] ffffffiij
Hati-hati: pencocokan serakah yang sama berlaku (perhatikan terutama beberapa kasus tes terakhir).
kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
JavaScript (ES6), 213 byte - 20% bonus = 170,4
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`
ditulis ulangx="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae".split`|`
untuk -4 byte?match
Panggilan membutuhkan string yang dipisahkan dengan|
karakter.