Gaucheで天下一プログラマー予選例題

以下の文字列はUTF-8を文字エンコーディング形式とする16進数のバイト列である。
UTF-8エンコーディングされた文字列として解析した場合、この文字列の【文字数】を答えなさい。
e4bba5e4b88be381aee69687e5ad97e58897e381af5554462d38e38292e69687e5ad97
e382a8e383b3e382b3e383bce38387e382a3e383b3e382b0e5bda2e5bc8fe381a8e381
99e3828b3136e980b2e695b0e381aee38390e382a4e38388e58897e381a7e38182e3828be38082

   / ̄ ̄\
 /   _ノ  \
 |   ( ●)(●)  <おっと、それ以上は言うなよ…
. |     (__人__)____
  |     ` ⌒/ ─' 'ー\
.  |       /( ○)  (○)\
.  ヽ     /  ⌒(n_人__)⌒ \
   ヽ   |、    (  ヨ    | Emacsでhexl-insert-hex-stringすれば
   /    `ー─−  厂   /
   |   、 _   __,,/     \

Gaucheでまっとうにやります。
処理内容

"e4bb....82" ->
'(e 4 b b a 5 ...) ->
'("e4" "bb" "a5" ...) ->
'(228 187 165 ...) ->
#u8(228 187 165 ...) ->
UTF-8文字列
(use srfi-1)
(use util.list)
(use gauche.uvector)

(define (天下一 str)
  (string-length
   (u8vector->string
    (list->u8vector
     (map (lambda (x)
            (string->number (apply string x) 16))
          (slices (string->list str) 2))))))
(天下一  (string-append "e4bba5e4b88be381aee69687e5ad97e58897e381af5554462d38e38292e69687e5ad97"
                        "e382a8e383b3e382b3e383bce38387e382a3e383b3e382b0e5bda2e5bc8fe381a8e381"
                        "99e3828b3136e980b2e695b0e381aee38390e382a4e38388e58897e381a7e38182e3828be38082"))
=> 41

もっと簡単な解き方がありそう。

(追記 2009/6/18 22:20)
packで一発でした。

(use binary.pack)
(string-length (pack "H*" '("e4bba5...中略...e38082") :to-string? #t))