Wyzwanie
Biorąc pod uwagę ciąg opisujący regułę cięcia i inny ciąg, wytnij części z drugiego ciągu, używając reguły opisanej przez pierwszy ciąg.
Oba ciągi znaków będą się składały z liter a-zlub A-Zdowolnego z nich (nie muszą być reprezentowane w ten sam sposób). Sposób modyfikacji drugiego ciągu opisano poniżej:
Algorytm
Weź pierwszy ciąg i wyobraź sobie wypełnianie luk między niesąsiadującymi (rosnącymi) literami za pomocą =; na przykład abcfg=> abc==fg. Następnie wyrównaj dwa ciągi i zwróć wszystkie znaki z pierwszego ciągu, które nie są powyżej znaku równości. Na przykład dane podane abcfgi qrstuvwjako dane wejściowe:
qrstuvw - Modify
abc==fg - Modifier
qrs--vw -> qrsvw
Jeśli modyfikator jest krótszy po wypełnieniu znakami równości, należy uwzględnić wszystkie końcowe znaki w drugim ciągu. Jeśli modyfikator jest dłuższy, końcowe znaki są ignorowane.
Modyfikator nie ma gwarancji sortowania.
Przypadki testowe
abcfg, qrstuvw -> qrsvw
abqrs, qwertyuiopasdfghjklzxcvbnm -> qwjklzxcvbnm
za, qr -> qr
azazaz, qwertyuioplkjhgfdsazxcvbnmnbvcxzasdfghjklpoiuytrewq -> qmn
Implementacja referencyjna (używana do generowania przypadków testowych) -> TIO
Zasady
- Obowiązują standardowe luki
- Możesz przyjmować dane wejściowe jako dwa ciągi, dwie listy znaków, macierz znaków itp. (Akceptowalny jest dowolny inny rozsądny format)
- Możesz wyprowadzać dane jako ciąg znaków lub listę znaków (lub inny standardowy format ciągów znaków)
- To jest golf golfowy , więc najkrótsza odpowiedź w bajtach w każdym języku zostaje ogłoszona zwycięzcą dla swojego języka. Żadna odpowiedź nie zostanie zaakceptowana.
- Każdy ciąg może być pusty.
Wesołego golfa!
Zainspirowany dwoma ostatnimi wyzwaniami Kevina Cruijssena: „Naprawiłem to (za pomocą taśmy / liny )”
There, I blew it up (with a segfault)