সম্মিলিত ধাঁধা!


12

ভূমিকা: সংযুক্ত যুক্তি

সমন্নয়ের যুক্তিবিজ্ঞান (Cl) জিনিষ নামক বন্ধ ভিত্তি করে combinators , যা মূলত ফাংশন আছে। দুটি বেসিক "অন্তর্নির্মিত" সংযুক্তকারী রয়েছে Sএবং Kযা পরে ব্যাখ্যা করা হবে।

বাম-associativity

সিএল বাম-সহযোগী , যার অর্থ বন্ধনী (স্টাফ সহ) যা এ্যাথার পেয়ারের বামে থাকা বাঁশের বাঁদিকের বাম দিকে রয়েছে এটি স্টাফ ছেড়ে দেওয়ার সাথে সরিয়ে ফেলা যায়। উদাহরণস্বরূপ, এর মতো কিছু:

((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হওয়া, দ্বিতীয় হওয়া, ইত্যাদি সহ আর্গুমেন্টগুলি পরিমাণ পর্যন্ত ।
    • আপনি নিশ্চিত হয় args পরিমাণ উপরে যে যুক্তি সংখ্যা (তাই একটি 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 একটি সমন্নয়ের যুক্তিবিজ্ঞান পার্সার করেছেন (যার মধ্যে S, K, Iএবং এমনকি অন্যান্য বেশী পছন্দ Bএবং C) এখানে

স্কোর:

যেহেতু এটি একটি , তাই এই চ্যালেঞ্জের লক্ষ্য হ'ল এই 50 টি পরীক্ষার ক্ষেত্রে প্রদত্ত সম্ভাব্য আউটপুটে সামান্যতম বাইটগুলি অর্জন করা । উত্তরে 50 টি পরীক্ষার ক্ষেত্রে আপনার ফলাফলগুলি রাখুন, বা একটি পেস্টবিন তৈরি করুন (বা অনুরূপ কিছু) এবং সেই পেস্টবিনে একটি লিঙ্ক পোস্ট করুন।

টাই হওয়ার ক্ষেত্রে, প্রাথমিক সমাধানটি জয়ী হয়।

নিয়মাবলী:

  • আপনার উত্তর অবশ্যই CORRECT আউটপুট ফিরিয়ে আনবে - সুতরাং একটি ইনপুট দেওয়া হলে, এটি অবশ্যই কার্যের সংজ্ঞা অনুসারে সঠিক আউটপুট ফেরত দিতে হবে।
  • আপনার উত্তর অবশ্যই প্রতিটি পরীক্ষার ক্ষেত্রে আধুনিক ল্যাপটপে এক ঘন্টার মধ্যে আউটপুট দেয়।
  • সমাধানগুলির যে কোনও হার্ড-কোডিং অনুমোদিত নয়। তবে, আপনাকে 10 টি সংযুক্তকারী পর্যন্ত হার্ড-কোড করার অনুমতি দেওয়া হয়েছে।
  • আপনার প্রোগ্রামটি একই ইনপুটটির জন্য প্রতিবার একই সমাধানটি ফেরত দিতে হবে।
  • আপনার প্রোগ্রামকে কোনও পরীক্ষার ক্ষেত্রে নয়, প্রদত্ত যে কোনও ইনপুট দেওয়ার জন্য একটি বৈধ ফলাফল দিতে হবে।

আপনি কীভাবে নিশ্চিত করতে পারেন যে লোকেরা অন্য উত্তরে পাওয়া কম্বিনেটর চুরি করবে না?
মারাত্মক করুন

@ ফ্যাটালাইজ করুন এটি খুব বেশি গুরুত্ব পাবে না, কারণ লোকেরা অন্য লোকের উত্তর থেকে অনুপ্রেরণা নিতে পারে এবং আরও ভাল উত্তর তৈরি করতে পারে।
ক্লিমিক

অনুপ্রেরণার কথা বললে, আমি লক্ষ্য করেছি যে যখন পছন্দসই ফলাফলটিতে একটি থাকে না 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 ) ) প্রতিটি অ্যাপ্লিকেশন পরে ব্যবহার করা একটি পেফোল অপ্টিমাইজার সহ। সর্বাধিক গুরুত্বপূর্ণ অপ্টিমাইজেশনের নিয়মটি হ'ল এস (কে এক্স ) (কে ওয়াই ) ↦ কে ( এক্সওয়াই ), যা অ্যালগরিদমকে সর্বদা তাত্পর্যপূর্ণভাবে বাজানো থেকে থামায়।

নিয়মের সেট স্ট্রিং জোড়াগুলির তালিকা হিসাবে কনফিগার করা হয়েছে যাতে নতুন নিয়মগুলির সাথে এটি খেলা সহজ play এই উদ্দেশ্যে ইনপুট পার্সারটিকে পুনরায় ব্যবহার করার বিশেষ বোনাস হিসাবে, এস, কে এবং আমি ইনপুট কম্বিনেটরগুলির মধ্যেও স্বীকৃত।

বিধিগুলি নিঃশর্ত প্রয়োগ করা হয় না; পরিবর্তে, পুরানো এবং নতুন সংস্করণ উভয়ই রাখা হয় এবং সাবপটিমাল সংস্করণগুলি কেবল তখনই ছাঁটাই করা হয় যখন তাদের দৈর্ঘ্যটি কিছু ধ্রুবক (বর্তমানে 3 বাইট) এর চেয়ে বেশি দ্বারা সর্বোত্তম সংস্করণটির চেয়ে বেশি হয়।

আউটপুট পর্যায়টি এসকেকে পুনরায় লিখন না করা পর্যন্ত স্কোরকে মৌলিক সংযুক্তি হিসাবে বিবেচনা করে কিছুটা উন্নতি করা হয়েছে। এইভাবে কেআই = কে (এসকেকে) 4 টি বাইট দ্বারা সংক্ষিপ্ত আকারে এসকেকে আউটপুটটিতে বাকী অপ্টিমাইজেশনগুলি বিভ্রান্ত না করে ছোট করা যেতে পারে।

{-# 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. এস (কে (এস (কে (এস (কে (এস এস (কেকে))) (এস (কেকে) s))))) (এস (কে (এস এস (কেকে))) (এস (কেকে) (এস (কে এস) (এস (কে (এস (SKK))) কে))))
  14. এস (কে (এস (কে (এস (কে (এস এস (কেকে))) (এস (কেকে) s))))) (এস (কে (এস (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. এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কেকে))) (এস (কেকে) s))))))) (এস (কে (এস এস (কে (এস (কেকে) কে) ))) (এস (কেকে) (এসএসএস (কে এস))))
  34. এস (কে (এস (কে (এস (কেকে) কে))))
  35. এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস (SKK))) কে)))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস (কে (এস (কে (এস (SKK))) কে)))) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))) )))))) (এস (কে (এস (এস (কে এস) (এস (কে (এস (SKK))) কে)))) (এস (কেকে) কে))
  36. এস (কে (এস এস (কে (এস (কে (এস এস (কে (এস (কে (এস (SKK))) কে)))) (এস (কেকে) (এস (কে এস) (এস এস (এস (এস (কে এস) (এস (কেকে) (এস (কে এস) (এস (কে (এস (SKK))) কে))))) (কেকে)))))))) (এস (কেকে) (এস (কে এস) (এস ( কেকে) (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কেকে))) (এস (কেকে) s))))))))) (এস (কে (এস এস (কেকে))) (এস (কেকে) (এস (কে এস) (এস (কে (এস (কে এস) (এস (কেকে) (এস (কে এস) কে))))))))))))
  37. এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কেকে) কে))))) (এস এস (এস কে)))
  38. কে (এস (কে (এসএসএস (কেকে))))
  39. এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস (এস (কে এস) (এস (কে (এস (SKK ))) কে)))) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে)))))) (এস (কে (এস এস (কে (এস (কে (এস এস )) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস ( কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে)) ))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))
  40. এস (কে (এস (কেকে))) (এস (কে এস) (এস (কেকে) (এস (কে (এস (কেকে) (এস (কেকে) কে))))))
  41. এস (কে (এস এস (কে (এস (এস (কে এস) (এস (কেকে) (এস (কে এস) কে))) (কে (এস (কে (এস (SKK))) কে)))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে)))))) (এস (কে (এস এস (কে (এস (কেকে) (এস (কে (এস এস)) কে))))) (এস (কেকে) (এস ( কে (এস এস)) (এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কে এস) কে))))) (এস (কে এস) কে))))))))))
  42. এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস (এস (কে এস) (এস (কে (এস (SKK))) কে)))) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে)))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস ( কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))
  43. কে (কে (কে (কে (কে (এস (কেকে) (এস (কেকে) (এস (কে (এস এস (এস কে))) (এসএসকে))))))))
  44. এস (কেকে) (এস (কে (এস (কেকে) (এস (কেকে) (এস (কেকে) (এস (কেকে) কে))))))
  45. এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কে (এস ( কে (এস (এস (কে এস) (এস (কে (এস (SKK))) কে)))) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে)))) )) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস ( কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে ( এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))
  46. এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস এস (কে (এস (কে (এস এস (কেকে))) (এস (কেকে) (এস ( কে এস) (এস (কে (এস (SKK))) কে))))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (এসএসকে (কে এস)) (এস (কে (এস এস )) (এস (কেকে) কে)))))))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস (কে (এস (কেকে) (এস (কে এস ) (এস (কেকে) (এস (কে (এস এস (কে (এস (কেকে) (এস (কে এস) কে))))) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) (এস (কে (এস এস (কে (এস (কেকে) কে)))) (এস (কেকে) s)))))))))))) (এস (কেকে) (এস (কে (এস এস)) কে)) )))))))) (এস (কে (এস এস (কে (এস (কেকে) (এস (কে (এস (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে)))))) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে)))))))) (এস (কেকে) s)))))) (এস (কে (এস এস (কে (এস (কে (এস (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে)))))) (এস (কেকে) (এস (কে ( এস এস)) (এস (কেকে) কে))))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস (কে (এস (কে এস) (এস (কেকে) ( এস (কে এস) কে)))))) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে)))))))))
  47. এস (কে (এস এস (কে (এস এস (এস (এস (কে এস) (এস (কেকে) s))) (কেকে))))) (এস (কেকে) (এস (কে এস) (এস (কে (এস (কে (এস (কে এস) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস (কে (এস (কে (এস এস (কে (এস (কে (এস (এস (কে এস) (এস ( কেকে) (এস (কে (এস এস)) (এস (কেকে) কে)))))) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))) (এস (কেকে) (এস (কে এস) কে)))))))))))))) (এস (কে (এস (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস ( কেকে) (এস (কে (এস (কে (এস (কে এস) কে)))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস ( কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস)) (এস (কেকে) কে))))))))))))) (এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস (কে (এস (কেকে) (এস (কে এস) কে))))) (এস (কেকে) (এস (কে (এস এস)) কে))))))))) (এস (কে এস) (এস (কেকে) (এস (কে (এস এস (কে (এস (কেকে) কে)))) (এস (কেকে) (এস ( কে এস) (এস (এসএসকে (কে এস)) (এস (কে (এস এস (কেকে))) (এস (কেকে) (এস (কে এস) (এস (কে (এস (SKK))) কে))))))) )))))))))
  48. কে (এস (কে (এস (কেকে) (এস (কে (এস (কেকে) (এস (কে (এস (কেকে) (এস (কেকে) কে))))))))))
  49. এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কে (এস ( কে (এস (কেকে) (এস (কে (এস (কেকে))) (এস (কে (এস (SKK))) কে)))))) (এস (কে (এস (SKK))) কে))) ))) (এস (কে (এস (SKK))) কে)))))) (এস (কে (এস (SKK))) কে)))))) (এস (কে (এস (SKK))) কে))
  50. এস (কে (এস (কে (এস (কে (এস (কে (এস (কে (এস (কেকে))) (এস (কে (এস এস (কে (এস (কে (এস (এস (কে এস) (এস (কে ( এস (SKK))) কে)))) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস)) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) কে))))))) (এস (কে (এস এস (কে (এস (কে (এস এস) ) (এস (কেকে) কে))))) (এস (কেকে) (এস (কে এস) (এস (কেকে) (এস (কে (এস (কে (এস (কেকে) (এস (কেকে) (এস (কেকে) (এস (কেকে) কে))))))) (এস (কে (এস এস)) (এস (কেকে) কে)))))))

অভিব্যক্তিগুলি স্বয়ংক্রিয়-অনুকূলকরণ করা (উদাহরণস্বরূপ S (K x) (K y) = K (x y)) তৈরি করা সম্ভব হবে ?
ক্যালকুলেটরফলাইন

@ ক্যালকুলেটরফালাইন আমি আপনার প্রশ্নটি বুঝতে পারি না; এস (কে এক্স ) (কে ওয়াই ) করা হয় স্বয়ংক্রিয়ভাবে কে (অপ্টিমাইজ XY )।
অ্যান্ডারস ক্যাসরগ

অপেক্ষা করুন, এই অভিব্যক্তিগুলি আংশিক প্রয়োগিত ফাংশন বা অন্য কিছু হিসাবে উপস্থাপিত হয়? যদি আংশিকভাবে ফাংশন প্রয়োগ করা হয়, তবে সম্ভবত আপনি আমার শেষ মন্তব্যের মতো কিছু করতে পারেন।
ক্যালকুলেটরফলাইন

@ ক্যালকুলেটরফলাইন উপস্থাপনাটি দেখতে উদাহরণস্বরূপ, 3 = 1 (2 3) ↦ 2 = এস (কে 1) (এস (কে 2) আই) ↦ 2 = এস (কে 1) 2 ↦ 1 = এস (এস (কেএস) (এস) (কে কে) (কে 1))) আমি ↦ 1 = এস (এস (কেএস) (কে (কে 1))) আই ↦ 1 = এস (কে (এস (কে 1))) আই ↦ 1 = এস (কে (এস (কে 1)) ))) আমি ↦ 1 = এস (কে 1) ↦ এস (কেএস) (এস (কে কে) আই) ↦ এস (কেএস) কে। আপনি দেখতে পাচ্ছেন, আমি ইতিমধ্যে নিবন্ধ করা অন্যান্যদের পাশাপাশি আমরা S (K x ) (K y ) ↦ K ( xy ) বিধিটি ইতিমধ্যে বহুবার ব্যবহার করেছি ruleStrings। যদি আমরা না করতাম তবে আউটপুটটি দীর্ঘতর হবে: এই ক্ষুদ্র উদাহরণের জন্য আমরা এস (এস (কেএস) (এস (এস (কেএস) (এস (কেকে) (কেএস))) (এস (এস) পেয়েছি (কে এস) (এস (কেকে) (কেকে))) (এস (কেকে) (SKK))))) (এস (এস (কে এস) (এস (এস (কে এস) (এস (কেকে) (কে এস))) ( এস (এস (কেএস) (এস (কেকে) (কে কে))) (এসকে)))) (এস (কেএস) (এসকে)) এর পরিবর্তে এস (কেএস) কে।
অ্যান্ডারস ক্যাসরগ

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

এটি জন ট্রম্প: বাইনারি ল্যাম্বডা ক্যালকুলাস এবং সম্মিলিত লজিকের সংযুক্ত যা যুক্ত যৌক্তিক সম্পর্কিত উইকিপিডিয়া নিবন্ধ থেকে লিঙ্কযুক্ত উন্নত বন্ধনী বিমূর্তকরণ প্রয়োগ করে । Sভেরিয়েবলের গভীর নীড় বাঁধা এড়াতে সর্বাধিক দরকারী বিশেষ কেসগুলি কেবল সাব-সাবটার্মগুলি সহ্য করতে সংযুক্তকারীটি ব্যবহার করে । যে কেসটি কিছু সাবটারমের সমতার জন্য পরীক্ষা করে তা কোনও পরীক্ষার ক্ষেত্রে প্রয়োজন হয় না। সংযুক্তকারীকে পরিচালনা করার জন্য বিশেষ কোনও মামলা নেই W(পিটারের উত্তর দেখুন), সংক্ষিপ্ত SS(SK)প্রকাশটি খুঁজে পেতে নিয়মগুলি একসাথে কাজ করে । (আমি প্রথমে অভ্যন্তরীণ কলগুলি অপ্টিমাইজ করার চেষ্টা করে ভুল করেছিলাম abstract, তারপরে এই Wঅপ্টিমাইজেশনটি ঘটেনি এবং সামগ্রিক ফলাফলটি 16 বাইট বেশি ছিল was)

এবং পরীক্ষার কেসগুলি থেকে ফলাফলগুলি এখানে:

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 অধ্যায়ে বর্ণিত যেমন মান অ্যালগরিদম করতে নকল একটি মকিংবার্ড ) চারটি মামলার ব্যবহার করে, 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একটি বিশেষ কেস হিসাবে প্রয়োগ করতে বেছে নিয়েছি ।

প্রোগ্রাম (সিজেএম)

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.