Wprowadzenie
Zobaczmy następujący ciąg:
AABBCCDDEFFGG
Widać, że każda litera została zduplikowana , z wyjątkiem litery E
. Oznacza to, że list E
został zduplikowany . Więc jedyne co musimy zrobić tutaj to, aby odwrócić ten proces, co daje nam następujące ONZ deduplikowane ciąg:
AABBCCDDEEFFGG
Weźmy trudniejszy przykład:
AAAABBBCCCCDD
Widać, że liczba kolejnych jest nieparzysta B
, co oznacza, że jeden z nich BB
został zduplikowany z oryginalnego ciągu. Musimy tylko cofnąć kopię tego listu, co daje nam:
AAAABBBBCCCCDD
Wyzwanie
Biorąc pod uwagę niepusty ciąg zduplikowany , składający się tylko z znaków alfabetu (tylko wielkie lub tylko małe litery), zwróć ciąg nie zduplikowany . Możesz założyć, że w ciągu zawsze będzie co najmniej jeden zduplikowany znak.
Przypadki testowe
AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD
HEY --> HHEEYY
AAAAAAA --> AAAAAAAA
N --> NN
OOQQO --> OOQQOO
ABBB --> AABBBB
ABBA --> AABBAA
To jest golf golfowy , więc wygrywa najkrótsza ważna przesyłka w bajtach!
AABBBB
.ABBB
mapowaniaAABBBB
, nieAABBBBBB
?A BB B
. Znaki, które nie są sparowane (a zatem nie powielone) muszą zostać zduplikowane, w wynikuAA BB BB
czego powstaje ciąg niezduplikowany.Odpowiedzi:
MATL , 7 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Weźmy
'ABBA'
jako przykładowe dane wejściowe.źródło
Siatkówka , 11 bajtów
Wypróbuj online - zawiera wszystkie przypadki testowe
źródło
Perl, 16 bajtów
15 bajtów kodu +
-p
flaga.Aby uruchomić:
źródło
Haskell, 36 bajtów
Przykład użycia:
u "OOQQO"
->"OOQQOO"
.Jeśli ciąg ma co najmniej 2 elementy, weź dwie kopie pierwszego i dołącz odwołanie rekurencyjne za pomocą
Jeśli jest mniej niż dwa elementy (jeden lub zero), weź dwie kopie listy.
źródło
Brachylog , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Ruby, 21 bajtów
20 bajtów plus
-p
flaga.źródło
JavaScript (ES6),
3730 bajtówZapisane 7 bajtów przy użyciu znacznie bardziej wydajne „$ 1 $ 1” jak [inne] [odpowiedzi] zrobił
Przypadki testowe
Pokaż fragment kodu
źródło
Mathematica, 41 bajtów
Nienazwana funkcja, która wprowadza ciąg i wyprowadza ciąg. Całkowicie deduplikuj, a następnie całkowicie nieeduplikuj. Niezbyt krótko, ale na razie nie mogłem nic lepszego.
źródło
Befunge 98 , 24 bajtów
Wypróbuj online!
$
można łatwo zastąpić-
, a drugi za@
pomocą;
.Myślę, że można to pograć w golfa ze względu
-
na początek zarówno-,
(lub$,
powyżej), jak i-\,
.W jaki sposób?
źródło
Java 7, 58 bajtów
Nie golfowany:
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
PHP, 65 bajtów, bez wyrażenia regularnego
pobiera dane wejściowe z argumentu wiersza poleceń. Uruchom z
-r
.regex? W PHP wyrażenie regularne używane przez większość odpowiedzi powiela każdy znak. byłoby 44 bajtów:
źródło
Brain-Flak 69 bajtów
Obejmuje +3 za
-c
Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka , 9 bajtów
Wypróbuj online!
źródło
V 10 bajtów
TryItOnline
Po prostu znajdź i zamień wyrażenie regularne jak wszystkie pozostałe w wątku. Jedyną różnicą jest to, że mogę zastąpić wszystko, co wymagałoby
\
przed nim, postacią o tej samej wartości ascii, ale z wysokim zestawem bitów. ((
00001000 staje się¨
10101000)źródło
Perl 6 , 17 bajtów
z przełącznikiem wiersza polecenia -p
Przykład:
źródło
Rakieta 261 bajtów
Nie golfowany:
Testowanie:
Wydajność:
źródło
05AB1E , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python3,
10294 bajtyDzięki xnor za oszczędność 8 bajtów! -> bithack.
źródło
x+x%2
jakox&-2
.s.count(c)&-2
i zwrócił pusty ciąg ...: / Jakieś myśli?x+1&-2
powinienem to zrobić. Dziwki idą do siebie, a szanse zaokrąglają się do nich.R, 81 bajtów
Odczytuje ciąg ze standardowego wejścia, splajnuje na wektor znaków i wykonuje kodowanie długości przebiegu (rle). Następnie powtórz każdą wartość z rle, sumę długości i mod długości
2
.Jeśli możemy odczytać dane wejściowe oddzielone spacją (domyślnie jako wektor / tablica znaków), możemy pominąć część dzielącą, a program zmniejsza się do 64 bajtów:
źródło
> <> (Fish) 39 bajtów
Jestem całkiem pewien, że można w nią grać w golfa przy użyciu innej techniki.
Pobiera dane wejściowe i porównuje z bieżącym elementem stosu, jeśli jest inny, wydrukuje pierwszy element stosu dwa razy, jeśli to samo, wydrukuje je oba.
Do pustego stosu dostarczana jest wartość 0, która nic nie drukuje, dzięki czemu można go dołączyć w dowolnym momencie.
źródło
Pyth, 15 bajtów
Sprawdź tutaj wszystkie przypadki testowe.
Podziękowania dla Luisa Mendo za metodologię.
Wyjaśnienie
Jak to często bywa, wydaje mi się, że może to być krótsze. Myślę, że powinien istnieć lepszy sposób na wyodrębnienie elementów z listy niż to, czego używam tutaj.
źródło
PowerShell , 28 bajtów
Wypróbuj online!(obejmuje wszystkie przypadki testowe)
Odpowiedź portu Retina . Jedyne, na co warto zwrócić uwagę, to to, że mamy
$args
zamiast zwykłego$args[0]
(ponieważ-replace
będą iterować po każdym elemencie w tablicy wejściowej, możemy zagrać poza indeksem), i'$1$1'
muszą być pojedynczymi cudzysłowami, aby zostały zastąpione wyrażeniem regularnym zmienne zamiast traktowane jak zmienne PowerShell (co by się stało, gdyby były podwójnymi cudzysłowami).źródło
C, 67 bajtów
Zadzwoń z:
źródło
pieprzenie mózgu, 22 bajty
Wypróbuj online.
Drukuje bieżący znak dwa razy, chyba że jest on równy znakowi, który został właśnie wydrukowany dwa razy.
źródło