Рассмотрим следующую строку:
Tin Snips
Эта строка содержит несколько атомарных символов в периодической таблице . Мы могли бы переписать эту строку, чтобы идентифицировать несколько из них:
[Ti][N] [Sn][I][P][S]
Конечно, мы могли бы написать это так:
T[In] [S][Ni][P][S]
Правила переписывания ввода следующие:
- Случай ввода не имеет значения с точки зрения соответствия атомных символов.
- Если элемент используется в атомарном символе, его регистр должен измениться, чтобы символ был правильным. Пример:
h
станет[H]
. - Все символы элементов заключены в квадратные скобки ASCII
[
и]
. - Пробелы сохраняются:
Big ego
нельзя объединить «g» и «e» в[Ge]
. - Не все входные символы нужно объединять в атомарный символ: если входной символ не помещается в символ, он передается как есть (регистр не имеет значения).
- Если символ может быть сделан, он должен быть сделан. Другими словами,
Tin
в приведенном выше примере не разрешается выводить данные, поскольку в этом слове можно создать хотя бы один символ. Единственный раз, когда символ может быть пропущен через неиспользованный, это когда он не может быть использован для создания атомарного символа. - Для целей этой задачи, все элементы от водорода (1) до Oganesson (118) являются действительными. Никакие высшие элементы не действительны.
- Некоторые из высших элементов имеют неоднозначные имена и символы: для целей этого испытания должна использоваться версия из Википедии . Для удобства допустимые атомные символы находятся здесь: H, He, Li, Be, B, C, N, O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og.
Напишите программу или функцию, которая генерирует все возможные выходы из одного предоставленного ввода. И вход, и выход могут быть в любой форме по вашему выбору. Это может быть строка, массив символов или какая-то другая структура данных: все, что удобно и четко представляет ввод и вывод. И вход, и выход могут быть переданы в / из вашего кода, однако вы выбираете: стандартный ввод / вывод, аргумент / возврат функции или что-то еще.
- Входные данные должны быть строкой (см. Предыдущий абзац) положительной длины, содержащей только символы ASCII произвольного регистра и
0x20
символ пробела ( ). - Ваш код должен генерировать все выходные строки, которые могут быть созданы с использованием приведенных выше правил ввода.
- Порядок вывода определяется реализацией. Единственное требование - все выходные строки присутствуют.
- Если представлена допустимая входная строка, которая не содержит атомарных символов, просто выведите входную строку.
- Если она представлена входной строкой, которая недопустима в соответствии с приведенными выше правилами (ноль, ноль символов, содержит недопустимые символы и т. Д.), Ваша программа может делать что угодно (сбой, пустой вывод и т. Д.)
- Вывод нечувствителен к регистру, кроме атомарных символов, которые должны соответствовать периодической таблице.
- Стандартные лазейки не допускаются.
Тестовые случаи:
Tin Snips
[Ti][N] [Sn][I][P][S]
[Ti][N] [S][Ni][P][S]
[Ti][N] [S][N][I][P][S]
T[In] [Sn][I][P][S]
T[In] [S][Ni][P][S]
T[In] [S][N][I][P][S]
T[I][N] ...
Quack
Q[U][Ac][K]
Q[U]a[C][K]
hehe
[H]e[H]e
[H]e[He]
[He][H]e
[He][He]
Stack Exchange
[S][Ta][C][K] Ex[C][H]a[N][Ge]
[S]t[Ac][K] Ex[C][H]a[N][Ge]
Это код гольф, так что позвольте мне увидеть ваш самый короткий код!
Q[U][Ac][K]
и Q[U]a[C][K]
. Право?
T[I][N]
не[T][I][N]
потому, что T не является элементом. Мой вопрос (и, возможно, вопрос Расара) таков: должны ли мы давать только 1. Только результаты, в которых сделано максимальное количество замен элементов? 2. Только минимальное количество отходов? (HeHe с водородом указывает, что ответ на этот вопрос - нет) 3. Все выходы, где совпадения полностью исчерпаны? (в этом случаеT[I][N]
так же, как иT[In]
было бы действительным.) Я думаю, что правильная интерпретация - 3.