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:
affib
staje 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.
Odpowiedzi:
JavaScript (ES6), 213 bajtów - bonus 20% = 170,4
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
r="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae",x=r.split`|`
być przepisany jakox="ffl|ffi|fl|fi|ff|IJ|ij|Œ|œ|Æ|æ|ffl|ffi|fl|fi|ff|IJ|ij|OE|oe|AE|ae".split`|`
-4 bajty?match
Wywołanie wymaga ciągu oddzielonego|
znakami.