Voici une liste de quelques ligatures courantes en Unicode (celles que j'ai pu créer avec ma clé Compose sur 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
Vous avez deux options dans ce défi: utilisez les ligatures UTF-8 réelles, ou utilisez la variante ASCII uniquement. Si vous utilisez les variantes de ligature UTF-8 réelles, vous gagnez un bonus de 20%. Si vous utilisez la variante ASCII uniquement, vous pouvez supposer que les crochets ne seront jamais impliqués, sauf pour signifier une ligature.
Le défi: étant donné une chaîne en entrée, sortir la même chaîne
avec toutes les ligatures originales remplacées par leurs homologues étendues.
- correspondre goulûment:
affib
devientaffib
(a[ffi]b
), pasaffib
(a[ff]ib
) ouaffib
(af[fi]b
).
- correspondre goulûment:
avec toutes les séquences de lettres "étendues" remplacées par des ligatures.
- par exemple,
æOEfoo
([ae]OEfoo
) devientaeŒfoo
(ae[OE]foo
).
- par exemple,
Faites cela de manière totalement indépendante: ffi
( [ff]i
) devient ffi
( ffi
), pas ffi
( [ffi]
).
Cela vous semble assez simple? Il y a un hic: chaque fois que deux non-ligatures se chevauchent avec exactement un caractère , les deux ligatures doivent être insérées dans la chaîne. Voici quelques cas de test à démontrer:
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
Attention: la même correspondance gourmande s'applique (notez surtout les derniers cas de test).
code-golf , donc le code le plus court en octets gagne.
Réponses:
JavaScript (ES6), 213 octets - 20% de bonus = 170,4
Explication
Tester
Afficher l'extrait de code
la source
r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`
être réécrit commex="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae".split`|`
pour -4 octets?match
appel nécessite la chaîne séparée par des|
caractères.