Biorąc pod uwagę ciąg, odwróć go przeplatając. Oto jak to zrobić abcdefghi
i dla abcdefghij
0-indeksowane:
- Oddziel znaki przy parzystych indeksach od znaków przy nieparzystych indeksach:
acegi bdfh
acegi bdfhj - Odwróć znaki przy nieparzystych indeksach:
acegi hfdb
acegi jhfdb - Przeplataj ponownie w jeden ciąg:
ahcfedgbi
ajchefgdib
Zasady
- Musisz obsługiwać zarówno łańcuchy o parzystej, jak i nieparzystej długości.
- 0-indeksowo, musisz odwracać znaki przy nieparzystych indeksach, nawet parzyste.
- 1-indeksowo, oczywiście, musisz odwracać znaki przy parzystych indeksach, a nie nieparzystych.
- Dane wejściowe będą składały się z drukowalnego kodu ASCII (punkty kodowe 32-126), bez znaków nowej linii.
- Możesz przyjmować dane wejściowe jako ciąg znaków lub jako listę znaków (NIE ciągów 1-znakowych). Np.
String
/char[]
Lubchar*
są dozwolone, aleString[]
/char[][]
lubchar**
nie.
Przypadki testowe
Input
Output
Hello, World!
HdlroW ,olle!
Hello World!
H!llooW rlde
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AZCXEVGTIRKPMNOLQJSHUFWDYB
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
}"{$y&w(u*s,q.o0m2k4i6g8e:c<a>_@]B[DYFWHUJSLQNOPMRKTIVGXEZC\A^?`=b;d9f7h5j3l1n/p-r+t)v'x%z#|!~
P
P
AB
AB
xyz
xyz
Dla pustego ciągu zwróć sam pusty ciąg.
Odpowiedzi:
Galaretka , 7 bajtów
To jest pełny program.
Wypróbuj online!
Jak to działa
źródło
MATL , 8 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
2L
jest z „Push [2,2,1j]” i5M
„Push [2,2,1j] ponownie”… A niektórzy twierdzą, że języków golfowych nie da się odczytać!2L
tworzy zdefiniowany literał.5M
to automatyczny schowek, który przechowuje dane wejściowe do ostatnich wywołań funkcji. Można go faktycznie zastąpić2L
tym samym bajtemAlice , 10 bajtów
Wypróbuj online!
Połowa bajtów tego programu jest wydawana na poprawne formatowanie źródła, rzeczywiste polecenia są po prostu
IYRZO
, ponieważ Alice ma odpowiednie wbudowane funkcje do tego zadania.Wyjaśnienie
Jak powiedziałem, mirrors (
/\
), nowa linia i@
są po to, aby ip ruszył we właściwym kierunku i zakończył program na końcu. Rzeczywisty, zlinearyzowany kod jest następujący:Powiedziałbym, że to całkiem proste.
źródło
Java (OpenJDK 8) ,
108969493 bajty1 bajt zapisany przy użyciu @ zgrabny sztuczki Neila korzystania
s[s.length+~i|1]
Wypróbuj online!
źródło
String f(char[]s)
zs->
.. I można zapisać bajt, a także poprzez umieszczenieint
inicjalizacji wewnątrz pętli for:for(int a=s.length,b=0;b<a;b++)
. Wypróbuj online.Python 2 , 52 bajty
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe
źródło
Oktawa, 32 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 48 bajtów
źródło
Galaretka , 9 bajtów
Wypróbuj online!
-1 bajt dzięki Dennisowi
źródło
¢
sięÇ
, że nie potrzebne są³
w linku pomocnika.Siatkówka ,
1713 bajtówWypróbuj online!
Naprawiono błąd dzięki Neilowi.
Zaoszczędzono 4 bajty dzięki Kobi.
Wybiera każdą literę poprzedzoną nieparzystą liczbą znaków i odwraca je. Czyni to, używając
\G
dopasowania, które pasuje do końca ostatniego dopasowania.źródło
$
zamiast#
.\G
na lookbehind i możesz usunąć$
:O^`(?<=\G.).
(12 bajtów)$
ponieważ wszystkie dane wejściowe były posortowane w porządku leksykograficznym. Dodałem nowy przypadek testowy, w którym kod się nie powiedzie.PHP> = 7,1, 58 bajtów
Wersja online
źródło
APL (Dyalog) , 9 bajtów
Wymaga
⎕IO←0
(domyślnie w wielu systemach) do poprawnej definicji parzystych i nieparzystych.Wypróbuj online!
⌽
rewers@
na elementy filtrowane przez maskę wynikają z zastosowania{
funkcja anonimowa2|
mod-2 z⍳
wskaźniki≢
suma (długość) z⍵
argument}
na argumentźródło
Röda , 34 bajty
Wypróbuj online!
Wyjaśnienie
Oto alternatywne rozwiązanie na tym samym bajcie
3634 bajtówJest to anonimowa funkcja, która pobiera dane wejściowe jako ciąg ze strumienia wejściowego.
źródło
Python 2 , 67 bajtów
Wypróbuj online!
źródło
OCaml , 70 bajtów
Wypróbuj online!
źródło
Haskell , 63 bajty
Wypróbuj online! Zastosowanie:
f "some string"
.W przypadku takich nieparzystych ciągów
abcdefghi
funkcjaf
przekazuje ciąg i jego odwrócenie do funkcji!
, która na przemian pobiera znaki z obu ciągów. W przypadku parzystych ciągów to nie działa i musimy najpierw dodać fikcyjny znak, aby uzyskać prawidłowe przesunięcie.źródło
C, 69 bajtów
Dość proste. Przechodzi ciąg, wypisując bieżący lub przeciwny znak.
Nie golfił i wyjaśnił:
źródło
Mathematica, 82 bajty
źródło
Japt ,
1413 bajtów12 bajtów kodu, +1 dla
-P
flagi.Zaoszczędzono 1 bajt dzięki @Shaggy
Wyjaśnienie:
Wypróbuj online!
źródło
ë2,1
jest raczej brzydka. Myślę, że możesz to zrobićó o
, być może ...Åë
też działa.Japt , 8 bajtów
Sprawdź to
źródło
K (oK) , 18 bajtów
Rozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Zinterpretowany głównie od prawej do lewej, znajdź znaki o nieparzystych indeksach, odwróć je i umieść z powrotem w ciągu
źródło
J, 26 bajtów
bez golfa
wyjaśnienie
(0 1$~#)]`(|.@])/.]
Użyj klawisza,/.
aby podzielić dane wejściowe na grupy parzyste / nieparzyste:(0 1$~#)
tworzy definicję grupy, powtarzając cyklicznie 0 i 1 do długości danych wejściowych. Używamy gerundialnej formy Klucza do jej głównego czasownika]`(|.@])
, który stosuje tożsamość do pierwszej grupy i odwraca drugą grupę:(|.@])
.,@,./
Wypróbuj online!
źródło
(\:2|#\)({~/:)#\<.#\.
i 19 bajtów z[:,@,./]]
| ./. ~ 2 | # `[:,@,./]]`|./.~2|#\
, kleszcze zostały przeanalizowane0,@|:]]`|./.~2|#\
Python 3,
9387 bajtówźródło
reversed(s[1::2])
sięs[1::2][::-1]
, aby zapisać 4 bajtyf=lambda s,j="".join:j(j(t)for t in zip(s[::2],s[1::2][::-1]))+("",s[-1])[len(s)%2]
Perl 6 ,
63 5855 bajtówSprawdź to
Sprawdź to
Sprawdź to
Musiałem
roundrobin
raczej użyć zamiastzip
, ponieważzip
zatrzymuje się, gdy tylko jedna z list wejściowych zostanie wyczerpana.źródło
Mathematica, 62 bajty
przyjmuje jako dane wejściowe ciąg
Wypróbuj online!
źródło
APL (Dyalog) , 24 bajty
Bajty grały w golfa dzięki @ Adám
Wypróbuj online!
źródło
GNU APL 1.2, 24 bajty
APL działa od prawej do lewej.
⍴R←⍞
przypisuje dane wejściowe od użytkownika,R
a następnie ocenia jego długość. Zmniejsz to o połowę, mnożąc przez.5
i zastosuj⌊
funkcję podłogi.⍳
zwraca wszystkie liczby od 1 do argumentu.APL działa na tablicach, więc
2×
tablica, którą właśnie otrzymaliśmy⍳
podwaja każdy element, dając nam tylko parzyste indeksy (indeksowane 1, więc opiera się na⎕IO
byciu 1).Podczas uzyskiwania dostępu do wielu indeksów wektora APL podaje elementy przy tych indeksach w wektorze.
R[X←2×⍳⌊.5×⍴R←⍞]
daje tylko parzyste indeksowane elementy.⌽
odwraca elementy. Następnie przypisz odwrócone wartości z powrotem do wskaźników parzystych (przypisanie tych wskaźników doX
zapisania 6 bajtów).◊
jest separatorem instrukcji. Po zakończeniu cofania oceń,R
aby wydrukować wynik.źródło
Perl 5, 46 + 3 dla flagi -F = 49 bajtów
Wykorzystuje
-F
flagi do automatycznego podziału danych wejściowych na tablicę znaków,@F
. Pętle przechodzą przez tablicę i wyprowadzają ten element dla indeksu parzystego lub tego indeksu (plus jeden dla łańcucha nieparzystej długości) od końca dla nieparzystego wejścia.Pobiera dane wejściowe z końcowym znakiem nowej linii. Bez końcowego znaku nowej linii można po prostu zmienić wstępny przyrost
$x
przyrostowy.Trochę bardziej czytelny:
źródło
05AB1E , 21 bajtów
Wypróbuj online!
Zgaduję, że powodem, dla którego jeszcze tego nie zrobiono w 05AB1E, jest obrzydliwe ...
Jeszcze raz
zip
funkcja automatycznego upuszczania ostatniego elementu boli zamiast pomaga.PS Jeśli masz sugestie dotyczące ulepszenia mojej odpowiedzi, opublikuj własne; prawdopodobnie poprawa jest wystarczająca, aby uzyskać punkty. Bardzo się wstydzę tej odpowiedzi.
źródło
q / kdb +,
70564738352927 bajtówRozwiązanie:
Przykład:
Wyjaśnienie:
Znajdź nieparzyste wskaźniki łańcucha, odwróć tę listę, wyciągnij elementy w tych punktach, a następnie przypisz je w miejscu oryginalnego łańcucha.
Edycje:
-9 bajtów; zamiana
count
na(#:)
,til
na(!)
,where
na(&:)
ireverse
na(|:)
.-3 bajty; zamiana
(#:)
na(#)
,(&:)
na(&)
i(|:)
na(|)
-6 bajtów; dokończ pisanie
-2 bajty; używając przydziału zamiast aplikować
źródło
05AB1E , 12 bajtów
Wypróbuj online!
źródło