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