Hintergrund
Sie haben gerade gelernt, was kombinatorische Logik ist. Fasziniert von den verschiedenen Kombinatoren verbringen Sie viel Zeit damit, sie kennenzulernen. Sie stolpern schließlich über diesen besonderen Ausdruck:
(S I I (S I I))
Sie bemerken, dass beim Versuch, es auf seine normale Form zu reduzieren, es nach drei Schritten auf sich selbst reduziert wird:
(S I I (S I I))
= (I (S I I) (I (S I I))) (1)
= (S I I (I (S I I))) (2)
= (S I I (S I I)) (3)
Sie sind entschlossen, andere Ausdrücke zu finden, die dieses Merkmal teilen, und sofort damit zu beginnen.
Regeln
Sie können eine beliebige Kombination der folgenden Kombinatoren verwenden:
B f g x = f (g x) C f x y = f y x I x = x K x y = x S f g x = f x (g x) W f x = f x x
Die Anwendung bleibt assoziativ, was bedeutet, dass dies
(S K K)
tatsächlich der Fall ist((S K) K)
.Eine Reduzierung ist minimal. Es gibt keine andere Reihenfolge von Reduktionsschritten, die weniger Schritte verwendet. Beispiel: Wenn
x
eine Reduzierung vorliegty
, ist die korrekte minimale Reduzierung von(W f x)
:(W f x) = (W f y) (1) = f y y (2)
und nicht
(W f x) = f x x (1) = f y x (2) = f y y (3)
Es gelten Standardlücken.
Aufgabe
Wir definieren den Zyklus eines Ausdrucks als die minimale Anzahl von Reduktionen zwischen zwei gleichen Ausdrücken.
Ihre Aufgabe ist es, den Ausdruck mit der Anzahl der verwendeten Kombinatoren <100 zu finden, der den längsten Zyklus erzeugt.
Wertung
Ihre Punktzahl wird durch die Länge des Zyklus Ihres Ausdrucks bestimmt. Wenn der Ausdruck von zwei Personen den gleichen Zyklus hat, gewinnt die Antwort, die weniger Kombinatoren verwendet. Wenn beide die gleiche Anzahl von Kombinatoren verwenden, gewinnt die frühere Antwort.
Viel Glück und hab Spaß!
x
hat eine Reduktion auf y
dann W f x -> W f y -> f y y
oder W f x -> f x x -> f x y -> f y y
sind unterschiedliche Längen.