У Haskell є кортежі, які можна записати як
(a,b,c)
Однак це лише синтаксичний цукор для
(,,)a b c
Загалом, n кортеж може бути утворений з n-1 ,
s між (
... з )
подальшими його елементами, розділеними пробілами. Наприклад, 7-кортеж (1,2,3,4,5,6,7)
може бути утворений за допомогою
(,,,,,,)1 2 3 4 5 6 7
Оскільки у Haskell немає 1-кортежів, їх неможливо сформувати. Ви також не будете нести відповідальність за порожні кортежі.
Вкладені кортежі можуть бути сформовані за допомогою паронів для зміни порядку виконання операцій.
((1,2),3) == (,)((,)1 2)3
В рамках нашого прагнення до вилучення всього синтаксичного цукру з Haskell я збираюся попросити вас написати програму, яка також видаляє синтаксичний цукор з кортежів Haskell.
Ваша програма повинна приймати кортеж, масив або рядок, що представляє цукристий кортеж, і повинна виводити рядок, що представляє кортеж "без цукру". Вхідні кортежі завжди містять додатні цілі чи інші кортежі.
Оскільки ми тут займаємось гольфом, ваш вихід повинен бути коротким. Він не повинен містити зайвого
Пробіли. Пробіли слід використовувати лише для розділення аргументів функції кортежу та не повинні з’являтися після a
)
або до a(
Круглі дужки. Дужки слід використовувати лише при формуванні функцій кортежу або при вкладенні кортежів.
Це питання з кодовим гольфом, тому відповіді будуть набрані у байтах, менша кількість байтів - краща.
Тестові кейси
(1,2) -> (,)1 2
(1,2,3) -> (,,)1 2 3
((1,2),3) -> (,)((,)1 2)3
(1,2,3,4) -> (,,,)1 2 3 4
(1,(2,3)) -> (,)1((,)2 3)
(10,1) -> (,)10 1
,
((1,(2,3)),4,(5,6))
та (1,(2,3),4)
.