Dans APL, vous pouvez écrire des fonctions tacites, appelées trains . La façon dont ils fonctionnent n'est pas pertinente pour ce défi. Voici les différentes façons de les regrouper en utilisant ⍴
comme fonction:
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴⍴))
...
L'ordre reste le même. La procédure est que tant qu'il y a strictement plus de 3 fonctions, les 3 dernières fonctions sont regroupées en une seule fonction. Si nous rencontrons un train imbriqué, nous le mettons entre parenthèses avant de continuer. Voici la procédure appliquée à ⍴⍴⍴⍴⍴⍴
:
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.
Voici la même procédure appliquée à ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
:
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.
Contribution
Pour ce défi, la saisie sera simplifiée. Cela signifie que vous pouvez choisir 2 caractères différents pour les parenthèses d'ouverture et de fermeture et 1 caractère pour les fonctions, différents de ceux choisis pour les parenthèses. Les caractères que vous choisissez doivent être cohérents. L'entrée ne sera pas vide et ne contiendra pas de parenthèses sans contenu (c'est-à-dire ()
).
Production
Encore une fois, vous pouvez choisir 3 caractères différents, 2 pour les parenthèses et 1 pour les fonctions. Notez qu'ils n'ont pas besoin d'être les mêmes que ceux choisis pour l'entrée, mais ils doivent être cohérents.
Règles
- S'il existe des parenthèses qui ne contiennent qu'une seule fonction en leur sein dans l'entrée, vous devez les supprimer dans la sortie. Votre sortie peut ne pas contenir de parenthèses inutiles (c'est-à-dire entourant une seule fonction ou entourant la sortie entière).
- Vous n'avez pas besoin d'implémenter l'algorithme utilisé ici, tant que votre solution est valide pour ce défi.
- L'entrée et la sortie sont des chaînes au format expliqué dans les sections Entrée et Sortie. L'entrée aura au moins un caractère.
- L'utilisation des failles standard est strictement interdite.
- C'est le golf de code , donc la réponse la plus courte l'emporte. Cependant, il n'y aura pas de réponse acceptée, car il s'agit d'un concours par langue, et pour encourager la réponse dans les langues dans lesquelles cette tâche entraînerait un code plus long par rapport au code écrit dans d'autres langues.
Cas de test
Les caractères utilisés ici sont ()⍴
, vous devez les remplacer par vos caractères choisis.
⍴ -> ⍴
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴⍴))))))
⍴⍴⍴⍴⍴(⍴⍴⍴)⍴⍴(⍴(⍴⍴⍴)⍴⍴⍴)⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴((⍴⍴⍴)⍴(⍴(⍴(⍴⍴⍴)(⍴⍴⍴))(⍴⍴⍴)))))
(⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴) -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
(⍴⍴⍴)(⍴⍴⍴)⍴⍴⍴ -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
⍴⍴(⍴)⍴⍴ -> ⍴⍴(⍴⍴⍴)
((⍴⍴)) -> ⍴⍴
⍴⍴((⍴⍴))⍴⍴ -> ⍴⍴((⍴⍴)⍴⍴)
Ce défi a été publié dans le bac à sable. Si vous disposez des privilèges requis, vous pouvez consulter le post du bac à sable ici .