Kết hợp câu hỏi hóc búa!


12

Giới thiệu: Logic kết hợp

Logic kết hợp (CL) dựa trên những thứ được gọi là tổ hợp , về cơ bản là các chức năng. Có hai tổ hợp "tích hợp" cơ bản, SKsẽ được giải thích sau.

Kết hợp trái

CL là liên kết bên trái , có nghĩa là dấu ngoặc (chứa nội dung) nằm ở phía bên trái của cặp dấu ngoặc có chứa nó có thể được gỡ bỏ, với nội dung được phát hành. Ví dụ, một cái gì đó như thế này:

((a b) c)

Có thể giảm xuống

(a b c)

Trường hợp (a b)nằm ở bên trái của khung lớn hơn ((a b) c), vì vậy nó có thể được gỡ bỏ.

Một ví dụ lớn hơn nhiều về liên kết trái (dấu ngoặc vuông là giải thích):

  ((a b) c ((d e) f (((g h) i) j)))
= (a b c ((d e) f (((g h) i) j)))   [((a b) c...) = (a b c...)]
= (a b c (d e f (((g h) i) j)))     [((d e) f...) = (d e f...)]
= (a b c (d e f ((g h i) j)))       [((g h) i) = (g h i)]
= (a b c (d e f (g h i j)))         [((g h i) j) = (g h i j)]

Chân đế cũng có thể được giảm khi có nhiều hơn một cặp quấn quanh cùng một vật. Ví dụ:

((((a)))) -> a
a ((((b)))) -> a b
a (((b c))) -> a (b c) [(b c) is still a group, and therefore need brackets.
                        Note that this doesn't reduce to `a b c`, because
                        `(b c)` is not on the left.]

Nội địa

CL có hai tổ hợp "tích hợp" SKcó thể chuyển đổi các đối tượng (tổ hợp đơn hoặc một nhóm tổ hợp / nhóm được bao quanh dấu ngoặc) như vậy:

K x y = x
S x y z = x z (y z)

Ở đâu x, yzcó thể là stand-in cho bất cứ điều gì.

Một ví dụ về SKnhư sau:

  (S K K) x [x is a stand-in for anything]
= S K K x   [left-associativity]
= K x (K x) [S combinator]
= x         [K combinator]

Một vi dụ khac:

  S a b c d
= a c (b c) d [combinators only work on the n objects to the right of it,
               where n is the number of "arguments" n is defined to have -
               S takes 3 arguments, so it only works on 3 terms]

Trên đây là các ví dụ về các câu lệnh CL bình thường, trong đó câu lệnh không thể được đánh giá thêm và đạt được kết quả cuối cùng trong một khoảng thời gian hữu hạn. Có những tuyên bố không bình thường (là những tuyên bố CL không chấm dứt và sẽ được đánh giá mãi mãi), nhưng chúng không nằm trong phạm vi của thách thức và sẽ không cần phải được bảo hiểm.

Nếu bạn muốn tìm hiểu thêm về CL, hãy đọc trang Wikipedia này .

Bài tập:

Nhiệm vụ của bạn là tạo ra các tổ hợp bổ sung, với số lượng đối số và những gì nó đánh giá là đầu vào, được đưa ra như vậy:

{amount_of_args} = {evaluated}

Trường hợp {amount_of_args}một số nguyên dương bằng với số lượng đối số và {evaluated}bao gồm:

  • đối số lên đến số lượng đối số, với 1đối số thứ nhất, 2là đối số thứ hai, vân vân.
    • Bạn được đảm bảo rằng các số đối số trên số lượng đối số (vì vậy chỉ 4khi nào ) sẽ không xuất hiện .{amount_of_args}3{evaluated}
  • dấu ngoặc ()

Vì vậy, ví dụ về đầu vào là:

3 = 2 3 1
4 = 1 (2 (3 4))

Đầu vào đầu tiên là yêu cầu một bộ kết hợp (giả sử R) với ba đối số ( R 1 2 3), sau đó đánh giá thành:

R 1 2 3 -> 2 3 1

Đầu vào thứ hai yêu cầu điều này (với tên tổ hợp A):

A 1 2 3 4 -> 1 (2 (3 4))

Với đầu vào ở định dạng này, bạn phải trả về một chuỗi S, K(), khi được thay thế bằng tên của tổ hợp và chạy bằng các đối số, sẽ trả về cùng một câu lệnh được đánh giá là {evaluated}khối khi khối lệnh được thay thế trở lại cho tên của tổ hợp đó.

Câu lệnh kết hợp đầu ra có thể bị xóa khoảng trắng và dấu ngoặc ngoài, vì vậy một cái gì đó giống như (S K K (S S))có thể được chuyển thành SKK(SS).

Nếu bạn muốn kiểm tra kết quả đầu ra của chương trình của bạn, @aditsu đã làm một phân tích cú pháp lôgic combinatory (trong đó bao gồm S, K, Ivà thậm chí cả những người khác muốn BC) ở đây .

Ghi bàn:

Vì đây là một , mục đích của thử thách này là đạt được số lượng byte nhỏ nhất trong đầu ra có thể, với 50 trường hợp thử nghiệm này . Vui lòng đặt kết quả của bạn cho 50 trường hợp thử nghiệm trong câu trả lời hoặc tạo một pastebin (hoặc một cái gì đó tương tự) và gửi một liên kết đến pastebin đó.

Trong trường hợp hòa, giải pháp sớm nhất sẽ thắng.

Quy tắc:

  • Câu trả lời của bạn phải trả về đầu ra ĐÚNG - vì vậy, với một đầu vào, nó phải trả về đầu ra chính xác theo định nghĩa trong tác vụ.
  • Câu trả lời của bạn phải xuất trong vòng một giờ trên máy tính xách tay hiện đại cho mỗi trường hợp thử nghiệm.
  • Bất kỳ mã hóa cứng của các giải pháp đều không được phép. Tuy nhiên, bạn được phép mã hóa tối đa 10 tổ hợp.
  • Chương trình của bạn phải trả lại cùng một giải pháp mỗi lần cho cùng một đầu vào.
  • Chương trình của bạn phải trả về một kết quả hợp lệ cho bất kỳ đầu vào nào, không chỉ các trường hợp thử nghiệm.

Làm thế nào bạn có thể chắc chắn rằng mọi người sẽ không ăn cắp các tổ hợp được tìm thấy trong các câu trả lời khác?
Gây tử vong vào

@Firthize Điều đó không quá quan trọng, vì mọi người có thể lấy cảm hứng từ câu trả lời của người khác và dựa vào đó để tạo ra câu trả lời tốt hơn.
clismique

Nói về cảm hứng, tôi nhận thấy rằng khi kết quả mong muốn không chứa a 1, bạn có thể trừ đi 1mọi thứ, sau đó gói giải pháp cho câu trả lời đó K(). Ví dụ: Giải đáp cho 2 -> 1K, do đó giải pháp cho 3 -> 2KK, giải pháp cho 4 -> 3K(KK), vv
Neil

Câu trả lời:


8

Haskell , điểm 5017

Điều này kết hợp thuật toán ngu ngốc nhất có thể để loại bỏ trừu tượng ((λ x . X ) = I; (λ x . Y ) = K y ; (λ x . M N ) = S (λ x . M ) (λ x . N ) ) với trình tối ưu hóa lổ nhìn trộm được sử dụng sau mỗi ứng dụng. Quy tắc tối ưu hóa quan trọng nhất là S (K x ) (K y ) K ( xy ), điều này ngăn thuật toán luôn nổ tung theo cấp số nhân.

Tập hợp các quy tắc được cấu hình dưới dạng danh sách các cặp chuỗi để dễ dàng thực hiện với các quy tắc mới. Là một phần thưởng đặc biệt của việc tái sử dụng trình phân tích cú pháp đầu vào cho mục đích này, S, K và tôi cũng được chấp nhận trong các tổ hợp đầu vào.

Các quy tắc không được áp dụng vô điều kiện; thay vào đó, cả hai phiên bản cũ và mới đều được giữ và các phiên bản dưới mức tối ưu chỉ được cắt tỉa khi chiều dài của chúng vượt quá phiên bản tốt nhất nhiều hơn một số hằng số (hiện tại là 3 byte).

Điểm số được cải thiện đôi chút bằng cách coi I là một tổ hợp cơ bản cho đến khi giai đoạn đầu ra viết lại thành SKK. Bằng cách đó, KI = K (SKK) có thể được rút ngắn 4 byte thành SK trên đầu ra mà không gây nhầm lẫn cho các tối ưu hóa còn lại.

{-# LANGUAGE ViewPatterns #-}

import qualified Data.IntMap as I
import qualified Data.List.NonEmpty as N
import System.IO

data Term
  = V Int
  | S
  | K
  | I
  | A (N.NonEmpty (Int, Term, Term))
  deriving (Show, Eq, Ord)

parse :: String -> (Term, String)
parse = parseApp . parse1

parseApp :: (Term, String) -> (Term, String)
parseApp (t, ' ':s) = parseApp (t, s)
parseApp (t, "") = (t, "")
parseApp (t, ')':s) = (t, ')' : s)
parseApp (t1, parse1 -> (t2, s)) =
  parseApp (A (pure (appLen (t1, t2), t1, t2)), s)

parse1 :: String -> (Term, String)
parse1 (' ':s) = parse1 s
parse1 ('(':(parse -> (t, ')':s))) = (t, s)
parse1 ('S':s) = (S, s)
parse1 ('K':s) = (K, s)
parse1 ('I':s) = (I, s)
parse1 (lex -> [(i, s)]) = (V (read i), s)

ruleStrings :: [(String, String)]
ruleStrings =
  [ ("1 3(2 3)", "S1 2 3")
  , ("S(K(S(K1)))(S(K(S(K2)))3)", "S(K(S(K(S(K1)2))))3")
  , ("S(K(S(K1)))(S(K2))", "S(K(S(K1)2))")
  , ("S(K1)(K2)", "K(1 2)")
  , ("S(K1)I", "1")
  , ("S(S(K1)2)(K3)", "S(K(S1(K3)))2")
  , ("S(SI1)I", "S(SSK)1")
  ]

rules :: [(Term, Term)]
rules = [(a, b) | (parse -> (a, ""), parse -> (b, "")) <- ruleStrings]

len :: Term -> Int
len (V _) = 1
len S = 1
len K = 1
len I = 3
len (A ((l, _, _) N.:| _)) = l

appLen :: (Term, Term) -> Int
appLen (t1, S) = len t1 + 1
appLen (t1, K) = len t1 + 1
appLen (K, I) = 2
appLen (t1, t2) = len t1 + len t2 + 2

notA :: Term -> Bool
notA (A _) = False
notA _ = True

alt :: N.NonEmpty Term -> Term
alt ts =
  head $
  N.filter notA ts ++
  [A (N.nub (a N.:| filter (\(l, _, _) -> l <= minLen + 3) aa))]
  where
    a@(minLen, _, _) N.:| aa =
      N.sort $ do
        A b <- ts
        b

match :: Term -> Term -> I.IntMap Term -> [I.IntMap Term]
match (V i) t m =
  case I.lookup i m of
    Just ((/= t) -> True) -> []
    _ -> [I.insert i t m]
match S S m = [m]
match K K m = [m]
match I I m = [m]
match (A a) (A a') m = do
  (_, t1, t2) <- N.toList a
  (_, t1', t2') <- N.toList a'
  m1 <- match t1 t1' m
  match t2 t2' m1
match _ _ _ = []

sub :: I.IntMap Term -> Term -> Term
sub _ S = S
sub _ K = K
sub _ I = I
sub m (V i) = m I.! i
sub m (A a) =
  alt $ do
    (_, t1, t2) <- a
    pure (sub m t1 & sub m t2)

optimize :: Term -> Term
optimize t = alt $ t N.:| [sub m b | (a, b) <- rules, m <- match a t I.empty]

infixl 5 &

(&) :: Term -> Term -> Term
t1 & t2 = optimize (A (pure (appLen (t1, t2), t1, t2)))

elim :: Int -> Term -> Term
elim n (V ((== n) -> True)) = I
elim n (A a) =
  alt $ do
    (_, t1, t2) <- a
    pure (S & elim n t1 & elim n t2)
elim _ t = K & t

paren :: String -> Bool -> String
paren s True = "(" ++ s ++ ")"
paren s False = s

output :: Term -> Bool -> String
output S = const "S"
output K = const "K"
output I = paren "SKK"
output (V i) = \_ -> show i ++ " "
output (A ((_, K, I) N.:| _)) = paren "SK"
output (A ((_, t1, t2) N.:| _)) = paren (output t1 False ++ output t2 True)

convert :: Int -> Term -> Term
convert 0 t = t
convert n t = convert (n - 1) (elim n t)

process :: String -> String
process (lex -> [(n, lex -> [((`elem` ["=", "->"]) -> True, parse -> (t, ""))])]) =
  output (convert (read n) t) False

main :: IO ()
main = do
  line <- getLine
  putStrLn (process line)
  hFlush stdout
  main

Hãy thử trực tuyến!

Đầu ra

  1. S (KS) K
  2. S (K (SS (KK))) (S (KK) S)
  3. S (K (SS)) (S (KK) K)
  4. S (K (SS (KK))) (S (KK) (S (KS) (S (K (S (SKK))))))
  5. S (K (S (K (SS (SK))))) (S (K (SS (SK))) (S (SKK) (SKK)))
  6. KK
  7. S (K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K)
  8. S (K (SS (K (S (KK) (S (SKK) (SKK)))))) (S (SSK (KS)) (S (S (KS) (S (KK) (S (KS) K))) (K (S (K (S (SSK))))))))
  9. S (K (S (KK))) (S (K (S (S (SKK) (SKK)))))
  10. SK
  11. S (KS) (S (KK) (S (K (SS)) (S (KK) K)))
  12. S (K (SS (K (S (KK) K)))) (S (KK) (S (KS) (S (SSK (KS)) (S (K (SS)) (S (KK) K) ))))
  13. S (K (S (K (S (K (SS (KK))) (S (KK) S))))) (S (K (SS (KK))) (S (KK) (S (KS) (S (K (S (SKK))) K))))
  14. S (K (S (K (S (K (SS (KK))) (S (KK) S))))) (S (K (S (SKK))) K)
  15. S (K (S (K (S (KS) K)))) (S (KS) K)
  16. S (K (S (KS) K))
  17. S (K (S (K (S (K (SS (K (S (S (KS) (S (KK) (SSK))) (K (S (SKK) (SKK)))))) (S (KK) (S (KS) K)))))) (S (K (SS (K (SSK)))) (S (KK) (S (KS) (S (KK) (SSK)))) )
  18. SSS (KK)
  19. KK
  20. S (KK) (S (KK) (S (S (KS) K) (S (K (S (SKK))) (S (K (S (SKK))) K))))
  21. S (S (KS) (S (KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))) (K (S (K (S (S (S (S (S (S (S (S (S (S (S (S (S () ( S (KS) (S (K (S (SKK))) K)))) (S (KK) K)))
  22. S (KK)
  23. S (KS) (S (KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))
  24. S (K (S (K (S (KS) K)))) (S (K (S (S (KS) (S (KK) (S (K (SS)) (S (KK) K))) ))) (S (KK) (S (K (SS)) (S (KK) K))))
  25. S (KS) (S (KK) (S (KS) K))
  26. S (S (KS) (S (KK) (S (KS) (S (KK) (S (K (S (K (SS))))) (S (KS) (S (KK) (S) (SSK (KS)) (S (KS) (S (SKK) (SKK))))))))))) (K (S (S (KS) (S (K (S (K (S (KS (KS) ) (S (K (S (KS) (S (K (S (SKK))) K)))))))) (S (K (S (SKK))) K))) (S (K ( S (K (S (KK) K)))) (S (K (S (SKK))) K))))
  27. S (K (S (K (S (K (SS (K (S (K (S (S (KS) (S (K (S (SKK))))))) (S (KK) K)) ))) (S (KK) (S (KS) K)))))) (S (K (SS (K (S (K (SS)) (S (KK) K))))) (S ( KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))))
  28. K (S (KK))
  29. S (K (S (K (S (K (S (K (S (KS) K)))) (S (K (S (S (KS) (S (KK) (S (K (SS)) ( S (KK) K)))))) K))))) (S (K (S (S (KS) (S (KK) (S (K (SS)) (S (KK) K))) ))) (S (KK) (S (K (SS)) (S (KK) K))))
  30. S (KK) (S (K (SSS (KK))))
  31. K (SSS (KK))
  32. S (K (SS (K (S (S (KS) (S (KK) (S (KS) K))) (K (S (K (S (SKK))) K)))))) (S (KK) (S (KS) (SS (S (S (KS) (S (KK) (S (KS) (S (K (S (KS) (S (KK) (S (KS) K))) )))))) (KK))))
  33. S (K (S (K (S (K (S (K (SS (KK))) (S (KK) S))))))) (S (K (SS (K (S (KK) K) ))) (S (KK) (SSS (KS))))
  34. S (K (S (K (S (KK) K))))
  35. S (K (S (K (S (K (S (K (SS (K (S (K (S (SKK))))))) (S (KK) (S (KS) (S (KK) (S (K (SS (K (S (K (S (SKK))) K)))) (S (KK) (S (K (SS)) (S (KK) K))))))) )))))) (S (K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K))
  36. S (K (SS (K (S (K (SS (K (S (K (S (SKK))) K)))) (S (KK) (S (KS) (SS (S (S (KS) (S (KK) (S (KS) (S (K (S (SKK))) K))))) (KK)))))))) (S (KK) (S (KS) (S ( KK) (S (K (S (K (S (K (S (K (S (K (SS (KK)))) (S (KK) S)))))))) (S (K (SS (KK))) (S (KK) (S (KS) (S (K (S (KS) (S (KK) (S (KS) K)))))))))))))
  37. S (KK) (S (K (S (K (S (KK) (S (KK) K))))) (SS (SK)))
  38. K (S (K (SSS (KK))))
  39. S (K (S (K (S (K (S (K (S (K (S (K (S (K (SS (K (S (K (S (S (KS) ') (S (K (S (SKK) ))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (SS (K (S (K (SS (SS) )) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS)) (S ( KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS)) (S (KK) K)) ))) (S (KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K))))))
  40. S (K (S (KK))) (S (KS) (S (KK) (S (K (S (KK) (S (KK) K))))))
  41. S (K (SS (K (S (S (KS) (S (KK) (S (KS) K))) (K (S (K (S (SKK))) K)))))) (S (KK) (S (KS) (S (KK) (S (K (S (K (S (K (SS (K (S (K (SS))) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (SS (K (S (KK) (S (K (SS)) K))))) (S (KK) (S ( K (SS)) (S (KK) (S (K (S (K (S (KK) (S (KS) K))))) (S (KS) K))))))))))
  42. S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (SS (K (S (K (S (S (KS)))) (S (K (S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (SS (SS) (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K)))))))) (S (K (SS (K (S (S (S (S (S (S (S (S () ( K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS))) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K))))))
  43. K (K (K (K (K (S (KK) (S (KK) (S (K (SS (SK))) (SSK)))))))))
  44. S (KK) (S (K (S (KK) (S (KK) (S (KK) (S (KK) K))))))
  45. S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (S (K (SS (K (S (S (K) K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))) )) (S (K (SS (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S ( K (SS (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (K (K) (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (K (K (K (K (S (K) SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K))))))
  46. S (K (S (K (S (K (S (K (S (K (SS (K (S (K (SS (K (S (K (SS (KK))))))) KS) (S (K (S (SKK))) K))))))) (S (KK) (S (KS) (S (KK) (S (SSK (KS)) (S (K (SS) )) (S (KK) K)))))))))) (S (KK) (S (KS) (S (KK) (S (K (SS (K (S (KK) (S (KS) ) (S (KK) (S (K (SS (K (S (KK) (S (KS) K))))) (S (KK) (S (K (SS)) (S (KK) (S (K (SS (K (S (KK) K)))) (S (KK) S)))))))))))) (S (KK) (S (K (SS)) K)) )))))))) (S (K (SS (K (S (KK) (S (K (S (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))) (S (KK) (S (K (SS)) (S (KK) K)))))))) (S (KK) S)))))) (S (K (SS (K (S (K (S (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))) (S (KK) (S (K ( SS)) (S (KK) K))))))) (S (KK) (S (KS) (S (KK) (S (K (S (K (S (KS) (S (KK) ( S (KS) K)))))) (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))))))
  47. S (K (SS (K (SS (S (S (KS) (S (KK) S))) (KK))))) (S (KK) (S (KS) (S (K (S (K (K (S (K) (S (KS) (S (KK) (S (KS) (S (KK) (S (K (S (K (S (K (SS (K (S (K (S (S (KS)))) KK) (S (K (SS)) (S (KK) K)))))) (S (KK) (S (K (SS)) (S (KK) K))))))) (S (KK) (S (KS) K)))))))))))))) (S (K (S (S (KS) (S (KK) (S (K (SS)) (S ( KK) (S (K (S (K (S (KS) K)))) (S (K (SS (K (S (K (SS)) (S (KK) K))))) (S ( KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K))))))))))))) (S (KK) (S (K (S (S (K (S) (K (S (KK) (S (KS) (S (KK) (S (K (SS (K (S (KK) (S (KS) K))))) (S (KK) (S (K (K) (SS)) K))))))))) (S (KS) (S (KK) (S (K (SS (K (S (KK) K)))) (S (KK) (S ( KS) (S (SSK (KS)) (S (K (SS (KK))) (S (KK) (S (KS) (S (K (S (SKK))) K))))))) )))))))))
  48. K (S (K (S (KK) (S (K (S (KK) (S (K (S (KK) (S (KK) K))))))))))
  49. S (KK) (S (K (S (K (S (KK) (S (K (S (K (S (KK) (S (K (S (K (S (KK) (S (K (S (S (K (S (K) K (S (KK) (S (K (S (KK))) (S (K (S (SKK))) K)))))) (S (K (S (SKK))) K))) ))) (S (K (S (SKK))) K)))))) (S (K (S (SKK))) K)))))) (S (K (S (SKK))) K))
  50. S (K (S (K (S (K (S (K (S (K (S (KK))))) (S (K (SS (K (S (K (S (S (KS) (S (K (S (K) S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (S (S (S (S (S (K (S (K) (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (SS (K (S (K (SS) ) (S (KK) K))))) (S (KK) (S (KS) (S (KK) (S (K (S (K (S (KK) (S (KK) (S (KK) (S (KK) K))))))) (S (K (SS)) (S (KK) K)))))))

Có thể làm cho các biểu thức tự động tối ưu hóa (ví dụ S (K x) (K y) = K (x y)) không?
Máy

@CalculatorFeline Tôi không hiểu câu hỏi của bạn; S (K x ) (K y ) được tự động tối ưu hóa thành K ( xy ).
Anders Kaseorg

Đợi đã, những biểu thức này được biểu diễn dưới dạng các hàm được áp dụng một phần hay cái gì khác? Nếu một phần được áp dụng các chức năng, thì có lẽ bạn có thể làm một cái gì đó giống như bình luận cuối cùng của tôi.
Máy

@CalculatorFeline Biểu diễn trông giống như, ví dụ 3 = 1 (2 3) 2 = S (K1) (S (K2) I) 2 = S (K1) 2 1 = S (S (KS) (S (KK) (K1))) I 1 = S (S (KS) (K (K1))) I 1 = S (K (S (K1))) I 1 = S (K (S (K1) ))) I 1 = S (K1) S (KS) (S (KK) I) S (KS) K. Như bạn có thể thấy, chúng tôi đã sử dụng quy tắc S (K x ) (K y ) K ( xy ) nhiều lần, cùng với các quy tắc khác mà tôi đã liệt kê ruleStrings. Nếu chúng ta không làm như vậy, đầu ra sẽ dài hơn theo cấp số nhân: đối với ví dụ nhỏ bé này, chúng ta đã nhận được S (S (KS) (S (S (KS) (S (KK) (KS))) (S (S (KS) (S (KK) (KK))) (S (KK) (SKK))))) (S (S (KS) (S (S (KS) (S (KK) (KS))) ( S (S (KS) (S (KK) (KK))) (SK)))) (S (KK) (SK))) thay vì S (KS) K.
Anders Kaseorg

5

Tổng chiều dài dung dịch: 12945 8508 5872

Mã Haskell lấy các dòng đầu vào từ stdin và không quan tâm nếu dấu phân cách là =hoặc ->:

data E=S|K|V Int|A E E deriving Eq

instance Show E where
  showsPrec _ S = showChar 'S'
  showsPrec _ K = showChar 'K'
  showsPrec _ (V i) = shows i
  showsPrec p (A e f) = showParen (p>0) $ showsPrec 0 e . showsPrec 1 f

type SRead a = String -> (a,String) -- a simpler variation of ReadS

parse :: String -> E
parse s = let (e,"")=parseList (s++")") in e
parseList :: SRead E
parseList s = let (l,s')=parseL s in (foldl1 A l,s')
parseL :: SRead [E]
parseL (c:s) | c==' ' = parseL s
             | c==')' = ([],s)
parseL s = let (p,s')=parseExp s; (l,s'')=parseL s' in (p:l,s'')
parseExp :: SRead E
parseExp ('(':s) = parseList s
parseExp s = let [(n,s')]=reads s in (V n,s')

k e = A K e
s e f = A (A S e) f
i = s K K
s3 e f g = A (s e f) g
sk = A S K
ssk e f = A (s3 S K e) f

n `invars` (A e f) = n `invars` e || n `invars` f
n `invars` (V m)   = n==m
_ `invars` _       = False

comb (A e f) = comb e && comb f
comb (V _)   = False
comb _       = True

abstract _ (A (A S K) _) = sk
abstract n e | not (n `invars` e) = k e
abstract n (A e (V _)) | not (n `invars` e) = e
abstract n (A (A (V i) e) (V j)) | n==i && n==j =
                                   abstract n (ssk (V i) e)
abstract n (A e (A f g)) | comb e && comb f =
                                   abstract n (s3 (abstract n e) f g)
abstract n (A (A e f) g) | comb e && comb g =
                                   abstract n (s3 e (abstract n g) f)
abstract n (A (A e f) (A g h)) | comb e && comb g && f==h =
                                   abstract n (s3 e g f)
abstract n (A e f) = s (abstract n e) (abstract n f)
abstract n _ = i

abstractAll 0 e = e
abstractAll n e = abstractAll (n-1) $ abstract n e

parseLine :: String -> (Int,E)
parseLine s = let [(n,s')] = reads s
                  s''=dropWhile(`elem` " =->") s'
              in (n, parse s'')

solveLine :: String -> E
solveLine s = let (n,e) = parseLine s in abstractAll n e

main = interact $ unlines . map (show . solveLine) . lines

Nó thực hiện việc trừu tượng hóa khung được cải thiện từ phần 3.2 của John Tromp: Tính toán nhị phân Lambda và Logic kết hợp được liên kết đến từ bài viết Wikipedia về logic kết hợp. Các trường hợp đặc biệt hữu ích nhất chỉ sử dụng bộ Skết hợp để làm nghẹt các tập hợp con xung quanh để tránh làm tổ sâu các biến. Trường hợp kiểm tra sự bằng nhau của một số subterms là không cần thiết cho bất kỳ trường hợp thử nghiệm nào. Mặc dù không có trường hợp đặc biệt nào để xử lý bộ Wkết hợp (xem câu trả lời của Peter), các quy tắc phối hợp với nhau để tìm SS(SK)biểu thức ngắn hơn . (Trước tiên tôi đã mắc lỗi bằng cách cố gắng tối ưu hóa các cuộc gọi bên trong abstract, sau đó Wtối ưu hóa này đã không xảy ra và kết quả chung là dài hơn 16 byte.)

Và đây là kết quả từ các trường hợp thử nghiệm:

S(KS)K
S(K(S(K(SS(KK)))K))S
S(K(S(K(SS))K))K
S(K(S(K(S(K(S(K(SS(KK)))K))S))(S(SKK))))K
S(K(S(K(SS(SK)))))(S(K(SS(SK)))(S(SKK)(SKK)))
KK
S(K(S(K(S(S(K(S(KS)(S(SKK))))K)))K))K
S(K(S(K(SS(K(S(KK)(S(SKK)(SKK))))))(S(KS))))(S(K(S(K(S(K(SS(K(S(K(S(SSK)))K))))K))S))K)
S(K(S(K(S(KK)))(S(S(SKK)(SKK)))))K
SK
S(K(S(K(S(K(S(S(KS)(S(KS)))))K))K))K
S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(KK)K))))K))S))(S(KS))))(SS)))K))K
S(K(S(K(S(K(S(K(SS(KK)))K))S))))(S(K(S(K(S(K(S(K(SS(KK)))K))S))(S(SKK))))K)
S(K(S(K(S(K(S(K(S(K(SS(KK)))K))S))))(S(SKK))))K
S(K(S(K(S(K(S(K(S(K(SS(K(S(KS)K))))K))S))K))S))K
S(K(S(KS)K))
S(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(K(S(K(S(K(S(K(S(K(SS(K(S(S(K(S(KS)(S(KS))))(S(K(S(K(S(K(SS(K(S(S(KS)(S(K(SS(K(S(SKK)(SKK)))))K))K))))K))S))K))(S(KK)K)))))K))S))K))S))K))(S(K(S(KK)K))K)
S(KK)(S(KK))
KK
S(K(S(KK)K))(S(S(KS)K)(S(K(S(K(S(SKK)))(S(SKK))))K))
S(K(S(K(S(K(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K)))K))K))K
S(KK)
S(K(S(K(S(K(S(K(S(S(KS)(S(K(S(KS)(S(KS))))))))K))K))K))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))(S(S(KS)(S(KS))))))K))K))K
S(K(S(K(S(KS)K))S))K
S(K(S(K(S(K(S(K(SS(KK)))(S(KS))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(K(S(KS)(S(SKK))))K))))))))(S(SKK))))K)(S(K(S(K(S(K(S(KK)K))))(S(SKK))))K)))))K))S))K))S))K))S))(S(SKK)(SKK)))
S(K(S(K(S(K(S(K(S(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K))))K))K))K)))K))K))K))K
K(S(KK))
S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))(S(S(KS)(S(KS))))))K))K))K)
S(KK)(S(K(S(KK)(S(KK)))))
K(S(KK)(S(KK)))
S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)))(S(K(S(K(S(K(SS(K(S(K(S(SKK)))K))))K))S))K)))))K))S))K))S))(S(K(S(K(S(K(S(KS)K))S))K)))
S(K(S(K(S(K(S(K(S(K(SS(KK)))K))S))))))(S(K(S(K(S(K(SS(K(S(KK)K))))K))S))(S(KS)))
S(K(S(K(S(KK)K))))
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(S(K(S(K(S(KS)(S(K(S(K(S(KS)(S(SKK))))K)))))(S(SKK))))K)))K))K))K))))))(S(S(K(S(KS)(S(SKK))))K))))K))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(KK)))K))S))))))))))(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)))(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(KK)))(S(SKK))))K))))K))S))K))S))(S(SKK))))K)))))K))S))K))S))(S(K(S(K(S(K(S(KS)K))S))K))))
S(K(S(KK)(S(K(S(K(S(KK)K))K)))))(SS(SK))
K(S(K(S(KK)(S(KK)))))
S(K(S(K(S(K(S(K(S(K(S(K(S(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))(S(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K))))K))K))K))))K))K))K))K))))K))K))K))K))K)))K))K))K))K))K))K
S(K(S(K(S(K(S(KK)(S(K(S(K(S(KK)K))K)))))))S))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(KS)K))S))K))))K))))(S(K(S(K(S(K(SS(K(S(K(S(SKK)))K))))K))S))K)))))K))S))K))S))K))S))K))S))K))S))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))(S(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K))))K))K))K))))K))K))K))K))))K))K))K))K))K))))K))K))K))K))K))K)))K))K))K))K))K))K))K
K(K(K(K(K(S(K(S(KK)K))(S(K(SS(SK)))(SSK)))))))
S(KK)(S(K(S(K(S(K(S(K(S(KK)K))K))K))K)))
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))(S(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K))))K))K))K))))K))K))K))K))))K))K))K))K))K))))K))K))K))K))K))K))))K))K))K))K))K))K))K)))K))K))K))K))K))K))K))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))))))))(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(KK)K))K))K))))K))S))(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))(S(K(S(K(S(K(S(K(SS(K(S(KK)K))))K))S))(S(KS)))))))(S(S(K(S(KS)(S(KS))))(S(K(S(K(S(K(S(K(SS(KK)))K))S))(S(SKK))))K)))))K))K))K))))K))K))K))K))K))))K))K))K))K))K))K))K)))K))K))K))K))K))K))K))K))K
S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KK)K))K))K))K))K))K))K))))K))S))(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))))))))(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(K(S(KK)K))K))K))K))))K))S))(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS)))))))))))))(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))))))))(S(K(S(K(S(K(S(K(SS(K(S(K(S(KK)K))K))))K))S))(S(K(S(KS)(S(KS)))))))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(SS(K(S(K(S(K(S(K(S(K(S(KK)K))))))))(S(K(S(K(SS(KK)))K))S)))))K))S))K))S))K))S))K))S))(S(KS))))(S(K(S(K(S(K(S(K(SS(KK)))K))S))(S(SKK))))K))
K(S(K(S(KK)(S(K(S(KK)(S(K(S(K(S(KK)K))K)))))))))
S(K(S(K(S(KK)(S(K(S(K(S(K(S(KK)(S(K(S(K(S(K(S(KK)(S(K(S(K(S(K(S(KK)(S(K(S(K(S(K(S(KK)(S(KK))))(S(SKK))))K)))))(S(SKK))))K)))))(S(SKK))))K)))))(S(SKK))))K)))))(S(SKK))))K
S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KK)(S(K(S(K(S(K(S(K(S(KK)K))K))K))K)))))))))))(S(S(K(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(K(S(KS)(S(KS))))))))))(S(S(K(S(K(S(K(S(K(S(KS)(S(K(S(KS)(S(KS)))))))(S(S(K(S(K(S(K(S(KS)(S(KS))))(S(S(K(S(KS)(S(SKK))))K))))K))K))))K))K))K))))K))K))K))K))))K))K))K))K))K

3

8486 sử dụng S, K, I, W

Giải trình

Các thuật toán tiêu chuẩn (như ví dụ được mô tả trong chương 18 của Để Mock a Mockingbird ) sử dụng bốn trường hợp, tương ứng với combinators S, K, I = SKK, và đơn giản trái hiệp hội. Tôi nghĩ rằng đây là những gì câu trả lời của Christian thực hiện. Điều này là đủ, nhưng không nhất thiết là tối ưu, và vì chúng tôi được phép mã hóa tối đa 10 tổ hợp, nó để lại 7 tùy chọn.

Tổ hợp tổ hợp nổi tiếng khác là

B x y z = x (y z)
C x y z = x z y
W x y = x y y

trong đó, cùng với K, làm cho một cơ sở hoàn chỉnh . Trong SK đó là

B = S (K S) K
C = S (S (K (S (K S) K)) S) (K K)
W = S S (S K)

và các SKIquy tắc rút ra các biểu thức tương tự cho BC, nhưng cho Wchúng xuất phát S S (K (S K K)). Do đó tôi đã chọn thực hiện Wnhư một trường hợp đặc biệt.

Chương trình (CJam)

e# A tests whether argument is an array
{W=!!}:A;

e# F "flattens" an expression by removing unnecessary parentheses, although if the expression is a primitive
e# it actually wraps it in an array
{
  e# A primitive is already flat, so we only need to process arrays
  _A{
    ee{
      ~
      e# Stack: ... index elt
      e# First recurse to see how far that simplifies the element
      F
      e# If it's an array...
      _A{
        e# ... we can drop a level of nesting if either it's the first one (since combinator application
        e# is left-associative) or if it's a one-element array
        _,1=@!|{
          e# The tricky bit is that it might be a string, so we can't just use ~
          {}/
        }*
      }{
        \;
      }?
    }%
  }{a}?
}:F;


qN%{

e# Parse line of input
"->=()"" [[[]"er']+~
e# Eliminate the appropriate variables in reverse order. E eliminates the variable currently stored in V.
\,:)W%{
  e# Flatten current expression
  F

  e# Identify cases; X holds the eXpression and is guaranteed to be non-primitive
  :X
  [
    XVa=                  e# [V]
    Xe_V&!                e# case V-free expression
    X)_A0{V=}?\e_V&!*     e# case array with exactly one V, which is the last element
    X_e_Ve=~)>[VV]=X,2>*  e# case array with exactly two Vs, which are the last two elements
  ]
  1#
  e# Corresponding combinators
  [
    {;"SKK"}              e# I
    {['K\]}               e# K
    {);}                  e# X (less that final V)
    {););['S 'S "SK"]\a+} e# W special-cased as SS(SK) because the general-case algorithm derives SS(K(SKK))
    {['S\)E\E\]}          e# S (catch-all case)
  ]=~
}:EfV

e# Format for output
F
{
  _A{
    '(\{P}%')
  }*
}:P%

oNo}/

Bộ kiểm tra trực tuyến

Tạo đầu ra:

S(KS)K
S(S(KS)(S(KK)S))(KK)
S(K(SS))(S(KK)K)
S(S(KS)(S(KK)(S(KS)(S(K(S(SKK)))K))))(KK)
S(K(S(K(SS(SK)))))(S(K(SS(SK)))(S(SKK)(SKK)))
KK
S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K)
S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)K)))(K(S(S(KS)(S(K(S(SKK)))K))(K(SKK)))))))(K(S(KK)(S(SKK)(SKK))))
S(K(S(KK)))(S(K(S(S(SKK)(SKK))))K)
K(SKK)
S(K(S(S(KS)(S(KS)))))(S(KK)(S(KK)K))
S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(SS))(S(KK)K))))))(K(S(KK)K))
S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(K(S(SKK)))K))))(KK))))))(K(KK))
S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(K(S(SKK)))K)))))(K(KK))
S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)K)))))(K(S(KS)K))
S(K(S(KS)))(S(KK))
S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)K)))))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)K)))(K(S(S(KS)(S(S(KS)K)(K(S(SKK)(SKK)))))K)))))(S(KK)K)))))))(S(KK)(S(KK)K))
S(KK)(S(KK))
KK
S(KK)(S(KK)(S(S(KS)K)(S(K(S(SKK)))(S(K(S(SKK)))K))))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))
S(KK)
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KS))))))))(S(KK)(S(KK)(S(KK)K)))
S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(KS)))))(S(KK)(S(KK)K))))))))(K(S(KK)(S(KK)K)))
S(KS)(S(KK)(S(KS)K))
S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(SKK)(SKK)))))))))(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(SKK)))))))(S(K(S(K(S(KK)))))(S(K(S(SKK)))K))))))(S(K(S(KK)))(S(K(S(KK)))(S(K(S(SKK)))K))))))))))(K(K(KK)))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))))))))(S(KK)(S(KK)(S(KK)K)))
K(S(KK))
S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(KS)))))(S(KK)(S(KK)K))))))))(K(S(KK)(S(KK)K))))))))))(K(K(S(KK)(S(KK)K))))
S(KK)(S(K(S(KK)))(S(K(S(KK)))))
K(S(KK)(S(KK)))
S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(KK))))))))))(K(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)K)))(K(S(K(S(SKK)))K)))))
S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KS)))))(K(S(KK)K))))))))(K(K(KK)))
S(K(S(K(S(KK)))))(S(K(S(KK))))
S(K(S(K(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(SKK)))))(S(K(S(KK)))(S(K(S(SKK)))K)))))))))))(S(K(S(K(S(KK)))))(S(K(S(K(S(KK)))))(S(K(S(K(S(KK)))))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K)))))
S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(KK))))))))))(K(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(K(S(SKK)))K))))))(K(S(K(S(KK)))(S(K(S(SKK)))K))))))))))))))(K(K(K(K(KK)))))
S(KK)(S(K(S(KK)))(S(K(S(KK)))(S(K(S(KK)))(SS(SK)))))
K(S(K(S(KK)))(S(K(S(KK)))))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))))))))(S(KK)(S(KK)(S(KK)K))))))))))(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K)))))
S(K(S(KK)))(S(K(S(K(S(KK)))))(S(K(S(K(S(KK)))))(S(K(S(K(S(KK)))))(S(KS)K))))
S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)K)))))))))))(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(S(KS)(S(KK)(S(KS)K)))))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)K)))(K(S(K(S(SKK)))K)))))))))))(K(K(S(KK)(S(KK)K))))))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))))))))(S(KK)(S(KK)(S(KK)K))))))))))(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))
K(K(K(K(K(S(KK)(S(KK)(S(S(KS)(SSK))(K(SKK)))))))))
S(KK)(S(K(S(KK)))(S(K(S(KK)))(S(K(S(KK)))(S(K(S(KK)))(S(KK))))))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))))))))(S(KK)(S(KK)(S(KK)K))))))))))(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K)))))))
S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(K(S(SKK)))K))))(KK))))))(S(KK)(S(KK)K))))))))(K(K(S(KK)K))))))))))(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))(K(K(K(S(KK)(S(KK)K))))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))))))(K(K(K(K(S(KK)(S(KK)(S(KK)K))))))))))))))))))(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K))))))))
S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(K(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(K(S(K(S(K(S(KS)))))))))(S(K(S(K(S(K(S(K(S(K(S(KS)))))))))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(K(S(SKK)))K))))(KK))))))))))))(K(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(KK)))))))(S(S(KS)(S(KK)S))(KK))))))))))))))(K(K(K(K(S(KK)(S(KK)K))))))))))))))))(K(K(K(K(K(S(KK)(S(KK)K))))))))))))))))))(K(K(K(K(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))))))))))))(K(K(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)(S(KK)K)))))))))
K(S(K(S(KK)))(S(K(S(K(S(KK)))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(KK))))))))))
S(KK)(S(K(S(KK)))(S(K(S(K(S(KK)))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(K(S(KK)))))))))))(S(K(S(K(S(K(S(K(S(K(S(SKK)))))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(SKK)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(SKK)))))))(S(K(S(K(S(KK)))))(S(K(S(K(S(SKK)))))(S(K(S(KK)))(S(K(S(SKK)))K))))))))))))))
S(K(S(K(S(K(S(KK)))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(K(S(K(S(K(S(KK)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(K(S(KS)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(K(S(SKK)))K))))(S(KK)K))))))(S(KK)(S(KK)K))))))))(S(KK)(S(KK)(S(KK)K))))))))))(S(KK)(S(KK)(S(KK)(S(KK)K))))))))))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.