Problem:
宅配料金

ある宅配業者の宅配料金は大きさと重量で下表のように料金が設定されています。

A サイズ

B サイズ

C サイズ

D サイズ

E サイズ

F サイズ

大きさ

60cm以内

80cm以内

100cm以内

120cm以内

140cm以内

160cm以内

重さ

2kg以内

5kg以内

10kg以内

15kg以内

20kg以内

25kg以内

料金

600円

800円

1000円

1200円

1400円

1600円

大きさは三辺（縦、横、高さ）の和です。例えば大きさが120cmで、重さが15kg以内の荷物はＤサイズ（1,200円）となります。大きさが120cm以内でも、重さが15kgを超え、20kg以内ならばＥサイズとなります。

1日に持ち込まれた荷物の情報を入力とし、料金の総計を出力するプログラムを作成してください。なお、Ｆサイズを超えた荷物は対象外とし料金の総計には含みません。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
x1 y1 h1 w1
x2 y2 h2 w2
:
xn yn hn wn

１行目に荷物の個数n (1 ≤ n ≤ 10000)、続くn 行に i 番目の荷物の縦の長さ xi、横の長さ yi、高さ hi、重さ wi (1 ≤ xi, yi, hi, wi ≤ 200) が空白区切りで１行に与えられます。

データセットの数は 20 を超えません。

Output

データセットごとに荷物の料金の総計を１行に出力します。

Sample Input

2
50 25 5 5
80 60 10 30
3
10 15 25 24
5 8 12 5
30 30 30 18
0

Output for the Sample Input

800
3800

Solution in Haskell (judge verdict: Accepted)

module Main where
import Control.Monad
import Control.Applicative
import Data.Maybe
import Data.List
import qualified Text.Printf
import qualified Data.ByteString.Char8 as BC
import qualified Data.ByteString as BC

------------------------------------------

main :: IO ()
main = do
    n <- readInt
    if n == 0 then return ()
    else do
        prices <- replicateM n $ do
            [x, y, h, w] <- readInts
            let size = x + y + h
                price1
                  | size <= 60 = 600
                  | size <= 80 = 800
                  | size <= 100 = 1000
                  | size <= 120 = 1200
                  | size <= 140 = 1400
                  | size <= 160 = 1600
                  | otherwise = 0
                price2
                  | w <= 2 = 600
                  | w <= 5 = 800
                  | w <= 10 = 1000
                  | w <= 15 = 1200
                  | w <= 20 = 1400
                  | w <= 25 = 1600
                  | otherwise = 0
            return $ if price1 == 0 || price2 == 0 then 0 else max price1 price2
        print $ sum prices
        main

------------------------------------------

{- Int input -}

parseInt :: BC.ByteString -> Int
parseInt = fst . fromJust . BC.readInt

parseInts :: BC.ByteString -> [Int]
parseInts = map parseInt <$> BC.words

readInt :: IO Int
readInt = parseInt <$> BC.getLine

readInts :: IO [Int]
readInts = parseInts <$> BC.getLine

{- Double Formatting -}

doubleFormat :: Double -> String
doubleFormat = Text.Printf.printf "%.12f"