Wkład
ciągi losowe składające się ze znaków ASCII z zakresu .
Wydajność
Dane wyjściowe uzyskuje się poprzez zastosowanie kolejnych obrotów do ciągu wejściowego.
Dla każdej litery ( [a-zA-Z]
) w ciągu wejściowym, przechodząc od lewej do prawej:
- jeśli litera jest pisana wielkimi literami, obróć wszystkie znaki przed nią o jedną pozycję w lewo
- jeśli litera jest pisana małymi literami, obróć wszystkie znaki przed nią o jedną pozycję w prawo
Przykład
Dane wejściowe: „Cb-Ad”
- Pierwsza litera to „ C ”. Powinniśmy wykonać obrót w lewo, ale przed tym „ C ” nie ma żadnej postaci . Nie ma więc nic do obracania.
- Następna litera to „ b ”. Obracamy „ C ” w prawo. Ponieważ jest to jedna postać, pozostaje niezmieniona.
- Znak „ - ” nie powoduje obrotu, ponieważ nie jest literą.
- Następna litera to „ A ”. Obracamy „ Cb- ” w lewo, co daje „ bC Ad”
- Czwarta i ostatnia litera to „ d ”. Obracamy „ b-CA ” w prawo, co daje „ Ab-C d”
Dlatego oczekiwanym wynikiem jest „ Ab-Cd ”.
Zasady
- Możesz przyjmować dane wejściowe jako ciąg znaków lub tablicę znaków - które mogą, ale nie muszą być takie same, w zależności od języka.
- Możesz również wypisać tablicę znaków zamiast ciągu.
- To jest kod-golf
ogl-edocf
Przypadki testowe
"cbad" -> "abcd"
"ACBD" -> "ABCD"
"Cb-Ad" -> "Ab-Cd"
"caeBDF" -> "aBcDeF"
"aEcbDF" -> "abcDEF"
"ogl-edocf" -> "code-golf"
"W o,ollelrHd!" -> "Hello, World!"
"ti HIs SSta ET!" -> "tHis IS a tEST!"
code-golf
string
code-golf
string
code-golf
string
parsing
brainfuck
code-challenge
python
hello-world
error-message
code-golf
string
code-golf
number
integer
counting
subsequence
code-golf
string
cipher
code-golf
array-manipulation
arithmetic
integer
matrix
code-golf
math
sequence
code-golf
restricted-source
pi
popularity-contest
cops-and-robbers
polyglot
popularity-contest
cops-and-robbers
polyglot
code-golf
file-system
king-of-the-hill
code-golf
number
sequence
integer
rational-numbers
string
code-challenge
source-layout
code-golf
ascii-art
king-of-the-hill
code-golf
array-manipulation
sorting
code-golf
string
code-golf
restricted-source
source-layout
tips
math
code-challenge
permutations
logic-gates
code-golf
number
random
integer
code-golf
math
code-golf
math
number
decision-problem
king-of-the-hill
python
board-game
code-challenge
brainfuck
busy-beaver
code-golf
number
cops-and-robbers
polyglot
obfuscation
answer-chaining
code-golf
number
integer
conversion
code-golf
string
parsing
code-golf
ascii-art
number
king-of-the-hill
javascript
code-golf
source-layout
radiation-hardening
code-golf
array-manipulation
matrix
code-golf
string
graph-theory
code-golf
array-manipulation
decision-problem
code-golf
string
ascii-art
code-golf
string
code-golf
array-manipulation
Arnauld
źródło
źródło
.U
aby zmniejszyć wartość wejściową z 2. wartości. Pozwala to upuszczać=k
od początku i)k
od końca, ponieważ zarówno wejście, jak i drukowanie są niejawne. Pełny program:.U+.>b-}ZG}Zr1GZ
- linkPython 2 ,
1009895 bajtówWypróbuj online!
źródło
Galaretka , 14 bajtów
Monadyczny link akceptujący listę znaków, który daje listę znaków.
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
I
robić tego samego, coḅ-
w tym przypadku? Wydaje się, że tutaj działa , ale nie w twoim kodzie. Jestem trochę zdezorientowany dlaczego. Ponadto, czy istnieje polecenie wypychania całych list jako osobnych elementów na stos w Jelly (poczekaj, Jelly nie jest językiem opartym na stosie, prawda?)? W takim przypadku można użyć prostego odejmowania i jeśli nie mylę się, nie będziesz potrzebować negacji (podobnie jak w ostatniej edycji w mojej odpowiedzi 05AB1E).I
daje listę - dodaj,ŒṘ
aby zobaczyć pełną reprezentację . TakØẠŒHċ€IṪN⁸ṙ;ð/
by działało.05AB1E ,
18171614 bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
K4 ,
4333 bajtyRozwiązanie:
Przykłady:
Wyjaśnienie:
Iteruj po ciągu wejściowym, obracając poprzednie wyjście o 1, -1 lub 0 w zależności od jego pozycji na liście „a-zA-Z”.
Uwagi:
źródło
> <> ,
4543 bajtówWypróbuj online!
Fakt, że> <> ma rotację stosu, pomaga, ale nie trzeba sprawdzać wielkości liter.
Wyjaśnienie:
źródło
Haskell ,
10191 bajtów-10 bajtów zainspirowanych odpowiedzią Curtisa Bechtela (użyj
'@'<c,c<'['
ponadelem c['A'..'Z']
i odpowiedni zakres dla małych liter).Wypróbuj online!
Wyjaśnienie / Niegolfowany
Operator
(!)
pobiera niepusty ciąg,x
na którym możemy dopasować wzór i znak:Teraz możemy zmniejszyć ogon wejścia od lewej do prawej, zaczynając od pierwszego znaku wejścia, używając:
źródło
Haskell ,
12292 bajtyDzięki BWO za sugestie! Dużo też zaoszczędziłem, przyjmując nieco inne podejście niż moja pierwotna odpowiedź.
Wypróbuj online!
źródło
(#)
, użyć,
ponad&&
, użyć[l!!0,c]
ponadhead l:[c]
,1>0
zamiastTrue
, nie musisz liczyćf=
i możesz założyć niepuste dane wejściowe, które oszczędzająl==[]
wartę - oszczędzając Ci 13 bajtów: Wypróbuj online!isLower
iisUpper
golfa , mam nadzieję, że nic ci się nie stanie, w przeciwnym razie cofnę edycję.JavaScript (Node.js) ,
116102 bajtówWypróbuj online!
Oryginał (
116111106B)s=>Buffer(s).map((x,i)=>s=(t=s[S="slice"](i),i<2)?s:x>64&x<91?s[S](1,i)+s[0]+t:x>96&x<123?s[i-1]+s[S](0,i-1)+t:s)&&s
s=>Buffer(s).map((x,i)=>i<2|--x%32>25|x<64?s:s=[s[S="slice"](1,i)+s[0],s[i-1]+s[S](0,i-1)][+(x>95)]+s[S](i))&&s
s=>Buffer(s).map((x,i)=>!i|--x%32>25|x<64?s:s=(w=x>95,t=s.slice(1-w,i-w),w?s[i-1]+t:t+s[0])+s.slice(i))&&s
źródło
eval(`regex`)
niż użycie konstruktoraeval(`regex`)
, więc -2 + 2 = 0, a zatem nie pomaga zmniejszyć liczby bajtów.eval()
gdy używana jest co najmniej jedna flaga:eval('/./g')
jest o 3 bajty krótsza niżRegExp('.','g')
.Rubinowy , 51 bajtów
Wypróbuj online!
Dane wejściowe i wyjściowe są tablicami znaków
Sztuczka:
Kod jest dość prosty, z wyjątkiem być może części rotacyjnej:
x jest pojedynczym znakiem, który może być literą, pierwsze wyrażenie
x=~/\W/
zwraca,nil
jeśli jest literą, a 0 w przeciwnym razie. Jeśli jest to 0, skończyliśmy, jeśli nie, logiczneor
sprawdza drugie wyrażenie:?_<=>x
zwraca -1 dla wielkich liter i 1 dla małych. Zatem obrót jest następujący:źródło
Czerwony , 110 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Perl 6 , 47 bajtów
Wypróbuj online!
Działa na szeregu znaków.
źródło
Japt,
171614 bajtówPobiera dane wejściowe jako tablicę znaków, generuje ciąg znaków
Spróbuj
Wyjaśnienie
źródło
Galaretka , 19 bajtów
Wypróbuj online!
źródło
Java 10,
149119 bajtówPort odpowiedzi @ShieruAsakoto JavaScript , więc upewnij się, że go głosujesz.
Wypróbuj online.
Wyjaśnienie:
źródło
Stax , 32 bajty
Uruchom i debuguj
Dużo wymiany stosów, które prawdopodobnie nie są potrzebne. Naprawdę chciałbym to bardziej obniżyć, ale miałem problemy z uporządkowaniem stosu. Może ktoś to zrozumie, jeśli się nudzi. Będę nad tym pracował.
źródło
Attache , 69 bajtów
Wypróbuj online!
Wyjaśnienie
Ogólny kształt
Funkcja wygląda ogólnie tak:
Który składa się
{...}
na każdym elemencie w zakresie od0
do#input - 1
(Iota
), zaczynając od danych wejściowych jako źródła.Funkcja wewnętrzna
Następująca funkcja jest wywoływana jako
f[building, index]
i jest wywoływana z każdym indeksem od0
do#input
wyłącznego.@SplitAt
wywołujeSplitAt
te argumenty, dzieląc ciąg wejściowyindex
.Zasadniczo ta funkcja obraca lewą część łańcucha zgodnie z pierwszym znakiem prawej części.
źródło
Węgiel drzewny , 20 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla nad znakami wejściowymi.
Mapuj dotychczasowy ciąg zebranych znaków, cyklicznie indeksując zebrane do tej pory znaki, zwiększając lub zmniejszając indeks, jeśli bieżący znak ma odpowiednio małe lub duże litery. To kończy obrót. Następny znak jest następnie konkatenowany, a wynik przypisywany z powrotem do łańcucha.
Wydrukuj wynik.
źródło
R ,
107102100 bajtówOgromny, ponieważ manipulacja sznurkiem R jest nieporęczna. Czy ktoś może dostać mniej niż 100?
-5 bajtów przy użyciu sztuczki „ustaw zmienne pętli na F, aby uniknąć inicjalizacji”.
-2 bajty, zakładając, że wszystkie znaki są drukowalne i używają
2*!k%%97>25
raczej niż2*k%in%97:122
do testowania małych liter, stosując pierwszeństwo operatora.Wypróbuj online!
źródło
Japt ,
2523 bajtówPoddaję się, nie mogę tego skrócić
-2 bajty z @ETHproductions
Wypróbuj online!
źródło
éXè\a -Xè\A
:-( Możesz zaoszczędzić dwa bajty, zmieniając podwójną spację na a)
i usuwając©
(domyślny przecinek oznacza, żeU
wciąż jest wyprowadzany)ÃU
i używając-h
flagi.Siatkówka ,
676458 bajtów-9 bajtów dzięki @Neil usuwając trzy niepotrzebne
?
, które dodałem, a także niepotrzebne(.*)
w innym przypadku.Wypróbuj online lub sprawdź wszystkie przypadki testowe . (UWAGA: Dane wyjściowe z końcowym znakiem nowej linii. Nagłówek w pakiecie testowym służy do testowania każdej linii wejściowej jako osobnego przypadku testowego, a stopka służy do usunięcia tej linii końcowej w celu uzyskania bardziej zwartych wyników.)
Wyjaśnienie:
Przygotuj nowy wiersz przed wejściem:
Kontynuuj wymianę, dopóki znajdziemy dopasowanie:
Cała reszta to trzy różne kontrole połączone:
Jeśli znak zaraz po nowej linii jest małą literą: obróć wszystko przed nową linią jeden raz w prawo, a następnie dodaj ten znak i nową linię:
Jeśli znak zaraz po nowej linii jest wielką literą: obróć wszystko przed nową linią jeden raz w lewo, a następnie dodaj ten znak i nową linię:
W przeciwnym razie (ani mała, ani wielka litera): wystarczy przesunąć raz nową linię w prawo w celu następnej „iteracji”:
Te trzy powyższe kontrole są łączone z wyrażeniami regularnymi OR (
|
) i większymi zamiennikami grup, aby działały jakif(lowercase) ... elseif(uppercase) ... else ...
:źródło
?
s - jeśli nie ma jeszcze nic do obrócenia, nie ma znaczenia, czy jest list.(.*)¶(.)
ze$1$2¶
można uprościć do zastąpienia¶(.)
z$1¶
jak inne przechwytywania nie wpływa na wynik.MATL , 20 bajtów
Wypróbuj online!
-4 bajty dzięki Luisowi Mendo.
Konwertuje wielkie / małe / nieliterowe na [-1,0,1] (pierwsza połowa programu). Stosuje zmianę biegów kolejno (druga połowa). Niszczę mózg, jeśli istnieje lepszy sposób na mapowanie wielkich / małych liter na [-1,0,1] (patrz druga wersja), a być może sposób na natychmiastowe odwrócenie łańcucha, aby pozbyć się dwóch
w
jest potrzebny do&)
.źródło
C (clang) ,
168159153119 bajtów-26 dzięki @ceilingcat
Wypróbuj online!
źródło
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
zamiasta[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pyth, 16 bajtów
Wypróbuj tutaj!
Wyjaśnienie:
źródło