Oto lista niektórych typowych ligatur w Unicode (tych, które mogłem utworzyć za pomocą mojego klucza Compose w Debianie):
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
W tym wyzwaniu masz dwie opcje: użyj rzeczywistych ligatur UTF-8 lub użyj wariantu tylko ASCII. Jeśli użyjesz rzeczywistych wariantów ligatur UTF-8, zyskasz premię 20%. Jeśli użyjesz wariantu tylko ASCII, możesz założyć, że nawiasy kwadratowe nigdy nie zostaną uwzględnione, z wyjątkiem oznaczenia ligatury.
Wyzwanie: biorąc pod uwagę ciąg wejściowy, wypisz ten sam ciąg
ze wszystkimi oryginalnymi ligaturami zastąpionymi przez ich rozwinięte odpowiedniki.
- dopasuj łapczywie:
affibstaje sięaffib(a[ffi]b), nieaffib(a[ff]ib) lubaffib(af[fi]b).
- dopasuj łapczywie:
ze wszystkimi „rozszerzonymi” sekwencjami liter zastąpionymi ligaturami.
- na przykład
æOEfoo([ae]OEfoo) staje sięaeŒfoo(ae[OE]foo).
- na przykład
Zrób to całkowicie niezależnie: ffi( [ff]i) staje się ffi( ffi), a nie ffi
( [ffi]).
Brzmi dość prosto? Jest pewien haczyk: za każdym razem, gdy dwie nie-ligatury nakładają się dokładnie na jeden znak , obie ligatury muszą zostać wstawione do łańcucha. Oto kilka przypadków testowych do zademonstrowania:
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
Uważaj: obowiązuje to samo chciwe dopasowanie (zwróć uwagę zwłaszcza na kilka ostatnich przypadków testowych).
code-golf , więc wygrywa najkrótszy kod w bajtach.