Wprowadzenie
Powiedzmy, że S 1 = a...b
i S 2 = ..c..
. Jeśli umieścimy je jeden na drugim, otrzymamy:
a...b
..c..
Scalamy oba ciągi znaków ze .
znakiem płynnym (który może się nakładać). Otrzymujemy to:
a.c.b
Jeśli jeden ciąg jest dłuższy niż drugi, po prostu stosujemy ten sam algorytm:
a.....b
..c..
becomes:
a.c...b
i
a.....b
..c.......
becomes:
a.c...b...
Jeśli dwa znaki się zderzają, używamy po prostu znaku dolnego, np
a..b
...c
becomes:
a..c
Zadanie
Biorąc pod uwagę dwa niepuste ciągi, wyślij scalony ciąg. Uwaga: można założyć, że dane wejściowe zawierają tylko kropki i małe litery (lub wielkie litery, jeśli jest to wygodniejsze).
Przypadki testowe
Input Output
a....b ..c... a.c..b
aaaaaa bbbbbb bbbbbb
ab.ab. b.b.b. bbbab.
a.......b c c.......b
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
a.....b
..c.......
możliwe jest wprowadzanie danych ? Jaka jest zatem wydajność?a.c...b...
.Odpowiedzi:
Galaretka , 5 bajtów
Wprowadzanie za pomocą argumentów wiersza polecenia.
Wypróbuj online!
Wyjaśnienie
To jest bezpośredni port mojej odpowiedzi CJam (zobacz to, aby wyjaśnić, dlaczego to działa):
źródło
CJam, 9 bajtów
Sprawdź to tutaj.
Wyjaśnienie
Wykorzystuje fakt, że
'.' < upper case letters < lower case letters
. W ten sposób, biorąc pod uwagę elementarne maksimum między dwoma łańcuchami, dowolna litera zastępuje literę a.
, ale możemy sprawić, że litera z drugiego wejścia zastąpi literę z pierwszego, jeśli pierwsza litera będzie większa. Zagmatwane? Oto jeden z przypadków testowych jako przykład:Konwertuj najpierw na wielkie litery:
Weź maksimum elementarne:
Konwertuj z powrotem na małe litery:
A oto jak kod to robi:
źródło
eu
/el
sztuczka!JavaScript ES6,
5255 znakówTest
źródło
f('c', 'a....b')
Pyth, 11
Wypróbuj online lub uruchom pakiet testowy
źródło
Poważnie, 10 bajtów
Wypróbuj online!
Używa tej samej strategii, co odpowiedź Martina CJama
Wyjaśnienie:
źródło
Oktawa, 50 bajtów
źródło
!=
przez>
Haskell,
4342 bajtyPrzykład użycia:
"ab.ab." # "b.b.b."
->"bbbab."
.Jak to działa:
jeśli obie listy są niepuste, wybierz nagłówek pierwszej listy, jeśli nagłówek drugiej listy jest
"."
, w przeciwnym razie wybierz nagłówek drugiej listy. Dołącz rekurencyjne połączenie z ogonami list.jeśli przynajmniej jedna lista jest pusta, dołącz obie listy.
Edycja: @Lynn zapisał bajt. Dzięki!
źródło
c<'a'
aby zapisać bajt.Python 2, 47 bajtów
źródło
Julia, 101 bajtów
Jest to funkcja, która akceptuje dwa ciągi i zwraca ciąg.
Obliczamy
m
jako maksymalną długość dwóch sygnałów wejściowych, a następnie definiujemy funkcję,r
która odpowiednio uzupełnia dane wejściowe.
s do długościm
i przechowujemy ją jako argument funkcji. Następniezip
dobieramy odpowiednio wypełnione wejścia i sprawdzamy minimum (zgodnie z kodem ASCII) każdej pary. Jeśli jest to.
, używamy dowolnego znaku, który ma większy kod, w przeciwnym razie używamy tego, który pochodzi z drugiego wejścia. Powstała tablica jestjoin
edytowana w łańcuch i zwracana.źródło
C,
10689 bajtówTestuj na żywo na ideone .
źródło
Siatkówka oka , 55
Linia 5 to pojedyncza spacja. Linia 6 jest pustą linią (bez końcowej nowej linii).
Wypróbuj online.
Zacząłem ten w GNU sed, (z opcją -r). Prosty port do Retina, kiedy już zrozumiałem wyrażenia regularne. Wersja sed to:
źródło
a..k.f....b c...f.g...g. => .c..kffg...g
Python 2, 70 bajtów
Wypróbuj tutaj!
Najpierw tworzymy zip oba ciągi znaków na jedną listę. Jeśli drugi ciąg jest dłuższy niż pierwszy, jest dopełniany
None
(map(None,x,y)
robi to).Następnie iterujemy tę listę
j
jako znak z pierwszego łańcucha ik
ten z drugiego łańcucha. Wybieramy,k
czy nie jest to kropka i inaczejj
.Może to być 61 bajtów, gdybym mógł wyświetlić wynik jako listę znaków zamiast łańcucha.
źródło
Perl, 48 + 3 = 51 bajtów
Bah nie może znaleźć krótszego rozwiązania. (Takie samo podejście jak w odpowiedzi JavaScript @ Qwertiy).
Wymaga
-pl
i pobiera dane wejściowe zstdin
i-i
źródło
$_^=$^I^$^I;s/\.|\0/substr$^I,pos,1or$&/ge
PHP> = 7,1, 58 bajtów
Wersja online
źródło
q / kdb +,
4340 bajtówRozwiązanie:
Przykład:
Wyjaśnienie:
Uwagi: Korzystam z „Biorąc pod uwagę dwa niepuste ciągi ” i zakładam, że dane wejściowe są ciągami. W kdb
"c"
jest atomem,(),"c"
jest łańcuchem, w przeciwnym razie trzeba dodać 6 bajtów do wyniku, ponieważ nie możemy użyć$
do wypełnienia atomu ...źródło