Problem TEST :print :(readline dup "42" =) until Problem PRIME1 :(primes readint upfrom readint upto :print map; "" print) readint times (2) 3 buildprimes !primes ((primes' candidate) candidate 2 + buildprimes), (primes candidate 2 + buildprimes), primes candidate sqrt upto (candidate p % 0 =), #p exists ? #primes #candidate !buildprimes Problem SBSTR1 :(0 1 readitem readitem contains ? print) 24 times Problem ONP ?\Simple Grammar ?\ atom := a-z | (term) ?\ exp := atom ^ atom | atom ?\ div := exp / exp | exp ?\ mul := div * div | div ?\ sub := mul - mul | mul ?\ term := sub + sub | sub :(readline parseatom "" print) readint times :`badchar :(s[0] write s tail), (s[0] \a >=), (s[0] \z <=), & ? :(s tail parseterm \) match) s[0] \( = ?# #s @parseatom s parsesub :r :(r tail parsesub \+ write), (r[0] \+ =), ?# #r# #s !parseterm s parsemul :r :(r tail parsemul \- write), (r[0] \- =), ?# #r# #s !parsesub s parsediv :r :(r tail parsediv \* write), (r[0] \* =), ?# #r# #s !parsemul s parseexp :r :(r tail parseexp \/ write), (r[0] \/ =), ?# #r# #s !parsediv s parseatom :r :(r tail parseatom \^ write), (r[0] \^ =), ?# #r# #s !parseexp `badchar (s tail), (s[0] c =), ? #s #c !match Problem ONP ?\Alternative Grammar ?\ atom := a-z | (term) ?\ exp := atom ^ exp | atom ?\ div := exp / div | exp ?\ mul := div * mul | div ?\ sub := mul - sub | mul ?\ term := sub + term | sub :(readline parseatom "" print) readint times :`badchar :(s[0] write s tail), (s[0] \a >=), (s[0] \z <=), & ? :(s tail parseterm \) match) s[0] \( = ?# #s @parseatom s parsesub :r :(r tail parseterm \+ write), (r[0] \+ =), ?# #r# #s !parseterm s parsemul :r :(r tail parsesub \- write), (r[0] \- =), ?# #r# #s !parsesub s parsediv :r :(r tail parsemul \* write), (r[0] \* =), ?# #r# #s !parsemul s parseexp :r :(r tail parsediv \/ write), (r[0] \/ =), ?# #r# #s !parsediv s parseatom :r :(r tail parseexp \^ write), (r[0] \^ =), ?# #r# #s !parseexp `badchar (s tail), (s[0] c =), ? #s #c !match Problem PALIN ?\Awful solution :(readint 1 + getpalindrome print) readint times (n 1 + getpalindrome), n (n .toString dup rev =), ? #n !getpalindrome Problem PALIN ?\Proper solution :(readint getpalindrome print) readint times (n palinify2), (n palinify), (n palinify parseInt n >), ? #n !getpalindrome ( (h palineven), (h palinodd), (s length 2 % 0 =), ? (h palinodd), (h palineven), (s length 2 % 0 =), ? h length s takehalf length = ? s takehalf parseInt 1 + .toString !h n.toString !s ), #n !palinify2 ((h palinodd), (h palineven), (s length 2 % 0 =), ? s takehalf !h n.toString !s), #n !palinify (h' (h';) rev') #h !palinodd (h' h rev') #h !palineven s (s length 1 - m / 1 +), take #s !takehalf