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-z
lub A-Z
dowolnego 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 abcfg
i qrstuvw
jako 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)
Odpowiedzi:
JavaScript (ES6),
8180 bajtówPobiera dane wejściowe w składni curry
(modify)(modifier)
.Wypróbuj online!
Skomentował
źródło
Python 3 , 99 bajtów
Wypróbuj online!
źródło
05AB1E ,
2017 bajtówWypróbuj online!
Oblicza odległość ASCII między każdym znakiem, przygotowując tyle spacji, jeśli jest dodatnia. Ujemna odległość powoduje dodanie 0 spacji, zgodnie ze specyfikacją. Następnie pcham wszystkie znaki o tych samych indeksach w ciągu 2, co spacje w pierwszym manipulowanym ciągu.
90% pewności, że mogę stracić kolejne 2-3 bajty, nie używając spacji, ale przesuwając znak do indeksu N. W tej chwili pracuję nad tym wariantem ... Co mój „lepszy pomysł” skończył jako:
05AB1E , 18 bajtów
Wypróbuj online!
Czuję się jakbym czegoś brakuje, jeśli widzisz na poprawę
ε1‚Z}
,ʒ²g‹}
czy0¸ì
LMK ...Ç¥ε1‚Z}ηO0¸ìè
było 13, ale kiedy zawijan > |input_2|
doinput_2[n%|input_2|]
...źródło
IgÅ1«
, ale może jest lepszy sposób?Stax , 15 bajtów
Uruchom i debuguj
To jest reprezentacja ascii.
źródło
╟╣i
Galaretka , 14 bajtów
Dyadyczny link akceptujący modyfikator jako listę znaków po lewej stronie oraz listę znaków do modyfikacji po prawej stronie, zwracający listę znaków.
Wypróbuj online!
W jaki sposób?
źródło
¬
podstępu w mojej odpowiedzi. :) (technicznie mamy ten sam algorytm, ale zrobiliście krócej, dobrze!)¬
, ale zapomniałem, kiedy zrobiłem gruby palec w telefonie komórkowym niegotowej jeszcze 13-bajtowej próby.JavaScript (ES6), 79 bajtów
Używa tego samego algorytmu do obliczania odległości między literami, co moja ostatnia odpowiedź .
Przypadki testowe:
Pokaż fragment kodu
źródło
APL (Dyalog Classic) ,
353432 bajtyWypróbuj online!
źródło
K (ngn / k) ,
272425 bajtówWypróbuj online!
źródło
Haskell , 49 bajtów
Wypróbuj online!
źródło
Perl 5 , 45 bajtów
Wypróbuj online!
źródło
Rubin ,
6864 bajtówWypróbuj online!
źródło
Węgiel drzewny ,
2928 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Na podstawie mojej odpowiedzi na Tam naprawiłem to taśmą. Wyjaśnienie:
Uwaga: Powinno to wynosić 28 bajtów, aleAnd
jest zepsute w momencie pisania.źródło
Java 8, 117 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło