Эта проблема вдохновлена этой цитатой Оливера Сакса:
«В 11 лет я мог бы сказать« я натрий »(Элемент 11), а сейчас в 79 я - золото». - Оливер Сакс
Я хочу, чтобы вы нашли числа в строке и заменили их соответствующими символами элементов. (1 - это Н, 2 - он, 3 - это Ли и т. Д.) Есть несколько правил, которым нужно следовать:
- Одно- и двузначные цифры заменяются соответствующими элементами, как обычно. Игнорировать 0s в начале чисел. Если в числе всего 0, игнорируйте его. Например
1 01 10 0 00
становитсяH H Ne 0 00
- Более двух цифр вместе делятся на группы по 2. Нечетное количество цифр должно иметь дополнительную единственную цифру в конце. Например
0153 5301 153
,HI IH PLi
из-за этого правила вам нужно знать только элементы от 1 до 99 - Числа должны обрабатываться одинаково, независимо от того, какие символы окружают их, а запятые и десятичные точки не являются частями чисел.
P90X 42,800 3.14159
станетPThX Mo,Hg0 Li.SiPF
Пример входов / выходов (I / O):
I: 32289216
O: GeNiUS
I: J08017 5811
O: JOHN CeNa
I: M18227 0592tt10r
O: MArTiN BUttNer
I: De072816
O: DeNNiS
I: D088r1907085
O: DOOrKNOB
I: 13ex A.
O: Alex A.
Ввод будет в ближайшем формате к строке, которая есть на вашем языке.
Периодическая таблица для справки:
Это код-гольф , поэтому ваша программа будет оцениваться в байтах.
Ответы:
Mathematica,
969489 байтМма имеет несколько наборов данных ...
источник
JavaScript (ES6), 202 байта
Пропущенная строка содержит непечатаемые символы, поэтому вот (надеюсь, обратимый) hexdump:
Техника здесь состояла в том, чтобы поместить все сокращения элементов в одну строку, разделенные ничем - для этого и используется второе регулярное выражение
/[A-Z][a-z]?/g
; он соответствует каждой заглавной букве, за которой может следовать строчная буква. Первое регулярное выражение,/\d\d?/g
соответствует каждому набору из 2 (или 1) цифр на входе, поэтому каждый набор цифр N заменяется элементом с индексом N в распакованной сопоставленной строке.Вот оригинальная строка, если кто-то еще хотел бы использовать ее: (
A
на концах заполнители)Вопросы и предложения приветствуются!
источник
Uus
иUuo
?+y?...:...
поскольку вы заменяете группы цифр[y]
вместо[+y]
и сохранить 1 байтPython 3,
278285 байтовТестовые случаи:
источник
f('P90X 42,800 3.14159')
возвращает «PThX Mo, Hgs Li.SiPF» вместо «PThX Mo, Hg0 Li.SiPF» иf('1 01 10 0 00')
возвращает «HH Ne s s» вместо «HH Ne 0 00» . Кстати, я просто использовал ваш расширенный подход к нарезке в своем решении Python 2. Благодарность!Python 2,
312304 байтаЭта функция создает функцию f, которая принимает строку чисел в качестве аргумента и возвращает соответствующую строку с замененными символами элемента.
Функция перебирает строки из одной-двух цифр ( «1» , «01» , «10» , «00», но не «0» ) или одного символа ( «a» , «0», но не «1» ). В случае цифр строка преобразуется в целое число и ищется в объединенной строке символов элементов, где каждый символ дополняется двумя символами. В случае символов строка просто используется без поиска.
Тесты для каждого примера в вопросе все проходят:
источник