In APL können Sie implizite Funktionen schreiben, die als Züge bezeichnet werden . Wie sie funktionieren, spielt für diese Herausforderung keine Rolle. Hier sind die verschiedenen Arten, wie sie unter Verwendung ⍴
der Funktion gruppiert werden können:
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴⍴))
...
Die Reihenfolge bleibt gleich. Die Prozedur ist, dass die letzten 3 Funktionen in einer Funktion zusammengefasst werden, solange es streng genommen mehr als 3 Funktionen gibt. Wenn wir auf einen verschachtelten Zug treffen, setzen wir diesen zuerst in Klammern, bevor wir fortfahren. Hier ist das Verfahren angewendet auf ⍴⍴⍴⍴⍴⍴
:
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.
Hier gilt das gleiche Verfahren für ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
:
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.
Eingang
Für diese Herausforderung wird die Eingabe vereinfacht. Dies bedeutet, dass Sie 2 verschiedene Zeichen zum Öffnen und Schließen von Klammern und 1 Zeichen für Funktionen auswählen können, die sich von den für Klammern ausgewählten unterscheiden. Die Zeichen, die Sie auswählen, müssen konsistent sein. Die Eingabe ist nicht leer und enthält keine Klammern ohne Inhalt (dh ()
).
Ausgabe
Auch hier können Sie 3 verschiedene Zeichen wählen, 2 für Klammern und 1 für Funktionen. Beachten Sie, dass sie nicht mit den für die Eingabe ausgewählten identisch sein müssen, aber konsistent sein müssen.
Regeln
- Wenn Klammern in der Eingabe nur eine Funktion enthalten, müssen Sie diese in der Ausgabe entfernen. Ihre Ausgabe darf keine nicht benötigten Klammern enthalten (dh nur eine Funktion oder die gesamte Ausgabe einschließen).
- Sie müssen den hier verwendeten Algorithmus nicht implementieren, solange Ihre Lösung für diese Herausforderung gültig ist.
- Eingabe und Ausgabe sind Zeichenfolgen in dem Format, das in den Abschnitten Eingabe und Ausgabe erläutert wird. Die Eingabe hat mindestens ein Zeichen.
- Die Verwendung der Standardlücken ist strengstens untersagt.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort. Es wird jedoch keine akzeptierte Antwort geben, da dies ein sprachspezifischer Wettbewerb ist, und die Beantwortung in Sprachen zu fördern, in denen diese Aufgabe im Vergleich zu in anderen Sprachen geschriebenem Code zu längerem Code führen würde.
Testfälle
Die Zeichen, die hier verwendet werden ()⍴
, sollten durch die von Ihnen gewählten Zeichen ersetzt werden.
⍴ -> ⍴
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴⍴))))))
⍴⍴⍴⍴⍴(⍴⍴⍴)⍴⍴(⍴(⍴⍴⍴)⍴⍴⍴)⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴((⍴⍴⍴)⍴(⍴(⍴(⍴⍴⍴)(⍴⍴⍴))(⍴⍴⍴)))))
(⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴) -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
(⍴⍴⍴)(⍴⍴⍴)⍴⍴⍴ -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
⍴⍴(⍴)⍴⍴ -> ⍴⍴(⍴⍴⍴)
((⍴⍴)) -> ⍴⍴
⍴⍴((⍴⍴))⍴⍴ -> ⍴⍴((⍴⍴)⍴⍴)
Diese Herausforderung wurde in der Sandbox veröffentlicht. Wenn Sie über die erforderlichen Berechtigungen verfügen, können Sie den Sandbox-Beitrag hier anzeigen .