Dość proste wyzwanie: otrzymasz dwa dane wejściowe, ciąg znaków i liczbę (liczbę można traktować jako ciąg znaków, tzn. "123"
Zamiast123
)
Jeśli ciąg nie kończy się liczbą (tzn. Nie pasuje do wyrażenia regularnego \d$
), wystarczy dołączyć liczbę na końcu ciągu.
Jeśli ciąg znaków kończy się liczbą (tzn. Pasuje do wyrażenia regularnego \d+$
), należy go najpierw usunąć, a następnie dołączyć liczbę.
Żadne z danych wejściowych nigdy nie będzie niepoprawne ani puste (nieprawidłowe jest zdefiniowane przez dane liczbowe niezawierające samych cyfr)
Numer nigdy nie będzie zawierać a -
lub a .
.
Ciąg nigdy nie będzie zawierał znaku nowej linii ani drukowalnych znaków innych niż białe znaki.
Przypadki testowe:
abc123 + 345 -> abc345
123 + 1 -> 1
hello + 33 -> hello33
123abc123 + 0 -> 123abc0
ab3d5 + 55 -> ab3d55
onetwo3 + 3 -> onetwo3
99ninenine + 9999 -> 99ninenine9999
Python 2 , 30 bajtów
Wypróbuj online!
źródło
a
kończy, gdy kończy się,"L"
ponieważ56**7
ocenia na1727094849536L
. Wejściea="abcdL"; b="59"
wyjść"abcd59"
. Twój link TIO nie ocenia56**7
się zbyt długo, więc nie wiem, co się dziejePHP,
37363533 bajtówOszczędność 1 bajtu dzięki Jörgowi Hülsermannowi .
źródło
chop
alias zapisuje 1Perl 5, 12 bajtów
11 bajtów kod + 1 dla
-p
.Wypróbuj online!
źródło
Java 8, 32 bajty
Pobiera dane wejściowe
a
jako ciąg znaków ib
nie ma znaczenia, czy jest to ciąg znaków , czy liczba całkowita (chociaż używam liczby całkowitej w linku TIO poniżej).Wypróbuj tutaj.
źródło
Python 2 , 32 bajty
Wypróbuj online!
Pobiera dane wejściowe w odwrotnej kolejności, zarówno jako ciąg.
źródło
05AB1E , 9 bajtów
Wypróbuj online! Prawdopodobnie złe rozwiązanie, ale najlepsze, jakie mogłem wymyślić
Wyjaśnienie
źródło
Japt , 10 bajtów
Wypróbuj online!
źródło
U
nie kończy się liczbą. Spróbuj użyć*
w RegEx, zamiast+
. TIOU
nie zakończy się liczby. Myślę, że będziesz musiał zrobićr"%d+$" +V
Python 2 ,
444139 bajtówEDYCJA: -4 bajty dzięki @Dom Hastings. Nie używam często wyrażeń regularnych.
EDYCJA 2 : -2 bajty dzięki @totallyhuman wskazując, że liczba może być traktowana jako ciąg znaków
Trzeba było się spodziewać ...
Po prostu usuwa cyfry na końcu ciągu i dołącza liczbę
Wypróbuj online!
źródło
\d*$
, czy możesz zamienić na""
``y
'', aby zapisać niektóre bajty?y
parametr jako ciąg.Pip ,
97 bajtów@DLosc zapisał mi 2 bajty!
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
282625 bajtówźródło
?
wymagane?Ruby , 21 bajtów
Pobiera dwa ciągi wejściowe.
Wypróbuj online!
źródło
C #, 45 bajtów
Wyjaśnienie:
źródło
V ,
74 bajtówWypróbuj online!
Używa tego samego wyrażenia regularnego, co odpowiedź Retina powyżej:
źródło
Perl 6 , 20 bajtów
źródło
Tcl 32 bajty
Nie jestem pewien oczekiwanego interfejsu. Odbywa się to jako procedura, która przyjmuje dwa dane wejściowe jako argumenty wywołania. Aby zmienić go w samodzielny skrypt, który odczytuje dane wejściowe ze standardowego wejścia i wyświetla wynik na standardowe wyjście, potrzebny byłby dodatkowy wiersz:
lub zrobiłby to wszystko „w linii”:
regsub pobiera RE, oryginalny ciąg i ciąg, aby zastąpić pasującą część.
źródło
Mathematica, 48 bajtów
Istnieje już rozwiązanie Mathematica (84 bajty).
źródło
Marchewka ,
1621 bajtówWypróbuj online!(wejście jest oddzielone od linii)
Wyjaśnienie
Musiałem zwiększyć liczbę bajtów o 5, ponieważ kod nie działał dla przypadków testowych, jak w
a5b3
przypadku wielu cyfr.źródło
Haskell,
75 bajtów95 bajtów917961 bajtówPróbowałem to zrobić bez wyrażenia regularnego, więc może to byłaby znacznie poprawiona odpowiedź. Jest też kilka sposobów, w jakie mógłbym to zrobić, więc nie jestem pewien, czy uda mi się ogolić kilka bajtów innym podejściem.
AKTUALIZACJA: Poszedłem w górę w bajtach, ponieważ zdałem sobie sprawę, że zawiodłem przypadek testowy, w którym w ciągu istnieją liczby, które nie są przyrostkiem. Teraz jestem pewien, że wyrażenie regularne zapewniłoby znacznie lepszą odpowiedź.
AKTUALIZACJA 2: Po świetnych opiniach, więcej bajtów zostało zagranych w golfa!
źródło
b=(`elem`['0'..'9'])
jest krótszy niżisDigit
+import
.dropWhile
można zastąpićsnd.span
np=r(snd$span b$r d)++e
. Jeśli cofniesz testb=(`notElem`...)
, możesz iść dalejd#e|b$last$d=d++e|2>1=r(snd$break b$r d)++e
.|b$last$d=d++e|2>1
części nie można po prostu porzucić? Wszystkie przypadki testowe wydają się działać dobrze. Wypróbuj online!Mathematica, 84 bajty
wprowadź 2 ciągi
wynik
źródło
C (gcc) ,
99989695 bajtówPowinien być w stanie trochę zagrać w golfa ...
Wypróbuj online!
źródło
Noether , 11 bajtów
Wypróbuj tutaj!
Wprowadzając ciąg, umieść go w cudzysłowie
Wyjaśnienie:
źródło
05AB1E , 8 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło