Ваша задача: написать программу / функцию, которая при задании строки, содержащей только символы ASCII, выводит / возвращает строку в обратном порядке.
Пример:
1) вход
Hello, World!
2) Количество уникальных символов на входе. (Входная строка, разделенная пайпами ( |
) для удобства чтения)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Для повторяющихся символов найдите первое вхождение этого символа и присвойте ему одинаковый номер с первым номером.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Переверните строку, но не цифры.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Удалите символы выше повторяющихся чисел. (Удаленные символы обозначены звездочкой.)
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Замените удаленные символы символом, который появляется над первым появлением числа, над которым удален символ.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) Выход
!dlloW ,olleH
Тестовые случаи:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Ответы:
Pyth , 1 байт
Проверьте все контрольные примеры.
Pyth имеет прекрасные встроенные модули :-)
Pyth ,
87 байтовПроверьте все контрольные примеры.
Как это работает
Это более интересный не встроенный подход.
источник
Python 2 ,
4641 байт-5 байт благодаря Artyer
Попробуйте онлайн!
источник
lambda x:''.join(x[~x.find(n)]for n in x)
вместо того, чтобы перевернуть, а затем индексироватьЖеле , 5 байт
Попробуйте онлайн!
источник
CJam , 7 байтов
Попробуйте онлайн!
объяснение
источник
y
работал так.y
работала так. : PMATL , 6 байтов
Попробуйте онлайн!
источник
05AB1E , 2 байта
Попробуйте онлайн!
Объяснение:
источник
Алиса , 17 байт
Попробуйте онлайн!
объяснение
Это просто обычный шаблон для линейного кода в обычном режиме. Если мы развернем это, действительная программа просто станет:
Идея здесь похожа на идею моего ответа CJam . Поскольку у Алисы нет простого способа индексирования в строки с целыми числами, проще всего воспроизвести это поведение с помощью транслитерации (
y
в Алисе). Однако семантика транслитерации Алисы гораздо более общая, чем у CJam, что означает, что Алиса не просто игнорирует повторные отображения. Например, если бы мы просто хотели транслитерироватьMmm, marshmallows
в обратном направлении, это представляло бы следующий список отображений:Обратите внимание , что у нас есть, например,
m -> w
,m -> o
,m -> a
иm -> a
. CJam просто отбрасывает все, кроме первого сопоставления, но Алиса вместо этого циклически перебирает их. Таким образом, первоеm
будет отображеноw
, второе - кo
пятому сноваw
и так далее. В данном случае это не полезно, потому что в целом , если мы выполняемy
наAAB
(для некоторых строкA
иB
) , как мы это делали в CJam, мы всегда просто получитьB
в Алисе.Итак, как мы вычисляем отображение, которое работает
y
(то есть, как мы отбрасываем повторные отображения вручную)? Конечно, с помощью другой транслитерации. :)Источником отображения, которое мы хотим, должен быть узел ввода (т. Е. Дедуплицированный вход). Если мы применим вышеупомянутое сопоставление к кусочку, то каждый символ появляется только один раз, поэтому мы используем только первое из каждого из повторяющихся сопоставлений. Таким образом, транслитерируя нуб с помощью ввода и его реверса, мы фактически просто отбрасываем дублированные отображения. Затем мы можем использовать нуб и этот новый результат в качестве отображения для исходного ввода. Я уверен, что это имеет смысл для кого-то ...
Итак, код:
источник
Пайк , 7 байт
Попробуй это здесь!
источник
Perl 5 , 23 + 1 (
-p
) = 24 байтаПопробуйте онлайн!
Благодаря записи Алисы @ MartinEnder за идею транслитерации
источник
JavaScript ES6 50 байт
3 байта сохранены благодаря Джастину Маринеру
Попробуй это:
источник
R ,
6865 байтПроверьте контрольные примеры!
Порты 05AB1E Эрика метод для 3 байта меньше. Это был не первый, но это был первый, который я увидел.
старая версия:
Проверить все контрольные примеры - распечатывает вектор с вводом в качестве имен и выводом в кавычках ниже.
Довольно наивная реализация, но я не думаю, что в R это становится короче (и я с нетерпением жду, чтобы ошибиться в этом). По сути, это R-порт ответа Питона на Rod, но он был разработан независимо.
Необузданное объяснение:
источник
C (gcc) , 98 байт
Попробуйте онлайн!
Аргумент должен быть модифицируемой строкой; Строка изменяется на месте.
источник
Рёда , 27 байт
Попробуйте онлайн!
Он принимает список символов в качестве входных данных и возвращает поток символов.
Использование типа данных строки (40 байт):
Попробуйте онлайн!
источник
Python ,
191128 байтПопробуйте онлайн
источник
Java 10,
1009997 байтПорт @ C ответ LeakyNun в . Я сомневаюсь, что это можно сделать короче, не делая что-то подобное в Java.
-1 байт благодаря @ceilingcat .
Вводится как
char[]
(символьный массив) и изменяет этот ввод вместо возврата нового для сохранения байтов.Попробуй это здесь.
источник