Розглянемо наступний рядок:
Tin Snips
Цей рядок містить кілька атомних символів у періодичній таблиці . Ми могли б переписати цей рядок, щоб визначити декілька з них:
[Ti][N] [Sn][I][P][S]
Звичайно, ми могли також написати це так:
T[In] [S][Ni][P][S]
Правила переписування вводу такі:
- Випадок введення не має значення з точки зору відповідності атомних символів.
- Якщо елемент використовується в атомному символі, його регістр повинен змінитися, щоб символ був правильним. Вихід:
h
став би[H]
. - Усі символи елементів укладені у квадратні дужки ASCII
[
та]
. - Пробіл збережений:
Big ego
не можна поєднувати "g" і "e" в[Ge]
. - Не всі вхідні символи потрібно об'єднати в атомний символ: якщо вхідний символ не введено в символ, він передається через "є" (випадок не має значення).
- Якщо символ може бути зроблений, його потрібно зробити. Іншими словами,
Tin
у вищенаведеному прикладі не дозволяється виводити, оскільки в цьому слові можна створити хоча б один символ. Єдиний раз, коли символ може бути переданий через невикористаний, це коли він не може бути використаний для побудови атомного символу. - Для цілей цього виклику діють усі елементи від Водороду (1) до Оганесона (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, Ні, 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]
. RIght?
T[I][N]
не було,[T][I][N]
тому що T не є елементом. Моє запитання (а можливо, і Рассара) таке: чи потрібно нам лише дати 1. Тільки виходи, де робиться максимальне число підстановок елементів? 2. Тільки мінімальна кількість відходів? (HeHe з водородами вказує, що відповідь на це - ні) 3. Усі виходи, де сірники повністю вичерпані? (в цьому випадкуT[I][N]
так само, як іT[In]
було б справедливим.) Я думаю, що правильне тлумачення є 3.