Случайно вдохновленный увеличением чисел в то время как буквы уменьшаются
Учитывая список смешанных букв и чисел (например, ['a', 2, 3, 'b']
) увеличить буквы на одну позицию в алфавите (Обмотка z
к a
) и уменьшить число на 1. Для приведенного выше примера, выход должен быть ['b', 1, 2, 'c']
.
- Входными данными могут быть список смешанного типа, строка с разделителями, список строк и т. Д.
z
оборачиваетсяa
, но1
уходит0
,0
уходит-1
и т. д.- На входе будут только
[a-z]
целые числа. Вы можете выбрать заглавные буквы в[A-Z]
качестве ввода, если это проще для вас. - Вход гарантированно не пустой.
- Ввод может содержать только цифры или только буквы.
Примеры:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Правила и разъяснения
- Вход и выход могут быть заданы любым удобным способом .
- Вы можете распечатать результат в STDOUT или вернуть его как результат функции.
- Вывод не обязательно должен быть того же формата, что и ввод (например, вы можете взять ввод как строку и вывод как список).
- Либо полная программа или функция приемлемы.
- Если применимо, вы можете предположить, что целые числа ввода / вывода вписываются в родной
int
диапазон вашего языка . - Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
int
диапазон языков , поэтому вы никогда не получите ихInteger.MinValue
в качестве ввода.Ответы:
05AB1E , 5 байтов
Попробуйте онлайн!
источник
Python 3 , 59 байт
Попробуйте онлайн!
-1 байт благодаря Эрику Аутгольферу
источник
-96
с+8
сохранением байта.''!=i*0
на три байта меньше моейstr(i)>'9'
хорошей работыPerl 5 (-p), 17 байт
Попробуйте онлайн!
Бонус 19 байт:
TIO . В этой игре есть несколько интересных трюков, но они не могут сравниться с простым решением, описанным выше.
источник
Рубин , 34 байта
Для каждого элемента попытайтесь вернуть элемент -1. Строки не могут этого сделать, поэтому они выдают ошибку и выбираются
rescue
предложением, которое вместо этого призываетsucc
его вернуть следующую букву в алфавите.succ
"переворачивается" наz
и возвращает,aa
хотя, поэтому мы просто берем первый символ в возвращаемой строке.Попробуйте онлайн!
источник
JavaScript (Node.js) , 55 байт
Попробуйте онлайн!
источник
Python 3 ,
182130118 байт-51 байт благодаря @AdmBorkBork и @Black Owl Kai, -1 байт благодаря @Black Owl Kai, -12 байт путем замены
.append()
на+=[]
и заменыn+1
на-~n
Попробуйте онлайн!
Я сделал это, пока вопрос был в Песочнице, но не видел его до сих пор. :П
Ungolfed
объяснение
Для каждого элемента во введенном списке
x
он пытается вычесть 1 и добавить его в окончательный возвращенный список. Если происходит ошибка (потому что элемент является строкой), индекс буквы в алфавите добавляется 1, и этот мод 26 берется. Мод 26 оборачивает индекс 26 обратно в 0.источник
(x+27)%26
имеет тот же результат,(x+1)%26
str(d)==d
чтобы проверить, является ли это строкой или нет, вместо того, чтобы полагаться на try / исключением. Тогда, поскольку вам больше не нужно пытаться / исключать, вы можете сделать все это в понимании списка! Я позволю вам подумать об этом немного больше, но вы можете легко получить менее 100 байт таким образом;)J , 30 байт
Попробуйте онлайн!
источник
Гема , 55 знаков
Грязное решение. Оборачиваться приращением букв мучительно долго, поэтому получил отдельное правило.
Ввод может быть любым, просто используйте некоторые разделители. (Вы можете даже опустить разделители между цифрами и буквами. При переходе на 1 символ
<L1>
вы также можете опустить разделители между буквами.)Образец прогона:
Попробуйте онлайн!
Гема, 66 знаков
Чистый раствор. Половина относительно эффективна, затем наполовину чистая боль.
Образец прогона:
Попробуйте онлайн!
источник
R , 77
85байтСпасибо @Giuseppe за 8 байтов
Попробуйте онлайн!
Принимает входные данные в виде списка. После большого изменения @Giuseppe, это позволяет
Map
применить функцию к списку. Он используетmatch
для проверки на характер. Во время теста расширенный список букв и индекс сохраняются для возврата.источник
character
s не конечен , так как они отлиты вnumeric
наis.finite
и, таким образомNA
?is.finite
, я думал , что взять трещину в этом самMap
иmatch
. Хорошо учиться чему-нибудь каждый день :)MathGolf , 14 байтов
Попробуйте онлайн!
Принимает письмо в нижнем регистре.
объяснение
источник
Retina ,
525048584137 байт-4 байта благодаря @FryAmTheEggman (и за упоминание у меня была ошибка:
1 → -1
вместо1 → 0
).+10 байт, чтобы исправить ошибку,
1
и0
... Такой раздражающий крайний случай, который меня облажал довольно долго ... Но теперь он дошел до 41 байта. (Теперь мне любопытно о <40 байт версии @Neil и @CowsQuack упомянутой в комментариях .. Спасибо @Neil за кончик преобразуя0
в-
, и деле с отрицательными значениями первого. Преобразование тех правого защитника от унарного к целому числу очень помогло.)Видимо мне не нужны границы на данный момент, поэтому -4 байта ..>.>
Ввод / вывод через запятую.
Попробуйте онлайн.
Объяснение:
Транслитеруйте все
"zabcdefghijklmnopqrstuvwxy(z)"
на"abcdefghijklmnopqrstuvwxyz"
:Замените все автономные
0
s на-
:Преобразуйте все числа в одинарные, заменив их таким количеством подчеркиваний:
Для всех отрицательных значений, с нулем или более одинарных строк за ним: оставьте знак минус и получите общую длину этого соответствия (включая
-
), преобразованную обратно в целое число:Что касается положительных целых чисел: сопоставьте положительное целое число, сопоставив одну унарную строку, за которой следует ноль или более унарных строк. А затем замените их длиной этой группы захвата, чтобы удалить эту единственную унарную строку и преобразовать их обратно в целые числа одновременно:
источник
SNOBOL4 (CSNOBOL4) , 103 байта
Попробуйте онлайн!
источник
PHP , 50 байт
Попробуйте онлайн!
тесты
Выводит буквы / целые числа, разделенные
_
конечным разделителем.В PHP вы можете увеличивать буквы напрямую, поэтому я воспользовался этим. Но
z
увеличиваются до тогоaa
, чтобы преобразовать его вa
, то(++$a)[0]
используется , который выводит только первый символ измененного значения.источник
Japt
-m
,1312 байт-1 байт благодаря Shaggy
Попытайся
Объяснение:
Примечание :
;
превращаетсяC
в строчный алфавитисточник
z
кa
.o
->¤
сэкономит вам байт здесь.+2
и тогда-1
спасибо Шегги будет точнее! : D+2
было благодаря Оливеру: PHaskell,
5251 байтПоскольку Haskell не допускает списки смешанных типов, буквы и цифры берутся и возвращаются в виде строк.
Попробуйте онлайн!
Проверьте для каждого элемента списка: если строка
"z"
, return"a"
; если первым символом строки является>'`'
(т. е. буква, а не цифра), вернуть преемник символов в строке; иначе это должно быть число, поэтому необходимо преобразовать в целое число, вычесть 1 и снова превратить в строку.Редактировать: -1 байт благодаря @cole.
источник
Желе , 13 байт
Попробуйте онлайн!
Умный почин Джонатана Аллана .
Примечание: это не полная программа, нижний колонтитул над TIO позволяет вводить, используя аргумент командной строки для проверки функции.
источник
®i‘ị®µ’e?€Øa©
это исправление для нуля, я верю.Ọ
в этом случае это не совсем так. Иронично, так как я избегал использовать~
в качестве условия для учета-1
s во входных данных ... Кроме того, как я собираюсь сократить®i‘ị®
...C ++ 17 (gcc) , 120 байт
Вот
f
необходимая функция;l
является как входным, так и выходным параметром, и ожидается, что он будет контейнером объектов, которые совместимыstd::variant<char, int>
или наоборот.Попробуйте онлайн!
источник
dzaima / APL,
2120 байтПопробуйте онлайн!
-1 благодаря нгн.
источник
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (ок) , 27 байтов
Попробуйте онлайн!
-8 спасибо нгн и дзайма :)
источник
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
встраиваемый в специальный регистр и использующий заглавные буквы (и'
должен считаться, поскольку входные данные должны быть списком)'
нужно учитывать. вот немного более длинное выражение, которое не нужно'
и также заботится о "z" -> "a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. здесь-96
(что равно +1 минус код ascii «a») можно заменить8
на принятый мод 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Рунические чары , 36 байт
Попробуйте онлайн!
Общий процесс заключается в чтении ввода, добавлении 0 (приведение к строке), преобразовании обратно в число (один символ всегда возвращает -1), сравнении с вводом. Если то же самое, это должно быть числовое значение, вычтите 1 и напечатайте. Если не то же самое, это должен быть символ, вычтите 1, сравните с
{
. Если меньше, напечатайте, в противном случае замените егоa
и напечатайте.Повторяйте, пока программа не выполнит переполнение стека.
Выход отделяется
;
, чтобы сохранить 1 байт (и имеет завершающий). Ввод разделен пробелом.источник
Stax , 17 байт
Запустите и отладьте его
Такое ощущение, что это должно быть возможно сделать короче, но я не могу удержаться от возможности использовать новую функцию Stax из последнего выпуска.
Обрабатывать весь ввод как строку:
eval(match) - 1
. Это новая функция, поскольку замена блока регулярных выражений - это не строка, а целое число.источник
Python 3, 66 байт
Редактировать:
Я не видел решения Jitse до сих пор. Уловка, если ''! = I * 0 - это здорово!
источник
C #, 148 байт
Repl.it ссылка
Ungolfed:
источник
Древесный уголь , 16 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод в STDIN, каждая строка представляет собой одну строчную букву или целое число, и выводит в отдельные строки в STDOUT. Объяснение:
Повторно вводите из STDIN, пока не будет достигнута пустая строка.
Выведите это выражение на отдельной строке.
Это подстрока предопределенного строчного алфавита?
Если это так, выведите следующую букву с циклическим индексом.
В противном случае уменьшите значение и приведите обратно к строке для неявной печати.
источник
Zsh , 47 байтов
Попробуйте онлайн!
источник
C (gcc) ,
9386 байтовПопробуйте онлайн!
NULL
Входными данными является -определенный массив'\0'
-определенных строк, например{"a", "b", "c", "17", NULL}
.-7 байт благодаря @ceilingcat
источник
Perl 6 , 31 байт
Попробуйте онлайн!
Анонимный Любая лямбда, которая отображает каждый элемент в список и пытается вычесть из него один элемент, иначе увеличивая его и беря первый символ в случае, который
z
переносится наaa
.источник
T-SQL 2012, 61 байт
Заглавные буквы нужны при вводе.
Использование табличной переменной в качестве ввода.
Попробуйте онлайн
источник
SimpleTemplate, 80 байт
Это было написано на языке, который я сделал.
Из-за ограничений в компиляторе я больше не могу его уменьшить.
А теперь, не разгневанный
И объяснение:
{@each argv as value}
- перебирает все значения вargv
. (argv
содержит все переданные аргументы).Если
as <var>
нет,_
предполагается переменная по умолчанию .{@if value is matches "@\d+@"}
- проверяет,value
совпадает ли с регулярным выражением"@\d+@"
.{@inc by -1 value}
- увеличивает значение на -1 (в основном, это уменьшение).{@echo value, "\n"}
и{@echol_}
-echol
выводит переданные значения и добавляет строку в конце.{@else}
- не требует объяснений{@inc by 1 value}
- увеличивает значение на 1. Если значениеby <value>
отсутствует, предполагается, что оно равно 1.{@echo value.0, "\n"}
и{@echol_.0}
-echol
выводит переданные значения и добавляет строку в конце.Это необходимо из - за правила вызова:
z wraps to a
.Когда
@inc
в строке используется значение an , оно увеличивает символы и, как только оно попадаетz
, переносится вaa
.Вывод первого символа удовлетворяет задаче стоимостью 7 байт.
{@/}
- закрывает{@else}
вышеуказанное (необязательно).{@/}
- закрывает{@each}
вышеуказанное (необязательно).Вы можете попробовать это на: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Каждый переданный аргумент
render()
будет новым значением, которое считается.источник
Perl, 64 байта
источник