Вызов
Напишите функцию или программу, которая принимает строку ввода, выполняет очень специфическое и странно знакомое перемешивание своих символов и выводит результат.
Требуемая перетасовка может быть описана с использованием следующего алгоритма:
- Пометьте каждый символ на входе индексом, основанным на 1.
- Напишите символ номер 1 в качестве вывода.
- Начиная с символа номер 2, запишите все остальные символы в выводе по порядку, исключая сам символ 2. Другими словами, пишите символы 4, 6, 8, 10 и т. Д. В качестве вывода.
- Начиная со следующего номера символа n, еще не записанного в качестве вывода, запишите каждый n-й символ в вывод, исключая сам символ n и исключая любые другие символы (с помощью числовой метки), которые вы, возможно, уже записали в вывод.
- Повторите шаг 4, пока он продолжает добавлять новые символы в вывод.
- Запишите остальные символы для вывода по порядку.
пример
- Назовите персонажей.
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 Олддокьяк
2. Запишите первый символ для вывода:
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. Напишите все остальные символы, начиная с 2, за исключением 2.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNER O OA 'EUYCRE
4. Следующий еще не написанный символ - это символ № 3; пишите каждый третий символ, начиная с 3, но исключая сам символ 3 и любой уже написанный символ.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCRE YB R
5. Повторите шаг 4, используя следующий символ, символ 5.
4. Следующий еще не написанный символ - это символ № 5; пишите каждый 5-й символ, начиная с 5, но исключая сам символ 5 и любой уже написанный символ. (Это всего лишь символ 25).
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCREYB R N
5. Следующий персонаж - 7; но 14, 21 уже написаны, поэтому больше символов не будет выведено, если мы повторим шаг 4. Таким образом, мы закончили с 5.
6. Запишите остальные символы по порядку.
12 3456789101112131415161718192021222324252627OLD DOCYAK'SBEAUTYCORNEROOA 'EUYCREYB RN LDDCKSATO
правила
Ввод и вывод могут быть через стандартный ввод / стандартный вывод, строки или массивы символов.
Если вы читаете в качестве стандартного ввода, вы можете по своему усмотрению предположить, что есть завершающий символ новой строки или что весь ввод содержит строку. Символы новой строки не участвуют в случайном порядке.
Точно так же, для вашего удобства, ваш вывод может иметь либо завершающий перевод строки, либо нет.
Стандартные лазейки запрещены.
Это кодовое соревнование по гольфу. Наименьший код в байтах побеждает.
Тестовые случаи
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.
Ответы:
Желе , 10 байт
TryItOnline
Как?
источник
Mathematica, 61 байт
Безымянная функция, принимающая список символов в качестве входных данных и возвращающая список символов.
FactorInteger[#][[1,1]]
дает наименьший простой множитель#
(и возвращает,1
если#
равен1
). ПоэтомуFactorInteger[#][[1,1]]PrimeQ@#
выдает странное выражение: [#
наименьший простой фактор],False
если#
не простое число, а# True
если#
простое число (это неоцененные произведения числа и логического значения).Range@Length@#
выдает список чисел вплоть до длины ввода. ЗатемSortBy
сортирует эти числа с помощью забавной функции, описанной выше. Mathematica действительно чувствительна к типу во многих отношениях, но весело смешивает их другими способами: выражения формы [число]False
сортируются в алфавитном порядке перед выражениями формы [число]True
, в то время как связи разрываются путем числовой сортировки чисел. Это производит именно ту перестановку, которую мы здесь хотим, и соответственно#[[...]]
переставляет символы ввода.источник
C 164 байта
Это принимает ввод в качестве первого параметра команды и печатает обратно в стандартный вывод. Когда мы обрабатываем каждый символ, мы очищаем его, разрешая последний проход.
источник