To wyzwanie jest zainspirowany tym bardzo ładnym Odpowiedź TidB.
W odpowiedzi TidB co osiem znaków ma prawidłową kolejność: gnilwoB edoC
( Code Bowling
wstecz). Pozostałe ciągi jednak są były w dziwny, losowej kolejności.
Twoim wyzwaniem jest to naprawić.
n
Jako dane wejściowe weź (niepusty) ciąg znaków i dodatnią liczbę całkowitą . Ciąg będzie zawierał znaki ASCII z zakresu: 32-126 (spacja do znaku tyldy).
Musisz posortować ciąg w porządku rosnącym (patrząc od lewej, w oparciu o wartość kodu ASCII), ale pomiń każdy n
znak, zaczynając od końca łańcucha. Jako przykład weźmy ciąg abcdABC123
jako dane wejściowe, a n=4
następnie otrzymamy:
abcdABC123 <- Input string. (n=4)
_b___B___3 <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_ <- The remaining characters, sorted
1b2ACBacd3 <- The final string (the output)
Inny przykład:
9876543210 <- Input string (n=2)
_8_6_4_2_0 <- These will not be sorted
1_3_5_7_9_ <- The remaining characters, sorted
1836547290 <- The final string (the output)
Ciąg wejściowy może być przyjęty w dowolnym formacie (ciąg, lista znaków, lista ciągów pojedynczych znaków ...). Wejściową liczbę całkowitą można również przyjąć w opcjonalnym formacie.
Przypadki testowe:
Format będzie n=__
poprzedzony ciągiem wejściowym w następnym wierszu. Dane wyjściowe znajdują się w wierszu poniżej.
n=1 (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#
n=214 (The last character will stay in place. All other are sorted.
&/lpfAVD
&/AVflpD
n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e 0_zM/d$bH`@vKoQ 43Oq*C
g n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C
PHP, 101 bajtów
indeksy ciągu ujemnego (PHP 7.1) oszczędzają 21 bajtów - i być może dzień:
Uruchom z
php -nr '<code>' '<string>' <N>
.awaria
źródło
$i-=1
nie$i--
?$i--
nie działa, jeśli$i
jestNULL
.--$i
czego potrzebowałbym też nie. ;)Oktawa ,
6554 bajtówWypróbuj online!
Wykorzystuje logiczne indeksowanie, aby utworzyć tablicę znaków „ustalonych” i „posortowanych”. Wyjaśnienie:
Sposób, który utworzyłem
l
,s
jest niezerowy, co moim zdaniem jest rozsądnym wymogiem, ponieważ wiele języków używa\0
jako ogranicznika końca łańcucha.źródło
l
i użyjesz wektora liczb indeksowych bezpośrednioPython 2, 191 bajtów
Tak, jestem pewien, że to okropne rozwiązanie.
Wypróbuj online
Nie zamierzam zawracać sobie głowy wyjaśnianiem tego. Było w porządku, dopóki nie zdałem sobie sprawy, że musi być indeksowany od końca. Teraz to potwór. W tym momencie cieszę się, że to działa.
źródło
JavaScript (ES6),
10093 bajtówPobiera dane wejściowe w składni curry
(s)(n)
.Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
Perl 5 , 94 bajtów
88 bajtów kodu +
-F -pl
flagi.Wypróbuj online!
Moim zdaniem jest to zbyt długo, ale już nie takie brzydkie ... W każdym razie nadal próbuję grać w golfa.
źródło
Galaretka ,
1413 bajtówPełny program, który wypisuje ciąg do STD *.
Wypróbuj online!
W jaki sposób?
Nie mogę przestać myśleć, żeistnieje sposób na wykorzystanie faktu, któryḢ
modyfikuje jego dane wejściowe* dla funkcji chciałbyś spłaszczyć dane wyjściowe do pojedynczej listy za pomocą
F
.Na przykład wartość wejściowa
"abcdABC123"
,4
daje:[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
zamiast:
['1','b','2','A','C','B','a','c',',d','3']
źródło
Python + NumPy ,
115114 bajtówPobiera na wejściu zwykłą listę Pythona (nie był pewien, czy przyjęcie tablicy byłoby uważane za koszerne); zwraca tablicę NumPy zawierającą wynik.
Działa poprzez maskowanie odpowiednich wskaźników i sortowanie pozostałych.
źródło
Python 2,
119113 bajtówTworzy listę wszystkich znaków do posortowania, sortuje je i łączy w celu wydrukowania, unikając przy tym odwracania poprzez ujemne indeksowanie.
źródło
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]
oszczędza 5 bajtówRubinowy, 64 bajty
Używa wyrażenia regularnego, aby pobrać wszystkie nieistotne znaki, zarówno w celu zamiany, jak i sortowania.
Wypróbuj online
źródło