Zainspirowany tym wyzwaniem (a ściślej jego błędnym odczytaniem) opracowałem następujące wyzwanie:
Biorąc pod uwagę ciąg wejściowy S, odwróć kolejność wszystkich wielkich liter i wszystkich małych liter. Pozostaw wszystkie znaki inne niż litery na miejscu. Na przykład:
Zauważ, że wielkie litery W
(pierwsza duża litera) zostały zastąpione przez H
(ostatnie). To samo dotyczy małych liter: „d” (pierwszy) jest zamieniany na e
(ostatni), l
(drugi) jest zastępowany przez l
(pen-ultimate) ... Wszystkie znaki nieliterowe pozostają na miejscu.
Wkład
- Dane wejściowe to ciąg znaków zawierający tylko znaki ASCII z zakresu 32–126.
- Dane wejściowe mają co najmniej 1 znak i nie przekroczą limitu Twojego języka.
Wydajność
- Ten sam ciąg znaków, zamieniając znaki zgodnie z opisem.
Dodatkowe zasady
- Standardowe luki są zabronione
- Odpowiedź musi być pełnym programem lub funkcją, a nie fragmentem kodu lub wpisem REPL.
- code-golf , wygrywa najkrótsza odpowiedź w bajtach.
Przypadki testowe
A
A
Ok
Ok
OK
KO
Hello, World!
Wdlro, Holle!
0123456789
0123456789
The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh
odd
ddo
racecar
racecar
EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!
.+
na.*
)Odpowiedzi:
MATL , 14 bajtów
Wypróbuj w MATL Online
Wyjaśnienie
źródło
2:"tttXk>f)5MP(Yo
17 bajtówRetina , 19 bajtów
Retina nie ma bezpośredniego sposobu na odwrócenie łańcucha, ale możemy to zrobić, wykorzystując etap sortowania:
Sortuj (
O
), odczytując je jako liczby (#
), a następnie odwróć kolejność (^
) wszystkich ciągów pasujących do podanego wyrażenia regularnego (małe litery w pierwszym wierszu i wielkie litery w drugim).Działa to, ponieważ gdy próbujemy odczytać ciągi bez znaków numerycznych jako liczby, są one traktowane jako
0
, więc wszystkie znaki mają tę samą wartość do sortowania. Ponieważ sortowanie jest stabilne, pozostają one w tej samej kolejności, a odwrócenie ich powoduje odwrócenie oryginalnego łańcucha.Wypróbuj online!
źródło
Perl , 45 bajtów
44 bajty kodu +
-p
flaga.Wypróbuj online!
Klasy znaków Unicode
\p{Lu}
i\p{Ll}
dopasowanie odpowiednio wielkich i małych liter.Zwróci więc
/\p{L$c}/
listę wszystkich wielkich (lub małych) liter (i zapisze ją w środku@T
).A następnie wyrażenie regularne
s/\p{$c}/pop@T/ge
zastąpi każdą (wielką, a następnie małą) literę ostatnią literą@T
podczas usuwania@T
.źródło
JavaScript (ES6),
74737170 bajtówEdycja: Zapisano 1 bajt dzięki @Arnauld.
źródło
JavaScript (ES6), 92 bajty
Tam dostał się sposób, aby skorzystać z podobieństwa regexes ...
Testowy fragment kodu
Pokaż fragment kodu
źródło
f
? Czy nie powinno to być w liczbie bajtów?F
a następnie wywołuje ją dwukrotnie. Funkcja zewnętrzna nie wywołuje się w żadnym momencie..*
w wyrażeniach regularnych?a
in([x],a,y)=>
)Perl 6 ,
7569 bajtówJak to działa
my @a=.comb;
Podziel ciąg na znaki i zapisz je w tablicy.
for /<:Lu>/,/<:Ll>/
Dla dwóch wyrażeń regularnych pasujących odpowiednio do wielkich i małych liter ...
@(grep $_,@a)
Uzyskaj wycinek wszystkich pozycji tablicy pasujących do wyrażenia regularnego.
.&{@$_=[R,] $_}
Przypisz odwrotność plasterka do siebie.
[~] @a
Połącz zmodyfikowaną tablicę, aby ponownie utworzyć ciąg, i zwróć go.
-6 bajtów, kradnąc pomysł użycia klas Unicode zamiast zakresów znaków, z rozwiązania @ Dada.
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Jak to działa
źródło
Narzędzia Bash + Unix,
122121 bajtówWypróbuj online!
Niezbyt krótko; może ktoś może zagrać w golfa dalej.
Wejście na stdin, wyjście na stdout.
Działa to poprawnie na wejściach mniejszych niż 200 znaków.
(W rzeczywistości poprawnie obsługuje dowolny ciąg zawierający mniej niż 200 małych liter i mniej niż 200 wielkich liter).
Jeśli zwiększysz 99 w kodzie do 102 (kosztem jednego dodatkowego bajtu), będzie on obsługiwał łańcuchy o długości do 205 znaków.
Nie możesz jednak zwiększyć 99 w kodzie powyżej 102, ponieważ wtedy przekroczysz maksymalną długość argumentu sed.
Oto wersja bez żadnego konkretnego ograniczenia rozmiaru wejściowego, ale liczba ta jest nieco dłuższa, 137 bajtów. (Ta dłuższa wersja zapisuje do pliku pomocniczego o nazwie t.)
Przebiegi testowe:
źródło
sed
implementacji zainstalowanej w twoim systemie, ale do GNUsed
możesz dodać-r
opcję i usunąć\
ucieczkę wszystkich nawiasów.Python 2 , 115 bajtów
Wypróbuj online!
źródło
exec
parsowany jest jak zwykły kod Pythona, więc pętla for musi znajdować się w osobnej linii.Java (OpenJDK 8) , 271 bajtów
Wypróbuj online!
źródło
s->new String...
char[]o=s.toCharArray();char c;int b;
dochar o[]=s.toCharArray(),c,b;
; i oba&&
do&
”; ic=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);
doc=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);
( łącznie 259 bajtów ). I pewnie brakowało mi kilku rzeczy, aby bardziej zagrać w golfa. Ponadto, jeśli jeszcze go nie widziałeś, porady dotyczące gry w golfa w Javie mogą być interesujące do przeczytania.R , 107 bajtów
Dostosowane z mojej odpowiedzi na powiązane wyzwanie. Jest to znacznie łatwiejsze niż zwykła zamiana par. Zastanawiam się, czy mógłbym dostać mniej niż 100 z kilkoma golfami ...
Wypróbuj online!
źródło