Если задана входная строка, содержащая только буквенно-цифровые символы ASCII и начинающаяся с буквы, поменяйте местами каждую букву на следующую цифру.
Перспектива представляет собой последовательность из последовательных букв или цифр. Обратите внимание, что в случае, когда строка ввода заканчивается набором букв, этот цикл остается без изменений.
Пример прохождения
Например, учитывая входную строку uV5Pt3I0
:
- Отдельные серии букв и серий цифр:
uV 5 Pt 3 I 0
- Определите пары трасс:
(uV 5) (Pt 3) (I 0)
- Обмен парами трасс:
(5 uV) (3 Pt) (0 I)
- Объединить:
5uV3Pt0I
Примеры
uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах. Пояснения приветствуются.
(a,(b,y))<-span(<':')<$>span(>'9')s
.(a,(b,y):_)<-lex<$>span(>'9')s
: попробуйте онлайн!lex
работает, поэтому я пока воздержусь от включения этого. В любом случае, приятно знать, что в Prelude есть что-то подобноеJavaScript (ES6), 34 байта
Попытайся
источник
Pyth , 15 байт
объяснение
Тестовый пакет .
источник
Python 2 , 49 байт
Каждое нерегулярное решение, которое я пробовал, было длиннее. :П
Попробуйте онлайн!
источник
Japt (v2.0a0), 16 байт
Проверьте это онлайн!
Примечание: это нестабильная альфа, поэтому, если эта ссылка не работает, вы можете использовать более длинную версию в v1.4.4: протестируйте ее онлайн!
объяснение
источник
ò
.CJam ,
323028 байтУ CJam нет регулярных выражений и «разбитых на цифры и буквы» или еще много чего, так что это было довольно болезненно.
Попробуйте онлайн!
объяснение
источник
Гема , 11 персонажей
Образец прогона:
источник
Java 8, 38 байт
Не так много, чтобы объяснить. Использует тот же метод, что и ответ Retina @Okx , который не может быть короче в Java.
Попробуй это здесь.
источник
Japt, 18 байт
Проверь это
источник
Sed, 29 байт
Запустите с -r.
Использует группы захвата и заменяет их в обратном порядке.
источник
[A-Za-z]
до[^0-9]
. Тем не менее, вы должны считать флаг как часть вашего кода.sed <command>
аsed -r <command>
, так три байта.sed -f filename
иsed -rf filename
(или междуsed -e 'command'
иsed -re 'command'
): один байт.s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi
48 байтов. В остальном, примерно так же.Желе , 12 байт
Попробуйте онлайн!
Объяснение:
источник
PHP, без регулярных выражений, 73 байта
Беги как труба с
-nR
или проверьте это онлайн .сломать
источник
~
вместоa&
PHP , 45 байт
Попробуйте онлайн!
источник
C #, 71 байт
Просто позор регулярных выражений так долго в C #.
Попробуйте онлайн!
Полная / Отформатированная версия:
источник
Clojure,
10488 байтО, регулярное выражение действительно удобно ... во всяком случае ( TIO ):
partition-by
разбивается на последовательные запуски, основанные на возвращаемом значении этой функции,partition-all
разбивается на части по 2 (пары, которые мы поменяем местами),map reverse
переворачивает их,flatten
избавляется от структуры вложенного списка, и, наконец, мы выводим строку. Еслиpartition
был использован вместоpartition-all
нечетное количество кусков, то последний отбрасывается.Оригинал использовал многословный, но забавный
(juxt second first)
и(set"0123456789")
вместоreverse
целочисленных диапазонов ASCII.источник
QuadR , 15 байт
Попробуйте онлайн!
Пояснения, явно украденные у Okx :
Это заменяет регулярное выражение
(\D+)(\d+)
с\2\1
. Давайте разберемся с этим, если вы не знаете, что это значит.\D
Сопоставляют все , что не является числом "означает.\d
означает «соответствовать всему, что является числом». В+
знак означает "соответствовать этому по крайней мере один раз , но попытаться соответствовать его столько раз , сколько это возможно. Скобки определяют группу. Первая группа,(\D+)
а вторая(\d+)
Во второй строке мы говорим, что хотим поместить то, что было сопоставлено второй группой, а затем то, что было сопоставлено первой группой. Это эффективно меняет буквы и цифры.
источник
PowerShell , 40 байт
Попробуйте онлайн!
PowerShell идеально подходит для этого, поскольку он поддерживает поиск и замену регулярных выражений «из коробки». Реквизиты идут в @Okx для решения регулярных выражений.
источник
Пип , 17 байт
Принимает ввод в качестве аргумента командной строки. Попробуйте онлайн!
объяснение
Здесь используется стандартная стратегия замены регулярных выражений, в некотором роде играющая в гольф.
Регулярное выражение
-C+XL.C+XD
, которое оценивает`(?i)([a-z]+)(\d+)`
:Замена -
{c.b}
функция обратного вызова, которая объединяет вторую группу (c
) и первую группу (b
). (Первый аргумент функцииa
, содержит полное совпадение.)Это на три байта короче, чем наивный
aR`(\D+)(\d+)``\2\1`
.источник
брейкфук , 98 байт
Попробуйте онлайн!
объяснение
Эта программа поддерживает очередь букв, которые еще не были выведены, и выводит их при необходимости.
Ключ к этой программе
>>----[---->+<<<-[>]>]
. Три ячейки справа от входной ячейки начинаются с нуля. Если ввод является кодовой точкой от 1 до 63 включительно, это перемещает указатель на один пробел вправо и помещает входные два пробела справа от этой новой позиции. В противном случае указатель перемещается на два пробела вправо, ячейка на один пробел справа от новой позиции становится 63, и те же 63 вычитаются из входной ячейки. Это аккуратно делит ввод на буквы (65-122) и цифры (48-57).источник
Рубин , 31 байт
Попробуйте онлайн!
источник
Mathematica, 129 байт
источник