Wyzwanie
Napisz funkcję lub program, który akceptuje wiersz danych wejściowych, wykonuje bardzo specyficzne i dziwnie znajome losowanie swoich znaków i wyświetla wynik.
Wymagane tasowanie można opisać za pomocą następującego algorytmu:
- Oznacz każdy znak na wejściu indeksem 1.
- Wpisz znak numer 1 jako wynik.
- Zaczynając od znaku 2, zapisz co drugi znak na wyjściu w kolejności, z wyjątkiem samego znaku 2. Innymi słowy, wypisz znaki 4, 6, 8, 10 itd. Jako dane wyjściowe.
- Zaczynając od następnego znaku n, który nie został jeszcze zapisany jako wynik, zapisz co n-ty znak na wyjściu, wyłączając znak n sam i wykluczając jakikolwiek inny znak (etykietą numeryczną), który mógłeś już zapisać na wyjściu.
- Powtórz krok 4, o ile nadal dodaje nowe znaki do wyniku.
- Wpisz pozostałe znaki do wydrukowania w kolejności.
Przykład
- Oznacz znaki.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 OLDDOCYAK 'SBEAUTYCORNER
2. Wpisz pierwszy znak do wyjścia:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27OLDDOCYAK 'SBEAUTYCORNER O
3. Napisz co drugi znak zaczynając od 2, z wyjątkiem 2.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNER O OA 'EUYCRE
4. Następnym nie zapisanym jeszcze znakiem jest znak 3; napisz co 3 znak, zaczynając od 3, ale wyłączając znak 3 i każdy znak już napisany.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA „EUYCRE YB R
5. Powtórz krok 4, używając następnego znaku, znaku 5.
4. Następnym jeszcze nie zapisanym znakiem jest znak 5; napisz co 5 znak, zaczynając od 5, ale wyłączając sam znak 5 i każdy znak już napisany. (To tylko postać 25).
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA „EUYCREYB R N
5. Następna postać to 7; ale 14, 21 zostało już napisanych, więc nie powiemy więcej znaków, jeśli powtórzymy krok 4. Zatem skończyliśmy z 5.
6. Wypisz pozostałe znaki w kolejności.
12 3456789101112131415161718192021222324252627OLD DOCYAK'SBEAUTYCORNEROOA „EUYCREYB RN LDDCKSATO
Zasady
Wejście i wyjście może odbywać się za pośrednictwem standardowego wejścia / wyjścia standardowego, ciągów znaków lub tablic znaków.
Jeśli wczytujesz standardowe wejście, możesz wygodnie założyć, że jest nowy znak końca lub że całe wejście zawiera wiersz. Znaki nowej linii nie uczestniczą w tasowaniu.
Podobnie, dla twojej wygody, twój wynik może albo mieć końcowy znak nowej linii, albo nie.
Standardowe luki są niedozwolone.
To zawody w golfa kodowego. Najmniejszy kod w bajtach wygrywa.
Przypadki testowe
123456789ABCDEF -> 1468ACE9F2357BD
OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO
Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.
Odpowiedzi:
Galaretka , 10 bajtów
TryItOnline
W jaki sposób?
źródło
Mathematica, 61 bajtów
Funkcja bez nazwy, która przyjmuje listę znaków jako dane wejściowe i zwraca listę znaków.
FactorInteger[#][[1,1]]
daje najmniejszy współczynnik pierwszy#
(i zwraca,1
jeśli#
jest równy1
). DlategoFactorInteger[#][[1,1]]PrimeQ@#
daje dziwne wyrażenie: [#
najmniejszy czynnik pierwszy],False
jeśli#
nie jest liczbą pierwszą, a# True
jeśli#
jest liczbą pierwszą (są to nieocenione produkty liczby i wartości logicznej).Range@Length@#
zwraca listę liczb do długości danych wejściowych. NastępnieSortBy
sortuje te liczby według zabawnej funkcji opisanej powyżej. Mathematica jest naprawdę wrażliwa na typy na wiele sposobów, ale wesoło miesza je na inne sposoby: wyrażenia postaci [liczba]False
są sortowane alfabetycznie przed wyrażeniami postaci [liczba]True
, podczas gdy powiązania są łamane przez sortowanie liczb numerycznie. To daje dokładnie taką permutację, jakiej chcemy tutaj, i odpowiednio#[[...]]
permutuje znaki wejściowe.źródło
C, 164 bajty
Pobiera to dane wejściowe jako pierwszy parametr polecenia i wypisuje z powrotem na standardowe wyjście. Gdy przetwarzamy każdą postać, usuwamy ją, pozwalając na końcowe przejście.
źródło