Hier ist eine Liste einiger gebräuchlicher Ligaturen in Unicode (die ich mit meinem Compose-Schlüssel unter Debian erstellen könnte):
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
Bei dieser Herausforderung haben Sie zwei Möglichkeiten: Verwenden Sie die tatsächlichen UTF-8-Ligaturen oder die reine ASCII-Variante. Wenn Sie die aktuellen UTF-8-Ligaturvarianten verwenden, erhalten Sie einen Bonus von 20%. Wenn Sie die Nur-ASCII-Variante verwenden, können Sie davon ausgehen, dass eckige Klammern nur zur Kennzeichnung einer Ligatur verwendet werden.
Die Herausforderung: Geben Sie eine Zeichenfolge als Eingabe aus, und geben Sie dieselbe Zeichenfolge aus
wobei alle ursprünglichen Ligaturen durch ihre erweiterten Gegenstücke ersetzt wurden.
- Gierig übereinstimmen:
affib
wirdaffib
(a[ffi]b
), nichtaffib
(a[ff]ib
) oderaffib
(af[fi]b
).
- Gierig übereinstimmen:
wobei alle "erweiterten" Buchstabenfolgen durch Ligaturen ersetzt wurden.
- Zum Beispiel wird
æOEfoo
([ae]OEfoo
) zuaeŒfoo
(ae[OE]foo
).
- Zum Beispiel wird
Tun Sie dies völlig unabhängig: ffi
( [ff]i
) wird ffi
( ffi
), nicht ffi
( [ffi]
).
Klingt einfach genug? Es gibt einen Haken: Jedes Mal, wenn sich zwei Nicht-Ligaturen um genau ein Zeichen überlappen , müssen beide Ligaturen in die Zeichenfolge eingefügt werden. Hier sind einige Testfälle, die demonstriert werden sollen:
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
Achtung: Es gilt das gleiche gierige Matching (besonders die letzten Testfälle beachten).
Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
JavaScript (ES6), 213 Byte - 20% Bonus = 170,4
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`
umgeschrieben werdenx="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae".split`|`
?match
Aufruf erfordert die durch|
Zeichen getrennte Zeichenfolge.