バックグラウンド
組み合わせロジックとは何かを学習しました。さまざまなコンビネーターに興味をそそられ、かなりの時間を費やしてそれらについて学びます。最後に、この特定の式に遭遇します。
(S I I (S I I))
あなたはそれを通常の形に還元しようとするとき、それは3つのステップの後にそれ自身に還元することに気づきます:
(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)
あなたはこの特性を共有する他の表現を見つけ、これにすぐに取り掛かろうと決心しました。
ルール
次のコンビネータの任意の組み合わせを使用できます。
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
アプリケーションは関連付けられたまま
(S K K)
になってい((S K) K)
ます。つまり、実際にはです。削減は最小限であり、より少ないステップを使用する他の削減ステップの順序はありません。例:
x
にreducey
がある場合、の正しい最小の削減(W f x)
は次のとおりです。(W f x) = (W f y) (1) = f y y (2)
ではなく
(W f x) = f x x (1) = f y x (2) = f y y (3)
標準の抜け穴が適用されます。
仕事
式のサイクルを、2つの同じ式の間の最小数の削減として定義します。
あなたの仕事は、使用されるコンビネーターの数が100未満で、最も長いサイクルを生成する式を見つけることです。
得点
あなたのスコアはあなたの表現のサイクルの長さによって決定されます。2人の表現が同じサイクルである場合、より少ないコンビネーターを使用する答えが優先されます。両方が同じ数のコンビネーターを使用する場合、早い方の答えが優先されます。
頑張って楽しんでね!
atomic-code-golfはタイブレーカーに適合しますが、タイブレーカーのタグは追加しません。適切なタグがない場合、デフォルトはcode-challengeです。これは、チャレンジがカスタム勝利基準を使用することを示します。
—
Martin Ender
あなたの記法が使っている連想の慣習をあなたが言ったならそれは助けになると思います。
—
xnor
サイクル与えられた表現が可能な複数の削減を持つことができますので、あなたがそれを定義したように、必ずしも明確に定義されていないです。
—
Peter Taylor
@ThreeFx、あなたは間違っています。たとえば、それ
—
Peter Taylor
x
までに減少したy
場合、W f x -> W f y -> f y y
またはW f x -> f x x -> f x y -> f y y
長さが異なる場合。
ここでトリッキーなことは、誰かがサイクルを投稿するだけではスコアを要求できないことです。彼らは計算上困難かもしれないより短い削減がないことの証明が必要です。
—
XNOR