Cel
Utwórz funkcję, aby odwrócić konkatenację łańcucha
Wkład
Dwa ciągi (alfanumeryczne + spacje), gdzie jeden należy odjąć dla drugiego.
- Możesz założyć, że ciąg do odjęcia nigdy nie będzie większy niż drugi.
Wydajność
Wynik odejmowania
Odejmowanie
Powinieneś usunąć jeden ciąg z początku lub końca innego ciągu. Jeśli ciąg jest obecny na początku i na końcu, możesz usunąć tylko jeden, który zostanie usunięty, zależy od Ciebie.
Jeśli ciąg nie znajduje się na początku ani na końcu, lub nie jest dokładnym dopasowaniem, oznacza to nieprawidłowe odejmowanie i należy wypisać oryginalny ciąg.
Przypadki testowe
Prawidłowe odejmowanie
'abcde','ab' -> 'cde'
'abcde','cde' -> 'ab'
'abab','ab' -> 'ab'
'abcab','ab' -> 'abc' or 'cab'
'ababcde','ab' -> 'abcde'
'acdbcd','cd' -> 'acdb'
'abcde','abcde' -> ''
'abcde','' -> 'abcde'
'','' -> ''
Nieprawidłowe odjęcie (zwraca oryginalny ciąg)
'abcde','ae' -> 'abcde'
'abcde','aa' -> 'abcde'
'abcde','bcd' -> 'abcde'
'abcde','xab' -> 'abcde'
'abcde','yde' -> 'abcde'
Nieprawidłowe dane wejściowe (nie muszą być obsługiwane)
'','a' -> ''
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
cde
? Co rozumiesz przez „ważny”? Czy musimy oceniać ważność danych wejściowych, czy masz na myśli, że nie otrzymamy nieprawidłowych danych wejściowych?'abcde','bcd' -> 'abcde'
, za złamanie mojego rozwiązania'ababcde', 'ab'
→'abcde'
jako przypadek testowy. Niektóre naiwne algorytmy zawodzą na tym.Odpowiedzi:
Java 8,
46454440 bajtów-1 bajt dzięki TheLethalCoder
-1 bajt, bo jestem głupi (dzięki Rod!)
-4 bajty dzięki Kevin Cruijssen
Wypróbuj online! (obejmuje wszystkie przypadki testowe)
Odpowiedź Java rzeczywiście przewyższa kilka innych praktycznych języków. Uśmiecha się (a teraz bije JS!)
źródło
a->b->
First
, abyAll
do -2 bajtów. Ze względu na^
i$
zawsze znajduje się na końcu lub na początku łańcucha, więc nawet przyreplaceAll
nim zastępuje go tylko raz. Wypróbuj tutaj. PS: Dodałem poprzednie liczby bajtów przekreślone do twojej odpowiedzi, co zwykle dzieje się po edycji kodu w golfa tutaj na PPCG.All
First
"abab" + "ab" -> ""
JavaScript (ES6), 41 bajtów
Pobiera dane wejściowe poprzez składnię curry, tj
f("abab")("ab")
.źródło
eval()
do konstruowania RegExes ?!Brachylog (Try It Online!), 12 bajtów
Wypróbuj online!
Pobiera ciąg znaków do odjęcia od standardowego wejścia, a ciąg znaków do odjęcia jako argument wiersza poleceń.
Wyjaśnienie
źródło
Retina , 21 bajtów
1 bajt dzięki Martinowi Enderowi.
Wypróbuj online!
źródło
JavaScript (ES6),
76704541 bajtówSpróbuj
źródło
new
.Perl 6 , 21 bajtów
Spróbuj
Rozszerzony:
źródło
Japt ,
119 bajtówWypróbuj online!
źródło
TI-Basic (TI-84 Plus CE), 63 bajty
źródło
Ans
ogóle odnosi się do czwartej linii?Ans
odnosi się do ostatnio ocenianej wartości, więc w tym przypadku odnosi się do wartości zwróconej przezinString(
, która jest indeksem podłańcuchaStr2
w ciąguStr0
lub 0, jeśli podłańcuch nie pojawia się. Instrukcja if nie modyfikuje wartości Ans, więc w czwartym wierszu indeks jest nadal wAns
.inString
działa. Niezły golf!Mathematica, 162 bajty
testuj styl wprowadzania [„abcde”, „ab”]
źródło
#
zamiast#1
- oznaczają dokładnie to samo. Ponadto, zamiast używaćStringJoin@t
, możesz oszukiwać, łącząc z nim pusty ciąg""<>t
, który automatycznie łączy również wszystkot
razem. Czy widziałeś stronę ze wskazówkami golfowymi Mathematica ?t={};
na początku), ale może być łatwiej zastosować całkowicie inne podejście - czy próbowałeś użyćStringReplace
funkcjonować?c=Characters;a=c@#;b=c@#2;
l@Intersection[a,b]
jestl[a∩b]
.Python,
696864575145 bajtówSkończyło się to zupełnie innym rozwiązaniem z Regex.
Dzięki Value Ink za -2 bajty!
i Felipe Nardi Batista za ogromne -6 bajtów!
Wypróbuj online!
źródło
re.sub(c.join("^|$"),'',s,1)
c+'$|^'+c
Bash ,
666149 bajtówWypróbuj online!
mniej golfa:
Wykorzystuje wielkość liter do testowania początku lub końca oraz odejmowanie przedrostka / sufiksu tablicy (% / #)
źródło
case
, ale dłużej niż to konieczne. 2. i 3. wzór mógłby zostać połączone w jeden:*)c=${1#$2};;
. Potem tylko 2 oddziały byłby krótszy doecho
siebie bezpośrednio, zamiast używać zmiennej$c
:case $1 in *$2)echo ${1%$2};;*)echo ${1#$2};;esac
. Czy można nadal używać go, ale bezcase
:c=${1%$2};[[ $c = $1 ]]&&c=${1#$2};echo $c
.APL (Dyalog) ,
3130 bajtów-1 dzięki Zacharý .
To faktycznie używa odwrotnej (tj. Odwrotnej) konkatenacji! Bierze oryginalny ciąg jako lewy argument, a co należy odjąć jako prawy argument.
Wypróbuj online!
Nie golfowany:
Legenda:
{
…}
Anonimowa funkcja⍺
lewy argument bieżącej funkcji⍵
prawy argument bieżącej funkcji0::
… Jeśli wystąpi jakikolwiek błąd, wykonaj to, w przeciwnym razie…⍣¯1⊢
odwrotność,∘⍵
konkatenacja ⍵ po prawej stronie⍵,
konkatenat ⍵ po lewej stronieźródło
{0::⍺{0::⍺⋄,∘⍵⍣¯1⊢⍺}⍵⋄⍵,⍣¯1⊢⍺}
.PHP, 54 bajtów
Przypadki testowe
źródło
Python 2 , 68 bajtów
Wypróbuj online!
źródło
Haskell , 49 bajtów
Wypróbuj online! Zastosowanie:
f"" "abcdef" "ab"
. Alternatywnie, zdefiniuj(-)=f""
i użyj podobnie"abcdef" - "ab"
.To rozwiązanie wolne od wyrażeń regularnych działa poprzez rekurencyjne dzielenie łańcucha na wszystkie jego przedrostki i przedrostki oraz sprawdzanie, czy ciąg, który ma zostać odjęty, pasuje do jednego z nich.
źródło
Python 2 ,
7265 bajtówWypróbuj online!
-7 bajtów dzięki @FelipeNardiBatista
źródło
C #, 88 bajtów
Kompiluje do
Func<string, Func<string, string>>
.źródło
Ruby (wyrażenie lambda), 29 bajtów
Tak, interpolacja wyrażeń regularnych! Wymaga subthends-bezpiecznych wyrażeń regularnych, ale zgodnie z wyzwaniem jest to w porządku.
źródło
Tcl , 37 bajtów
Wypróbuj online! (teraz uruchamiane wszystkie testy)
Tcl jest prosty.
proc s {a b}
definiuje nazwaną funkcję,s
która pobiera parametrya
ib
.regsub
podstawia{}
, czyli pusty ciąg, na wartość,b
kiedy jest na początku lub na końcua
. Zwrot jest niejawny.źródło
C, 96 bajtów
Powszechnie wiadomo, że manipulowanie strunami w C jest uciążliwe, ponieważ rozszerzenie gry w golfa byłoby skrajnym masochistycznym. Brzmi dla mnie w porządku.
Jeden z mniej czytelnych programów, które napisałem. Pobiera dwa dane wejściowe (pomimo tego, jak wygląda funkcja),
char**
wskazując na ciąg, aby dekonkatować ichar*
który jest ciągiem, który należy usunąć. Wskaźnik wejściowy jest edytowany w miejscu i staje się wyjściem (kto i tak ma wątpliwości dotyczące wycieków pamięci).Przykładowe użycie:
źródło
AWK ,
2132 bajtówWypróbuj online!
Oryginalne przesłanie naiwnie zastąpiło tekst w pierwszym ciągu, nie tylko na początku lub na końcu.
Wypróbuj online!
Początkowo wypróbowany bez nawiasów klamrowych, ale wymagał sztuczek, aby wydrukować puste linie i / lub brak pasujących elementów, co ostatecznie spowodowało dodanie większej liczby bajtów niż ta wersja.
źródło
R,
204241 bajtów-1 bajt dzięki MickyT!
Zwraca anonimową funkcję (która ma argumenty w kolejności
b,a
). Oblicza różnicę ciągówa-b
.sub
jest prostym podstawieniem, które zamienia pierwsze wystąpienie wzorca, w tym przypadku pusty ciąg''
. Konstruuje wyrażenie regularne wsprintf
celu dopasowania tylko na początku i na końcu łańcucha. Wymaga zainstalowaniapryr
pakietu.W łączu TIO używa bardziej szczegółowej
function(a,b)
definicji funkcji dla czterech kolejnych bajtów.Wypróbuj online!
źródło
'abcde','bcd' -> 'abcde'
sprawą?sub
jest prostym podstawieniem, które po prostu zamienia pierwsze wystąpienieb
ina
”: Czy to zamieni się, jeśli drugi ciąg znajduje się w środku pierwszego ciągu?sprintf('^%s|%s$',b,b)
Common Lisp, 121 bajtów
Wypróbuj online!
Zwykły marny Common Lisp!
Wersja bez golfa:
źródło
Kotlin , 91 bajtów
Wypróbuj online!
źródło
{a,b->var c=a.removePrefix(b);if(a==c){c=a.removeSuffix(b)};c}
PowerShell,
3440 bajtów+6 bajtów po
Invalid Subtraction
dodaniu przypadków testowychKomentarz:
Wyrażenie regularne
^$t|$t$
nie działa zgodnie z oczekiwaniami: zastępuje oba dopasowania zamiast jednego (flagag
zawsze włączona). Jesteśmy więc zmuszeni do korzystania z negatywnej grupy wyprzedzającej.Skrypt testowy:
Wydajność:
źródło
QBIC , 57 bajtów
Whegh, to jest bałagan w QBIC / QBasic ...
źródło
Lua ,
7165 bajtówPrzyjmowanie sugestii
Wypróbuj online!
źródło
Początkowo źle odczytałem instrukcje. Dzięki, Ørjan Johansen za zwrócenie uwagi na mój błąd!
PowerShell ,
4651 bajtówWypróbuj online!
źródło
abcde
-bcd
nie występuje na obu końcach łańcucha.Excel, 129 bajtów
źródło
sed ,
5653 bajtówWypróbuj online!
źródło