Armenian SPOJ

LISP

LISP1 - LISP

Հրայրի արկածները շարունակվում են։ Նա, ազատելով կղզին անեծքից ցանկանում է, վերջապես, հեռանալ այստեղից։ Ծովափին նա նկատում է մի փոքրիկ նավակ, որն ուներ ծրագրավորվող ռոտոր։ Ավաղ, նրա խորամանկ թշնամիները դիտմամբ փչացրել էին ծրագրավորվող ռոտորը։ Շարքից դուրս էր եկել նավակը ղեկավարող LISP (Little Ship Programmin) լեզվի իրականացնող հատվածը։
Լեզուն բաղկացած է արտահայտություններից։ Դրանք գրվում են պրեֆիքսային ձևաչափով, այն է՝ նախ գրվում է գործողությունը, ապա դրան հաջորդում են արգումենտները, որոնք, իրենց հերթին կարող են լինել թվեր կամ արտահայտություններ։ Օրինակ՝ (mul (add 3 5) 2), ինչը համարժեք է (3 + 5)*2 թվաբանական արտահայտությանը։ Մասնավորապես, հայտարարված էին ֆունկցիաներ, ինչպես նաև կանչվում էին դրանք ու որոշ հենքային ֆունկցիաներ՝
  • Թեստերի առաջին խմբի համար՝
    • (add x y) գումարում
    • (sub x y) հանում
    • (mul x y) բազմապատկում
    • (div x y) բաժանում, ամբողջ մաս
    • (print expr) տպել expr արտահայտության արժեքը։
  • Թեստերի երկրորդ խմբի համար (ներառվում են բոլոր առաջին խմբի գործողությունները)՝
    • (lt x y), (gt x y), (eq x y) համեմատում (<, >, =)
    • (if x y z) հավասար է y-ին, եթե x արտահայտությունը ճշմարիտ է, z՝ հակառակ դեպքում
  • Թեստերի երրորդ խմբի համար (ներառվում են նախորդ խմբերի գործողությունները)՝
    • (defun f(a b ...) expr) որպես f ֆունկցիա a, b, … փոփոխականներից սահմանվում է expr արտահայտությունը
    • (funcname a b ...) կանչել funcname անվամբ ֆունկցիան a, b, … արգումենտերով
Երաշխավորվում է, որ ծրագրային կոդը կոռեկտ է, արդյունքը գտնելու համար հարկավոր է կատարել 5-ից քիչ գործողություն թեստերի առաջին խմբի համար, և 200-ից քիչ գործողություն թեոտերի երկրորդ և երրորդ խմբի համար։ Ընթացիկ ոչ մի գործողության արդյունքը բացարձակ արժեքով չի գերազանցում -ը։ Ավելորդ բացակները և նոր տողի սիմվոլները անտեսվում են։ Ավելորդ փակագծեր չկան։ Մեկ կոդում կարող են լինել մի քանի հաջորդական գործողություններ, որոնք բաժանված են բացակով կամ նոր տողի սիմվոլով։ Ծրագրային կոդում տրված բոլոր թվերը ոչ բացասական ամբողջ թվեր են և չեն գերազանցում -ը։ Սահմանված նոր ֆունկցիաները կարող են ունենալ ամենաշատը 2 արգումենտ։ Փոփոխականները իրենցից ներկայացնում են լատինական այբուբենի փոքրատառեր։ Ֆունկցիաների անունները կազմված են լատինական այբուբենի առավելագույնը 16 փոքրատառերից։

Մուտք

Մուտքում տրված է ծրագրային կոդը։

Ելք

Անհրաժեշտ է իրականացնել կոդի իրականացման արդյունքը։

Օրինակներ

Մուտք #1.
(print (mul (add 3 5) 2))
Ելք #1.
16


Մուտք #2.
(print (if (eq 3 4)
      (add 1 2)
      (mul (add  (mul 2 4) (sub 4 5)) 3)
   )
)
Ելք #2.
21


Մուտք #3.
(defun factorial(x)
        (if (eq x 1)
                1
                (mul x (factorial (sub x 1)))
        )
)
(factorial 5)
(print (factorial 3))
Ելք #3.
6
 
Աղբյուրը. Հանրապետական 2016
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue