ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

ARC003A - GPA計算

 今日もやった。

概要

N個(1 <= N <= 100)のrが与えられる(r ∈ {A, B, C, D, F})。 A - 4点 B - 3点 C - 2点 D - 1点 F - 0点

として、点数の平均を求めよ。

回答

(define (solver)
  (define (rank->point r)
    (if (char=? r #\F)
    0
    (- 4 (- (char->integer r) (char->integer #\A)))))
  (define (sum xs)
    (fold-left + 0 xs))
  (define (avg xs)
    (/ (sum xs) (length xs)))
  (let ((pts (map rank->point (string->list (read-line)))))
    (display (exact->inexact (avg pts)))))

(read-line)
(solver)

入力を受け取って、リストにする。それから、文字→点数(rank->point)変換します。map便利強い。普通にA-Eだと思ってWAしましたよね。

あとは、平均を求めるだけです。schemeだと除算結果はrationalな値になってしまうので、exact->inexactで少数で出力しました。

haskellだともっと短く綺麗にかける気がしてきた……