ปริศนารวมกัน!


12

บทนำ: Combinatory Logic

Combinatory logic (CL) นั้นมีพื้นฐานมาจากสิ่งที่เรียกว่าcombinatorsซึ่งโดยทั่วไปแล้วจะทำหน้าที่ มีสองขั้นพื้นฐาน "ในตัว" combinators มีSและKซึ่งจะอธิบายในภายหลัง

ซ้าย associativity

CL คือการเชื่อมโยงด้านซ้ายซึ่งหมายถึงวงเล็บ (ที่มีเนื้อหา) ซึ่งอยู่ที่ด้านซ้ายสุดของวงเล็บคู่อับละอองเกสรที่มีมันสามารถเอาออกได้ ตัวอย่างเช่นสิ่งนี้:

((a b) c)

สามารถลดลงไปได้

(a b c)

ตำแหน่ง(a b)ที่อยู่ทางซ้ายสุดของเครื่องหมายวงเล็บใหญ่กว่า((a b) c)ดังนั้นจึงสามารถลบออกได้

ตัวอย่างที่ใหญ่กว่าของความสัมพันธ์ด้านซ้าย (วงเล็บเหลี่ยมคือคำอธิบาย):

  ((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)]

วงเล็บยังสามารถลดลงได้เมื่อมีมากกว่าหนึ่งคู่พันล้อมรอบวัตถุเดียวกัน ตัวอย่าง:

((((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.]

builtins

CL มีสอง "ตัวใน" combinators SและKซึ่งสามารถสลับวัตถุ (combinators เดียวหรือกลุ่ม combinators / กลุ่มล้อมรอบวงเล็บ) รอบดังนี้:

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

ที่ไหนx, yและzสามารถสแตนด์อินเพื่ออะไร

ตัวอย่างของSและKมีดังนี้:

  (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]

ตัวอย่างอื่น:

  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]

ด้านบนเป็นตัวอย่างของข้อความสั่ง CL ปกติซึ่งไม่สามารถประเมินข้อความเพิ่มเติมได้และบรรลุผลลัพธ์ที่ได้ในเวลาที่ จำกัด มีคำสั่งที่ไม่ธรรมดา (ซึ่งเป็นคำสั่ง CL ที่ไม่ยุติและจะถูกประเมินตลอดไป) แต่มันไม่ได้อยู่ในขอบเขตของความท้าทายและไม่จำเป็นต้องครอบคลุม

หากคุณต้องการที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ CL อ่านหน้านี้วิกิพีเดีย

งาน:

งานของคุณคือสร้างผู้รวมพิเศษกำหนดจำนวนอาร์กิวเมนต์และสิ่งที่ประเมินว่าเป็นอินพุตซึ่งให้ดังนี้:

{amount_of_args} = {evaluated}

ที่{amount_of_args}เป็นจำนวนเต็มบวกเท่ากับจำนวนของ args และ{evaluated}ประกอบด้วย:

  • อาร์กิวเมนต์ขึ้นกับจำนวนของ args โดย1เป็นอาร์กิวเมนต์แรก2เป็นที่สองและอื่น ๆ
    • คุณจะรับประกันว่าตัวเลขอาร์กิวเมนต์สูงกว่าจำนวนเงินของ args นี้ (ดังนั้น4เมื่อ{amount_of_args}เป็นเพียง3) {evaluated}จะไม่ปรากฏใน
  • วงเล็บ ()

ดังนั้นตัวอย่างของอินพุตคือ:

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

อินพุตแรกกำลังร้องขอ combinator (พูด, R) โดยมีอาร์กิวเมนต์สามตัว ( R 1 2 3) ซึ่งประเมินเป็น:

R 1 2 3 -> 2 3 1

อินพุตที่สองจะถามถึงสิ่งนี้ (ด้วยชื่อ combinator A):

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

ได้รับการป้อนข้อมูลในรูปแบบนี้คุณจะต้องกลับสตริงของS, Kและ()ซึ่งเมื่อแทนที่ด้วยชื่อ Combinator และทำงานกับการขัดแย้งผลตอบแทนงบการประเมินเช่นเดียวกับ{evaluated}บล็อกเมื่อบล็อกคำสั่งจะถูกแทนที่กลับสำหรับชื่อ Combinator ว่า

คำสั่ง Combinator การส่งออกอาจจะมีช่องว่างของมันเอาออกไปและวงเล็บด้านนอกออกแล้วดังนั้นสิ่งที่ต้องการจะกลายเป็น(S K K (S S))SKK(SS)

หากคุณต้องการที่จะทดสอบผลของโปรแกรม, @aditsu ได้ทำ parser combinatory ตรรกศาสตร์ (ซึ่งรวมถึงS, K, Iและแม้กระทั่งคนอื่น ๆ เช่นBและC) ที่นี่

คะแนน:

เนื่องจากนี่คือจุดมุ่งหมายของความท้าทายนี้คือเพื่อให้ได้จำนวนไบต์ที่น้อยที่สุดในผลลัพธ์ที่ได้จากกรณีทดสอบ 50รายการ โปรดใส่ผลลัพธ์ของคุณสำหรับ 50 กรณีทดสอบในคำตอบหรือทำ pastebin (หรือบางอย่างที่คล้ายกัน) และโพสต์ลิงก์ไปที่ pastebin นั้น

ในกรณีที่เสมอกันการแก้ปัญหาที่เร็วที่สุดจะชนะ

กฎ:

  • คำตอบของคุณจะต้องส่งคืนผลลัพธ์ที่ถูกต้อง - เพื่อให้ได้รับมันจะต้องส่งกลับผลลัพธ์ที่ถูกต้องตามคำนิยามในงาน
  • คำตอบของคุณจะต้องส่งออกภายในหนึ่งชั่วโมงบนแล็ปท็อปที่ทันสมัยสำหรับแต่ละกรณีทดสอบ
  • การเข้ารหัสแบบหนักของโซลูชันไม่ได้รับอนุญาต อย่างไรก็ตามคุณได้รับอนุญาตให้เขียนโค้ด combinators ได้สูงสุด 10 ตัว
  • โปรแกรมของคุณต้องส่งคืนโซลูชันเดียวกันทุกครั้งสำหรับอินพุตเดียวกัน
  • โปรแกรมของคุณจะต้องส่งคืนผลลัพธ์ที่ถูกต้องสำหรับอินพุตที่กำหนดไม่ใช่แค่กรณีทดสอบ

คุณจะมั่นใจได้อย่างไรว่าคนอื่นจะไม่ขโมยคอมมิเนเตอร์ที่พบในคำตอบอื่น ๆ
ทำให้เสียชีวิต

@ ทำให้สำเร็จนั่นไม่ควรสำคัญเกินไปเพราะผู้คนสามารถรับแรงบันดาลใจจากคำตอบของคนอื่นและสร้างมันขึ้นมาเพื่อสร้างคำตอบที่ดีกว่า
clismique

เมื่อพูดถึงแรงบันดาลใจฉันสังเกตเห็นว่าเมื่อผลลัพธ์ที่ต้องการไม่มีตัว1คุณสามารถลบออก1จากทุกอย่างแล้วห่อคำตอบสำหรับคำตอบK()นั้น ตัวอย่าง: โซลูชั่นสำหรับการ2 -> 1เป็นKดังนั้นวิธีแก้ปัญหาสำหรับ3 -> 2เป็นKKวิธีการแก้ปัญหาสำหรับ4 -> 3เป็นK(KK)ฯลฯ
นีล

คำตอบ:


8

Haskellคะแนน 5017

สิ่งนี้รวมถึงอัลกอริธึมที่เป็นไปได้ที่โง่ที่สุดสำหรับการกำจัดสิ่งที่เป็นนามธรรม ((λ x . x ) = I; (λ x . y ) = K y ; (λ x . M N ) = S (λ x . M ) (λ x . N ) ) ด้วยเครื่องมือเพิ่มตาแมวที่ใช้หลังจากทุกแอปพลิเคชัน กฎการปรับให้เหมาะสมที่สำคัญที่สุดคือ S (K x ) (K y ) ↦ K ( xy ) ซึ่งจะหยุดอัลกอริธึมจากการระเบิดแบบทวีคูณเสมอ

ชุดของกฎถูกกำหนดค่าเป็นรายการของคู่สตริงดังนั้นจึงง่ายต่อการเล่นกับกฎใหม่ ในฐานะโบนัสพิเศษของการนำตัวแยกวิเคราะห์อินพุตกลับมาใช้ใหม่เพื่อจุดประสงค์นี้ S, K และฉันยังได้รับการยอมรับภายในตัวรวมอินพุต

กฎจะไม่ถูกใช้อย่างไม่มีเงื่อนไข ค่อนข้างทั้งรุ่นเก่าและใหม่จะถูกเก็บไว้และรุ่นย่อยจะถูกตัดเมื่อความยาวเกินกว่ารุ่นที่ดีที่สุดมากกว่าค่าคงที่ (ปัจจุบัน 3 ไบต์)

คะแนนจะได้รับการปรับปรุงเล็กน้อยโดยการปฏิบัติต่อฉันในฐานะผู้ประสานพื้นฐานจนกว่าเวทีเอาท์พุทจะเขียนลงใน SKK อีกครั้ง ด้วยวิธีนี้ KI = K (SKK) สามารถย่อให้สั้นลง 4 ไบต์ไปยัง SK บนเอาต์พุตโดยไม่ทำให้การเพิ่มประสิทธิภาพส่วนที่เหลือสับสน

{-# 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

ลองออนไลน์!

เอาท์พุต

  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))) K)))
  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 (เอสเอส (K (S (KK) (S (SKK) (SKK)))))) (S (SSK (KS)) (S (S (KS) (S (KK) (S (KS) K))) (K (S (K (S (SSK))) K))))
  9. S (K (S (KK))) (S (K (S (S (SKK) (SKK)))) K)
  10. SK
  11. S (KS) (S (KK) (S (K (SS)) (S (KK) K)))
  12. S (K (เอสเอส (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 (เอสเอส (K (S (S (KS) (S (KK) (SSK))) (K (S (SKK) (SKK))))))) (S (KK) (S (KS) K)))))) (S (K (เอสเอส (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 (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 (KK))))) (S (KS) (S (KK) (S (SSK (KS)) (S (KS) (S (SKK) (SKK))))))))))) (K (S (S (KS) (S (K (S (K (S (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 (เอสเอส (K (S (K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K)) ))) (S (KK) (S (KS) K)))))) (S (K (เอสเอส (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 (เอสเอส (K (S (S (KS) (S (KK) (S (KS) K))) (K (S (K (S (SKK))) K)))))) (S (KK) (S (KS) (เอสเอส (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 (เอสเอส (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 (เอสเอส (K (S (K (S (SKK))) K)))) (S (KK) (S (KS) (S (KK) (S (K (เอสเอส (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 (เอสเอส (K (S (K (เอสเอส (K (S (K (S (SKK))) K)))) (S (KK) (S (KS) (เอสเอส (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 (เอสเอส (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))))) (เอสเอส (SK)))
  38. K (S (K (SSS (KK))))
  39. S (K (S (K (S (K (S (K (S (K (S (K (S (K (เอสเอส (K (S (K (S (S (KS) (S (K (S (SKK ))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (เอสเอส (K (S (K (เอสเอส )) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S (K (SS)) (S ( KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (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 (เอสเอส (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 (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (เอสเอส (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 (เอสเอส (K (S (K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))))) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S ( K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (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 (เอสเอส (K (S ( K (S (S (KS) (S (K (S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K)))) )) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S ( K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S (K ( เอสเอส)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (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 (เอสเอส (K (S (K (เอสเอส (K (S (K (SS (KK))) (S (KK) (S ( KS) (S (K (S (SKK))) K))))))) (S (KK) (S (KS) (S (KK) (S (SSK (KS)) (S (K (เอสเอส )) (S (KK) K)))))))))) (S (KK) (S (KS) (S (KK) (S (K (เอสเอส (K (S (KK) (S (KS ) (S (KK) (S (K (เอสเอส (K (S (KK) (S (KS) K))))) (S (KK) (S (K (SS)) (S (KK) (S (K (เอสเอส (K (S (KK) K)))) (S (KK) S)))))))))))) (S (KK) (S (K (SS)) K)) )))))))) (S (K (เอสเอส (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 (เอสเอส (K (S (K (S (S (KS) (S (KK) (S (K (SS)) (S (KK) K)))))) (S (KK) (S (K ( เอสเอส)) (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 (เอสเอส (K (เอสเอส (S (S (KS) (S (KK) S))) (KK))))) (S (KK) (S (KS) (S (K (S (K (S (KS) (S (KK) (S (KS) (S (KK) (S (K (S (K (S (K (เอสเอส (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) K)))))))))))))) (S (K (S (S (KS) (S (KK) (S (K (SS)) (S ( KK) (S (K (S (K (S (KS) K)))) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S ( KK) (S (KS) (S (KK) (S (K (SS)) (S (KK) K))))))))))))) (S (KK) (S (K (S (K (S (KK) (S (KS) (S (KK) (S (K (เอสเอส (K (S (KK) (S (KS) K))))) (S (KK) (S (K (เอสเอส)) K))))))))) (S (KS) (S (KK) (S (K (เอสเอส (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 ( 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 (เอสเอส (K (S (K (S (S (KS) (S (K ( S (SKK))) K)))) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (K (S (K (SS)) (S (KK) K))))) (S (KK) (S (KS) K))))))) (S (K (เอสเอส (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)))))))

เป็นไปได้ไหมที่จะทำให้การเพิ่มประสิทธิภาพนิพจน์อัตโนมัติ (เช่นS (K x) (K y) = K (x y))
CalculatorFeline

@CalculatorFeline ฉันไม่เข้าใจคำถามของคุณ S (K x ) (K y ) ได้รับการปรับให้เหมาะสมกับ K ( xy ) โดยอัตโนมัติ
Anders Kaseorg

เดี๋ยวก่อนนิพจน์เหล่านี้แสดงว่าเป็นฟังก์ชันที่นำไปใช้บางส่วนหรืออย่างอื่นหรือไม่ หากฟังก์ชั่นการใช้งานบางส่วนแล้วคุณอาจทำอะไรบางอย่างเช่นความคิดเห็นล่าสุดของฉัน
CalculatorFeline

@CalculatorFeline การแสดงจะมีลักษณะเช่น 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 (K1) ))) I ↦ 1 = S (K1) ↦ S (KS) (S (KK) I) ↦ S (KS) K ในขณะที่คุณสามารถดูเรามีใช้อยู่แล้วกฎ S (K x ) (K Y ) ↦ K ( XY ) ruleStringsหลายครั้งพร้อมกับคนอื่นที่ผมระบุไว้ใน หากเราไม่ทำเช่นนั้นผลลัพธ์จะยาวขึ้นแทน: สำหรับตัวอย่างเล็ก ๆ นี้เราจะได้ S (S (KS) (S (S (KS) (S) (S) KK) (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))) แทน S (KS) K
Anders Kaseorg

5

ผลรวมของความยาวของโซลูชัน: 12945 8508 5872

รหัส Haskell ที่รับสายอินพุตจาก stdin และไม่สนใจว่าตัวคั่นเป็น=หรือ->:

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

ใช้การปรับปรุงวงเล็บนามธรรมที่ปรับปรุงจากส่วน 3.2 ของ John Tromp: Binary แลมบ์ดาแลมบ์ดาและตรรกะการรวมซึ่งเชื่อมโยงกับจากบทความ Wikipedia เกี่ยวกับตรรกะการรวมกัน กรณีพิเศษที่มีประโยชน์ที่สุดใช้Scombinator เพื่อยอมให้มีเทอร์มินอลรอบ ๆ เท่านั้นเพื่อหลีกเลี่ยงการซ้อนตัวแปรที่ลึก กรณีที่ตรวจสอบความเท่าเทียมกันของข้อกำหนดบางอย่างไม่จำเป็นสำหรับกรณีทดสอบใด ๆ ในขณะที่ไม่มีกรณีพิเศษสำหรับการจัดการWcombinator (ดูคำตอบของปีเตอร์) กฎทำงานร่วมกันเพื่อค้นหาการSS(SK)แสดงออกที่สั้นกว่า (ฉันทำผิดพลาดครั้งแรกโดยพยายามปรับการโทรภายในให้เหมาะสมที่สุดabstractจากนั้นการWเพิ่มประสิทธิภาพนี้จะไม่เกิดขึ้นและผลลัพธ์โดยรวมคือ 16 ไบต์อีกต่อไป)

และนี่คือผลลัพธ์จากกรณีทดสอบ:

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, K, I, W

คำอธิบาย

ขั้นตอนวิธีการมาตรฐาน (เป็นเช่นที่กล่าวไว้ในบทที่ 18 ของการจำลองกระเต็น ) ใช้สี่กรณีที่สอดคล้องกับ combinators S, K, I = SKKและง่ายซ้ายสมาคม ฉันคิดว่านี่คือสิ่งที่คำตอบของคริสเตียนดำเนินการ สิ่งนี้เพียงพอ แต่ไม่จำเป็นต้องดีที่สุดและเนื่องจากเราได้รับอนุญาตให้ใช้รหัสยากถึง 10 เครื่องจึงมี 7 ตัวเลือก

Combinatorial ที่รู้จักกันดีคือ

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

ซึ่งร่วมกับK, ทำให้พื้นฐานที่สมบูรณ์ ใน SK เหล่านี้คือ

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

และSKIกฎระเบียบที่ได้รับมาจากการแสดงออกทางเดียวกันนั้นสำหรับBและCแต่สำหรับพวกเขาได้รับมาW S S (K (S K K))ฉันจึงเลือกที่จะใช้Wเป็นกรณีพิเศษ

โปรแกรม (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}/

ชุดทดสอบออนไลน์

สร้างผลลัพธ์:

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))))))))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.