Вступ:
Я збираю закручені пазли. Більшість крутих пазлів виробляють і продають китайські компанії. Більшість відомих компаній просять дозволу у дизайнерів головоломки на виготовлення своїх конструкцій та спільної роботи над продуктом на ринку. У цьому випадку дизайнери головоломок, звичайно, дуже раді і пишаються тим, що одна з їх головоломок потрапила на ринок.
Однак є і китайські компанії, які складають головоломки. Ці нокаути - або конструкції, що використовуються без дозволу оригінального творця, або прямо дешевіші копії меншої якості вже існуючих пазлів.
Виклик:
Ми будемо визначати оригінальність чисел, які вивільняються в певному порядку (зліва направо † ).
Дано список цілих чисел, згрупуйте та виведіть їх за їх оригінальністю.
Як визначається оригінальність чисел?
- Чи число є точним дублікатом більш раннього числа? Група (найменш оригінальна), де група є кінцевою, після всіх інших груп.
- Чи є число дублікатом більш раннього числа, але замість нього від'ємним (тобто початкове число було , а тепер ; або навпаки)? група .
- Чи може бути утворене абсолютне значення числа шляхом об'єднання одного або декількох більш ранніх абсолютних чисел, і чи не воно є частиною раніше згаданих груп або ? Група , де - кількість відокремлених чисел, що використовуються в конкатенації (і ).
- Чи не входить число в жодній із вищезазначених груп, тому поки що це абсолютно унікально? група (найоригінальніша), яка лідирує перед усіма іншими групами.
Це може здатися досить невиразним, тому ось покроковий приклад :
Список вводу: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
- це перше число, яке завжди є оригінальним та в групі . Вихід поки що:[[34]]
9
також оригінал:[[34,9]]
4
також оригінал:[[34,9,4]]
-34
мінус попереднього числа34
, тому це в групі :[[34,9,4],[-34]]
19
є оригінальним:[[34,9,4,19],[-34]]
-199
може бути утворено двома попередніми числами,19
і9
, значить, це в групі :[[34,9,4,19],[-199],[-34]]
34
- це точна копія більш раннього числа, тому це в групі :[[34,9,4,19],[-199],[-34],[34]]
-213
є оригінальним:[[34,9,4,19,-213],[-199],[-34],[34]]
94
може бути утворено двома попередніми числами,9
і4
, значить, це в групі :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
може бути утворений з чотирьох попередніх чисел19
,34
,4
і в два рази9
, так що в групі :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
мінус попереднього числа-213
, тому це в групі :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
є оригінальним:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
є оригінальним:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
може бути утворений двома попередніми номерами213
і4
(або трьох попередніх чисел21
,3
і4
, але ми завжди використовуємо найменшу кількість конкатенації чисел , щоб визначити оригінальність), так що в групі :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
може бути утворено двома попередніми числами чотири рази,4
і9
, значить, це в групі :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
може бути сформовано одним попереднім числом4
, повтореним два рази, так що це в групі :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Отже, для вводу [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
вихід є [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Правила виклику:
- Введення / виведення гнучко. Ви можете вводити як список / масив / потік цілих чисел або рядків, вводити їх по черзі через STDIN тощо. Виведенням може бути карта з групами як ключовими, вкладений список як приклад та тестові випадки в цьому виклику, надруковані новий рядок відокремлений тощо.
- Вам дозволяється приймати список вводу в зворотному порядку (можливо, корисно для мов на основі стека). † У цьому випадку згаданий зліва направо, звичайно, справа наліво.
- Як ви можете бачити на прикладі для цілого числа
-2134
, ми завжди група число , яке є об'єднанням інших чисел якомога (утвореним213
і4
- два числа, а не21
,3
і4
- три числа). - Як ви бачите в прикладі для цілого числа
1934499
, ви можете використовувати більш раннє число (9
в даному випадку) кілька разів (аналогічно44449
використанню чотирьох4
s і a9
в прикладі). Однак вони враховуються лише один раз для визначення групи. - Вам не дозволяється мати порожні внутрішні списки у висновку для порожніх груп. Таким чином, тестовий випадок
[1,58,85,-8,5,8585,5885,518]
може не призвести до[[1,58,85,8,5],[518],[5885],[8585],[],[]]
того, де порожні групи - це та , а приклад, наведений вище, не може привести до[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
цього, де порожня група - . - Порядок угруповань є суворим (якщо ви не використовуєте карту, оскільки групи потім можна вирахувати з ключів), але порядок чисел у групі може бути в будь-якому порядку. Тож
[34,9,4,19,-213,3,21]
для групи у наведеному вище прикладі також може бути[21,3,-213,19,4,9,34]
або[-213,4,34,19,9,21,3]
. - Вам гарантовано, що ніколи не буде чисел, які можуть бути сформовані з більш ніж дев'яти попередніх чисел. Таким чином , ви ніколи не будете мати ніякого груп, а найбільша кількість груп можливих 12:
- Можна припустити, що цілі числа будуть максимум 32 біти, тобто в межах діапазону
[−2147483648,2147483647]
.
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з не кодовими гольф-мовами. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Для вашої відповіді застосовуються стандартні правила з правилами вводу / виводу за замовчуванням , тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу повернення. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду (тобто TIO ).
- Також настійно рекомендується додавати пояснення до своєї відповіді.
Тестові приклади:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
X + 1
чи є спеціальна група для точних копій, аX
чи є група для інших чисел, які можуть бути сформовані з копій одного числа, наприклад, його заперечення?