Aquí hay una lista de algunas ligaduras comunes en Unicode (las que podría crear con mi clave Compose en 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
Tiene dos opciones en este desafío: usar las ligaduras UTF-8 reales, o usar la variante solo ASCII. Si usa las variantes de ligadura UTF-8 reales, obtendrá un bono del 20%. Si usa la variante solo ASCII, puede suponer que los corchetes nunca estarán involucrados, excepto para indicar una ligadura.
El desafío: dada una cadena como entrada, genera la misma cadena
con todas las ligaduras originales reemplazadas por sus contrapartes expandidas.
- coincidir con avidez: se
affib
convierte enaffib
(a[ffi]b
), noaffib
(a[ff]ib
) oaffib
(af[fi]b
).
- coincidir con avidez: se
con todas las secuencias de letras "expandidas" reemplazadas por ligaduras.
- por ejemplo,
æOEfoo
([ae]OEfoo
) se convierte enaeŒfoo
(ae[OE]foo
).
- por ejemplo,
Haga esto de forma completamente independiente: ffi
( [ff]i
) se convierte en ffi
( ffi
), no ffi
( [ffi]
).
¿Suena bastante simple? Hay un problema: cada vez que dos ligaduras no se superponen exactamente por un carácter , ambas ligaduras deben insertarse en la cadena. Aquí hay algunos casos de prueba para demostrar:
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
Tenga cuidado: se aplica la misma coincidencia codiciosa (tenga en cuenta especialmente los últimos casos de prueba).
code-golf , por lo que gana el código más corto en bytes.