No APL, você pode escrever funções tácitas, chamadas de trens . Como eles funcionam é irrelevante para esse desafio. Aqui estão as diferentes maneiras pelas quais eles podem ser agrupados, usando ⍴
como função:
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴⍴))
...
O pedido permanece o mesmo. O procedimento é que, desde que haja estritamente mais de 3 funções, as últimas 3 funções serão agrupadas em uma função. Se encontrarmos um trem aninhado, parênteses o primeiro, antes de continuar. Aqui está o procedimento aplicado a ⍴⍴⍴⍴⍴⍴
:
Step 0: ⍴⍴⍴⍴⍴⍴
There are strictly more than 3 functions, repeat.
Step 1: ⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
Step 2: ⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
Aqui está o mesmo procedimento aplicado a ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
:
Step 0: ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴
There are 3 or less functions, we're done.
Step 1: ⍴⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
Step 1: ⍴⍴⍴(⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴
There are 3 or less functions, we're done.
Step 2: ⍴⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴))
There are strictly more than 3 functions, repeat.
Step 3: ⍴(⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)))
There are 3 functions or less, we're done.
Entrada
Para esse desafio, a entrada será simplificada. Isso significa que você pode escolher 2 caracteres diferentes para abrir e fechar parênteses e 1 caractere para funções, diferentes daqueles escolhidos para parênteses. Os caracteres que você escolher devem ser consistentes. A entrada não estará vazia e não conterá parênteses sem conteúdo (ou seja ()
).
Resultado
Novamente, você pode escolher 3 caracteres diferentes, 2 para parênteses e 1 para funções. Observe que eles não precisam ser iguais aos escolhidos para entrada, mas devem ser consistentes.
Regras
- Se houver parênteses que incluam apenas uma função dentro da entrada, você deverá removê-los na saída. Sua saída pode não conter parênteses desnecessários (por exemplo, incluir apenas uma função ou incluir toda a saída).
- Você não precisa implementar o algoritmo usado aqui, desde que sua solução seja válida para esse desafio.
- Entrada e saída são cadeias no formato explicado nas seções Entrada e Saída. A entrada terá pelo menos um caractere.
- É estritamente proibido usar as brechas padrão .
- Este é o código-golfe , por isso a resposta mais curta vence. No entanto, não haverá uma resposta aceita, pois essa é uma competição por idioma e para incentivar a resposta em idiomas nos quais essa tarefa resultaria em código mais longo em comparação com o código escrito em outros idiomas.
Casos de teste
Os caracteres usados aqui são ()⍴
, você deve substituí-los pelos caracteres escolhidos.
⍴ -> ⍴
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴⍴))))))
⍴⍴⍴⍴⍴(⍴⍴⍴)⍴⍴(⍴(⍴⍴⍴)⍴⍴⍴)⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴((⍴⍴⍴)⍴(⍴(⍴(⍴⍴⍴)(⍴⍴⍴))(⍴⍴⍴)))))
(⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴) -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
(⍴⍴⍴)(⍴⍴⍴)⍴⍴⍴ -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
⍴⍴(⍴)⍴⍴ -> ⍴⍴(⍴⍴⍴)
((⍴⍴)) -> ⍴⍴
⍴⍴((⍴⍴))⍴⍴ -> ⍴⍴((⍴⍴)⍴⍴)
Este desafio foi publicado na Sandbox. Se você tiver o privilégio necessário, poderá ver a postagem da sandbox aqui .