Hatena::Groupcadr

kozima の日記

2010-02-01

最近のあなごる

| 22:13

四問まとめてとりあえずコード書きました。まだ縮まるかも。

calculation of decimal

小数点以下だけまじめに足し算したら golf らしからぬお行儀のいいコードになりました。いや,asdf::split はあんまりお行儀よくありませんが。

(loop for (a b i j c d) = (asdf::split (read-line) 7 " .+")
   do (do* ((l (max (length b) (length d)))
            (i l (1- i))
            (b (format () "~V,,,'0A" l b))
            (d (format () "~V,,,'0A" l d))
            (n 0 (+ (* (+ (char-code (elt b i)) (char-code (elt d i)) -96)
                       r)
                    n))
            (r 1 (* r 10)))
           ((= i 0)
            (format t "~D.~V,'0D
" (+ (parse-integer a) (parse-integer c) (if (< (expt 10 l) n) 1 0))
l (rem n (expt 10 l))))))

そうでない方法を後で思いついて 130bytes になったのでとりあえず submit。

modular exponentiation

わりと普通のアルゴリズムで。短くならない。

very small number

(expt 2d0 -54) なんですけどそのまま表示すると一桁多いので結局 embed することに。