संयुक् त संघात!


12

परिचय: संयुक्त तर्क

Combinatory तर्क (सीएल) बातें बुलाया पर ही आधारित होता combinators , जो मूल रूप से कार्य हैं। दो बुनियादी "अंतर्निहित" कॉम्बिनेटर हैं, Sऔर K, जिन्हें बाद में समझाया जाएगा।

वाम संबद्धता

सीएल वाम-साहचर्य है , जिसका अर्थ है कि कोष्ठक (सामान युक्त), जो दूर के कोष्ठक के कोष्ठक के जोड़े से युक्त हैं, जिसे हटाया जा सकता है, इसके सामान के साथ। उदाहरण के लिए, कुछ इस तरह:

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

सीएल में दो "अंतर्निहित" कॉम्बिनेटर हैं, Sऔर K, जो ऑब्जेक्ट्स को स्विच कर सकते हैं (एकल कॉम्बीनेटर, या कॉम्बिनेटरों के समूह / कोष्ठक के चारों ओर लिपटे) जैसे चारों ओर:

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]

उपरोक्त सामान्य सीएल बयानों के उदाहरण हैं, जहां बयान का मूल्यांकन आगे नहीं किया जा सकता है और समय की एक सीमित मात्रा में अंतिम परिणाम प्राप्त करता है। गैर-सामान्य कथन हैं (जो सीएल बयान हैं जो समाप्त नहीं होते हैं और हमेशा के लिए मूल्यांकन किए जाते रहेंगे), लेकिन वे चुनौती के दायरे में नहीं हैं और उन्हें कवर करने की आवश्यकता नहीं होगी।

यदि आप सीएल के बारे में अधिक जानना चाहते हैं, तो इस विकिपीडिया पृष्ठ को पढ़ें ।

कार्य:

आपका काम अतिरिक्त कॉम्बिनेटर बनाना है, जो तर्कों की संख्या को देखते हुए, और इसे इनपुट के रूप में मूल्यांकन करता है, जो इस प्रकार है:

{amount_of_args} = {evaluated}

जहां {amount_of_args}एक धनात्मक पूर्णांक आर्ग की संख्या के बराबर होता है, और {evaluated}इसमें शामिल होते हैं:

  • तर्क की राशि तक 1तर्क, पहला तर्क 2होने के साथ, दूसरा, वगैरह।
    • आपको इस बात की गारंटी है कि आर्ग की मात्रा के ऊपर तर्क संख्या (इसलिए 4जब {amount_of_args}केवल होती है 3) दिखाई नहीं देगी {evaluated}
  • कोष्ठक ()

इनपुट्स के उदाहरण इस प्रकार हैं:

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

पहला इनपुट एक कॉम्बिनेटर (कहना R) के लिए तीन तर्कों ( R 1 2 3) के साथ पूछ रहा है , जो तब मूल्यांकन करता है:

R 1 2 3 -> 2 3 1

दूसरा इनपुट इसके लिए (एक संयोजन नाम के साथ A) पूछता है :

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

इस प्रारूप में इनपुट को देखते हुए, आपको एक स्ट्रिंग वापस करना होगा S, Kऔर (), जब एक संयोजन नाम के साथ प्रतिस्थापित किया जाता है और तर्कों के साथ चलाया जाता है, उसी मूल्यांकन किए गए विवरण को {evaluated}ब्लॉक के रूप में लौटाता है जब कमांड ब्लॉक को उस संयोजन नाम से प्रतिस्थापित किया जाता है।

आउटपुट कॉम्बिनेटर स्टेटमेंट में उसके व्हाट्सएप को हटा दिया जा सकता है और बाहरी ब्रैकेट्स को हटा दिया (S K K (S S))जा सकता है, इसलिए कुछ को चालू किया जा सकता है SKK(SS)

यदि आप अपने कार्यक्रम के आउटपुट का परीक्षण करना चाहते हैं, तो @aditsu एक combinatory तर्क पार्सर बना दिया है (जो भी शामिल है S, K, Iऔर यहां तक कि अन्य लोगों की तरह Bऔर C) यहाँ

स्कोर:

चूंकि यह एक , इस चुनौती का उद्देश्य इन 50 परीक्षण-मामलों को देखते हुए, आउटपुट में सबसे कम मात्रा में बाइट प्राप्त करना है । कृपया उत्तर में 50 परीक्षण-मामलों के लिए अपने परिणाम डालें, या एक पास्टबिन (या कुछ इसी तरह) बनाएं और उस पास्टबिन का लिंक पोस्ट करें।

एक टाई की स्थिति में, सबसे पहले समाधान जीतता है।

नियम:

  • आपके उत्तर को आवश्यक आउटपुट वापस करना चाहिए - इसलिए एक इनपुट दिया गया है, इसे कार्य में परिभाषा के अनुसार सही आउटपुट वापस करना होगा।
  • आपके उत्तर को प्रत्येक परीक्षण मामले के लिए एक आधुनिक लैपटॉप पर एक घंटे के भीतर आउटपुट करना होगा।
  • समाधानों का कोई भी हार्ड-कोडिंग अस्वीकृत है। हालांकि, आपको 10 कॉम्बिनेटर तक हार्ड-कोड की अनुमति है।
  • आपके प्रोग्राम को एक ही इनपुट के लिए हर बार एक ही समाधान वापस करना होगा।
  • आपके प्रोग्राम को दिए गए किसी भी इनपुट के लिए एक वैध परिणाम लौटना चाहिए, न कि केवल टेस्ट-केस।

आप यह कैसे सुनिश्चित कर सकते हैं कि लोग अन्य उत्तरों में पाए गए कॉम्बिनेटरों की चोरी नहीं करेंगे?
घातक

@ निर्धारित करें कि बहुत ज्यादा मायने नहीं रखना चाहिए, क्योंकि लोग दूसरे लोगों के उत्तरों से प्रेरणा ले सकते हैं और बेहतर उत्तर बनाने के लिए उस पर निर्माण कर सकते हैं।
cl:३४ में

प्रेरणा की बात करते हुए, मैं देखता हूं कि जब वांछित परिणाम में ए नहीं होता है 1, तो आप 1सब कुछ से घटा सकते हैं, और फिर उस उत्तर के लिए समाधान लपेट सकते हैं K()। उदाहरण: के लिए समाधान 2 -> 1है K, इसलिए के लिए समाधान 3 -> 2है KK, के लिए समाधान 4 -> 3है K(KK)आदि
नील

जवाबों:


8

हास्केल , स्कोर 5017

यह अमूर्त उन्मूलन ((λ xX ) = I; (λ xY ) = K y ; (λ xM N ) = S (λ xM ) (λ xN ) के लिए संभवतम एल्गोरिथ्म को जोड़ता है । ) हर आवेदन के बाद इस्तेमाल किया एक peephole अनुकूलक के साथ। सबसे महत्वपूर्ण अनुकूलन नियम S (K x ) (K y ) x K ( xy ) है, जो एल्गोरिथ्म को हमेशा तेजी से उड़ने से रोकता है।

नियमों के सेट को स्ट्रिंग जोड़े की एक सूची के रूप में कॉन्फ़िगर किया गया है ताकि नए नियमों के साथ खेलना आसान हो। इस उद्देश्य के लिए इनपुट पार्सर के पुन: उपयोग के विशेष बोनस के रूप में, एस, के, और मुझे इनपुट कॉम्बिनेटर के भीतर भी स्वीकार किया जाता है।

नियम बिना शर्त लागू नहीं किए जाते हैं; इसके बजाय, पुराने और नए दोनों संस्करणों को रखा जाता है, और उप-अपनाने वाले संस्करणों को केवल तभी छंटा जाता है जब उनकी लंबाई कुछ स्थिर (वर्तमान में 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. एस (एस) कश्मीर
  2. एस (कश्मीर (एस एस (केके))) (एस (केके) एस)
  3. एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)
  4. एस (कश्मीर (एस एस (केके))) (एस (केके) (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))
  5. एस (कश्मीर (एस (कश्मीर (एस एस (एस))))) (एस (कश्मीर (एस एस (एस))) (एस (SKK) (SKK)))
  6. के.के.
  7. एस (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर)
  8. एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (SKK) (SKK)))))) (एस (एसएसके (एस)) (एस (एस (एस) (एस (केके) (एस (एस) कश्मीर))) (कश्मीर (एस (कश्मीर (एस (एसएसके))) कश्मीर))))
  9. एस (कश्मीर (एस (केके))) (एस (कश्मीर (एस (एस (SKK) (SKK)))) कश्मीर)
  10. एसके
  11. एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))
  12. एस (कश्मीर (एस एस (कश्मीर (एस (केके) कश्मीर)))) (एस (केके) (एस (एस) (एस (एसएसके (एस)) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर) ))))
  13. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (केके))) (एस (केके) एस))))) (एस (कश्मीर (एस एस (केके))) (एस (केके) (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर))))
  14. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (केके))) (एस (केके) एस))))) (एस (कश्मीर (एस (SKK))) कश्मीर)
  15. एस (कश्मीर (एस (कश्मीर (एस (एस) कश्मीर)))) (एस (एस) कश्मीर)
  16. एस (कश्मीर (एस (एस) कश्मीर))
  17. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (एस (एस) (एस (केके) (एसएसके))) (कश्मीर (एस (SKK) (SKK))))))) (एस (केके) (एस (एस) कश्मीर)))))) (एस (कश्मीर (एस एस (कश्मीर (एसएसके)))) (एस (केके) (एस (एस) (एस (केके) (एसएसके)))) )
  18. एसएसएस (केके)
  19. के.के.
  20. एस (केके) (एस (केके) (एस (एस (एस) के) (एस (कश्मीर (एस (SKK))) (एस (कश्मीर (एस (SKK))) कश्मीर))))
  21. एस (एस (एस) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))) (कश्मीर (एस (कश्मीर (एस ( एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर)))
  22. एस (केके)
  23. एस (एस) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))
  24. एस (कश्मीर (एस (कश्मीर (एस (एस) कश्मीर)))) (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))) ))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))
  25. एस (एस) (एस (केके) (एस (एस) कश्मीर))
  26. एस (एस (एस) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस एस (केके))))) (एस (एस) (एस (केके) (एस (एसएसके (एस)) (एस (एस) (एस (SKK) (SKK))))))))))) (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (कश्मीर (एस (एस ) (एस (कश्मीर (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))))))) (एस (कश्मीर (एस (SKK))) कश्मीर))) (एस (कश्मीर ( एस (कश्मीर (एस (केके) कश्मीर)))) (एस (कश्मीर (एस (SKK))) कश्मीर))))
  27. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर)) ))) (एस (केके) (एस (एस) कश्मीर)))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस ( केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))
  28. कश्मीर (एस (केके))
  29. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (एस) कश्मीर)))) (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) ( एस (केके) कश्मीर)))))) कश्मीर))))) (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))) ))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))
  30. एस (केके) (एस (कश्मीर (एसएसएस (केके))))
  31. कश्मीर (एसएसएस (केके))
  32. एस (कश्मीर (एस एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (एस) कश्मीर))) (कश्मीर (एस (कश्मीर (एस (SKK))) कश्मीर)))))) (एस (केके) (एस (एस) (एस एस (एस (एस (एस) (एस (केके) (एस (एस) (एस (कश्मीर (एस (एस) (एस (केके) (एस (एस) कश्मीर))) )))))) (केके))))
  33. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (केके))) (एस (केके) एस))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) कश्मीर) ))) (एस (केके) (एसएसएस (एस))))
  34. एस (कश्मीर (एस (कश्मीर (एस (केके) कश्मीर))))
  35. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))) )))))) (एस (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर))
  36. एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) (एस (एस) (एस एस (एस (एस (एस) (एस (केके) (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर))))) (KK)))))))) (एस (केके) (एस (एस) (एस ( केके) (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (केके))) (एस (केके) एस))))))))) (एस (कश्मीर (एस एस (केके))) (एस (केके) (एस (एस) (एस (कश्मीर (एस (एस) (एस (केके) (एस (एस) कश्मीर))))))))))))
  37. एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (केके) कश्मीर))))) (एस एस (एस)))
  38. कश्मीर (एस (कश्मीर (एसएसएस (केके))))
  39. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK ))) कश्मीर)))) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर)))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस )) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस ( केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)) ))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))
  40. एस (कश्मीर (एस (केके))) (एस (एस) (एस (केके) (एस (कश्मीर (एस (केके) (एस (केके) कश्मीर))))))
  41. एस (कश्मीर (एस एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (एस) कश्मीर))) (कश्मीर (एस (कश्मीर (एस (SKK))) कश्मीर)))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर)))))) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (कश्मीर (एस एस)) कश्मीर))))) (एस (केके) (एस ( कश्मीर (एस एस)) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (एस) कश्मीर))))) (एस (एस) कश्मीर))))))))))
  42. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर)))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस ( कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))
  43. कश्मीर (K (K (K (K (एस (केके) (एस (केके) (एस (कश्मीर (एस एस (एस))) (एसएसके))))))))
  44. एस (केके) (एस (कश्मीर (एस (केके) (एस (केके) (एस (केके) (एस (केके) कश्मीर))))))
  45. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस ( कश्मीर (एस (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर)))) )) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस ( कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (K (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर ( एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))
  46. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस (केके))) (एस (केके) (एस ( एस) (एस (कश्मीर (एस (SKK))) कश्मीर))))))) (एस (केके) (एस (एस) (एस (केके) (एस (एसएसके (एस)) (एस (कश्मीर (एस एस )) (एस (केके) कश्मीर)))))))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (एस ) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (एस) कश्मीर))))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) कश्मीर)))) (एस (केके) एस)))))))))))) (एस (केके) (एस (कश्मीर (एस एस)) कश्मीर)) )))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))))) (एस (केके) एस)))))) (एस (K (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))) (एस (केके) (एस (कश्मीर ( एस एस)) (एस (केके) कश्मीर))))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (एस) (एस (केके) ( एस (एस) कश्मीर)))))) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))))))
  47. एस (कश्मीर (एस एस (कश्मीर (एस एस (एस (एस (एस) (एस (केके) एस))) (KK))))) (एस (केके) (एस (एस) (एस (कश्मीर (एस (कश्मीर (एस (एस) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस ( केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))) (एस (केके) (एस (एस) कश्मीर)))))))))))))) (एस (कश्मीर (एस (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस ( केके) (एस (कश्मीर (एस (कश्मीर (एस (एस) कश्मीर)))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस ( केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))))))))))) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) (एस (एस) कश्मीर))))) (एस (केके) (एस (कश्मीर (एस एस)) कश्मीर))))))))) (एस (एस) (एस (केके) (एस (कश्मीर (एस एस (कश्मीर (एस (केके) कश्मीर)))) (एस (केके) (एस ( एस) (एस (एसएसके (एस)) (एस (कश्मीर (एस एस (केके))) (एस (केके) (एस (एस) (एस (कश्मीर (एस (SKK))) कश्मीर))))))) )))))))))
  48. कश्मीर (एस (कश्मीर (एस (केके) (एस (कश्मीर (एस (केके) (एस (कश्मीर (एस (केके) (एस (केके) कश्मीर))))))))))
  49. एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (कश्मीर (एस ( कश्मीर (एस (केके) (एस (कश्मीर (एस (केके))) (एस (कश्मीर (एस (SKK))) कश्मीर)))))) (एस (कश्मीर (एस (SKK))) कश्मीर))) ))) (एस (कश्मीर (एस (SKK))) कश्मीर)))))) (एस (कश्मीर (एस (SKK))) कश्मीर)))))) (एस (कश्मीर (एस (SKK))) क))
  50. एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (कश्मीर (एस (केके))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस (एस (एस) (एस (कश्मीर ( एस (SKK))) कश्मीर)))) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) कश्मीर))))))) (एस (कश्मीर (एस एस (कश्मीर (एस (कश्मीर (एस एस) ) (एस (केके) कश्मीर))))) (एस (केके) (एस (एस) (एस (केके) (एस (कश्मीर (एस (कश्मीर (एस (केके) (एस (केके) (एस (केके) (एस (केके) कश्मीर))))))) (एस (कश्मीर (एस एस)) (एस (केके) कश्मीर)))))))

क्या अभिव्यक्तियों को ऑटो-ऑप्टिमाइज़ (उदाहरण S (K x) (K y) = K (x y)) करना संभव होगा ?
कैलक्यूलेटरफैनलाइन

@CalculatorFeline मैं आपके सवाल को नहीं समझता; एस (कश्मीर एक्स ) (कश्मीर y ) है स्वचालित रूप से कश्मीर (करने के लिए अनुकूलित xy )।
एंडर्स कासोर्ग

रुको, क्या इन अभिव्यक्तियों को आंशिक रूप से लागू किए गए कार्यों या कुछ और के रूप में दर्शाया गया है? यदि आंशिक रूप से लागू किए गए कार्य, तो शायद आप मेरी पिछली टिप्पणी जैसा कुछ कर सकते हैं।
कैलक्यूलेटरफ्लेन

@CalculatorFeline प्रतिनिधित्व इस तरह दिखता है, उदाहरण के लिए, 3 = 1 (2 3) = 2 = S (K1) (S (K2) I) = 2 = S (K1) 2 = 1 = S (S (KS)) (S) (KK) (K1))) I S 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) K S (KS) K। जैसा कि आप देख सकते हैं, हमने पहले ही नियम एस (K x ) (K y ) see K ( xy ) का उपयोग कई बार किया है, साथ ही साथ जिन अन्य को मैंने सूचीबद्ध किया है ruleStrings। यदि हमने नहीं किया, तो उत्पादन तेजी से लंबा होगा: इस छोटे उदाहरण के लिए, हमें S (S (KS) (S (S (KS) (S (KK)) (S) (S) (S) (एस) (एस (केके) (KK))) (एस (केके) (SKK))))) (एस (एस (एस) (एस (एस (एस) (एस (केके) (एस))) ( S (केएस) (S) (SK) (SK) (KK)) (SK)) (S (KK))) S (KS)
एंडर्स कासोर्ग

5

समाधान लंबाई का योग: 12945 8508 5872

Haskell कोड जो स्टड से इनपुट लाइनें लेता है और अगर विभाजक है =या नहीं तो परवाह नहीं करता है ->:

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 से बेहतर ब्रैकेट अमूर्त को लागू करता है: बाइनरी लैम्ब्डा कैलकुलस और कॉम्बिनेटर लॉजिक जो कॉम्बिनेटर लॉजिक पर विकिपीडिया लेख से जुड़ा हुआ है। सबसे उपयोगी विशेष मामले केवल Sचर का उपयोग करते हैं ताकि चर के गहरे घोंसले से बचने के लिए आसपास के सबटम्स को दबाया जा सके। वह मामला जो कुछ उपसमूह की समानता की जांच करता है, किसी भी परीक्षण के मामलों की आवश्यकता नहीं है। जबकि Wकॉम्बीनेटर को संभालने के लिए कोई विशेष मामला नहीं है (पीटर का उत्तर देखें), नियम छोटी 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 में एस, के, आई, डब्ल्यू का उपयोग किया गया

व्याख्या

(18 अध्याय में वर्णित जैसे ही मानक एल्गोरिथ्म के लिए मॉक एक Mockingbird ) चार मामलों का उपयोग करता है, combinators करने के लिए इसी S, K, I = SKK, और सरल बाएं संघ। मुझे लगता है कि यह ईसाई का जवाब है। यह पर्याप्त है, लेकिन जरूरी नहीं कि इष्टतम हो, और जब से हमें 10 कॉम्बीनेटर तक हार्ड-कोड की अनुमति है, यह 7 विकल्प छोड़ देता है।

अन्य प्रसिद्ध कॉम्बीनेटरियल कॉम्बिनेटर हैं

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

जो, एक साथ K, एक पूर्ण आधार बनाते हैं । एसके में ये हैं

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))))))))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.