函数程序设计实验十:车牌竞价信息处理 晓风の个人博客

{-
文件bids_201711.txt 是广州市某月车牌竞价信息,包含若干行,每行形如「1234198004118085   29570」,表示一位竞价人的身份证号和出价。
假设本月有10个车牌竞拍。你的任务是统计相关信息,包括最高成交价、最低成交价、平均成交价、按照出价从高到低列车前十位出价人身份证号和出价,并存入另一个文件bidResults.txt中。例如,统计结果可能如文件bidResults1.txt  所示。
要求:
1. 提交你的代码文件;
2. 提交统计结果文件,或者将结果粘贴在提交窗口。
提示:需要排序函数,请hoogle :: [a] -> [a],或者自定义排序。
-}
--代码写的太丑了,以后重写吧……

import Data.Char
import System.IO
import Text.Printf

main::IO()
main= do
    txt<-readFile "bids_201711.txt"
    let dat=lines txt
    let mi=getmin dat
    let ma=getmax dat
    let sum=getsum dat
    let len=length dat
    let aftersort=getsort dat
    writeFile "bidResults.txt"
        (printf "最高成交价:%d\n最低成交价:%d\n平均成交价:%d\n总共有%d参与竞价成交名单:\n%s"
            ma mi (div sum len) len (unlines (take 10 aftersort)))

digit::String->Int->Int
digit s n=(ord (s!!n))-(ord '0')

getval::String->Int
getval s=(digit s 23)*10000+(digit s 24)*1000+(digit s 25)*100+(digit s 26)*10+(digit s 27)

getmin::[String]->Int
getmin [a]=getval a
getmin (x:xs)=if a<b then a else b
    where
        a=getmin [x]
        b=getmin xs

getmax::[String]->Int
getmax [a]=getval a
getmax (x:xs)=if a>b then a else b
    where
        a=getmax [x]
        b=getmax xs

getsum::[String]->Int
getsum [a]=getval a
getsum (x:xs)=(getmax [x])+(getmax xs)

getsort::[String]->[String]
getsort []=[]
getsort (x:xs)=(getsort [y|y<-xs,(getval y)>(getval x)])++[x]++(getsort [y|y<-xs,(getval y)<(getval x)])

下面是bidResults.txt的内容。

最高成交价:29995
最低成交价:10008
平均成交价:111
总共有491参与竞价成交名单:
1234198610248103       29995
1535198004062143       29948
1334197907229015       29922
1435198110019109       29916
1535198412072052       29822
1533198811246245       29820
1633197706227256       29815
1234198205229019       29799
1533198710186071       29777
1536198405206083       29727

下面是bids_201711.txt的内容。

1230197812061080       24596
1230197210049047       11293
1331197708184092       26387
1331198509014173       21991
1331198702174176       13778
1333197808181338       29686
1333197812025146       27955
1333198709276233       12495
1334197907229015       29922
1334197205049158       10416
1430198708181002       25186
1430197102201027       24090
1430197912121030       19367
1431198402182064       11682
1431197303143010       20660
1431197711224092       13196
1431197512184190       12069
1432197703132181       28424
1433197902071057       11985
1433198810041098       18754
1433198111221148       25994
1433197311121198       25065
1433197711041206       21115
1433197412131354       13146
1434199006226012       17399
1434198808016016       25430
1434198112246017       26006
1434197106257001       12193
1434199012017087       22698
1434198612107099       27705
1434197910097116       20944
1434198205257149       23445
1434197105058037       14507
1434197511068057       23953
1434197410198061       15966
1434199001168083       21456
1434197712158085       25448
1434198912018117       20420
1434198807048125       25469
1435198609050022       12447
1435198409016106       23101
1435198110019109       29916
1436198306186113       10806
1436197501287048       13904
1530198810111127       16078
1530199002261200       15993
1530198304086034       26630
1530198411268038       14159
1530197408019037       21750
1530199002079054       10057
1531198401270053       24736
1531198101252040       26514
1531198110182065       12418
1531197704223007       13175
1531198708234191       25275
1532198206021061       12352
1532197309044084       21131
1532198206094108       20076
1533198402091046       16392
1533197405231092       25507
1533197510141097       13482
1533199006061403       22390
1533197905261404       22059
1533198303111443       25906
1533198508036001       18009
1533197512086002       27627
1533197906156007       25881
1533197504206011       13898
1533198007276012       27095
1533198004256027       27761
1533197606026083       18785
1533197702066114       18618
1533197910176205       12649
1533198811246245       29820
1534198403103001       25702
1534198403183043       18033
1534197007193054       28238
1534199004133073       22004
1534198701103076       26811
1534198606093104       12159
1534199008033108       19285
1534197412013119       21302
1534198610178012       11210
1534198406018015       22246
1534198507278026       19547
1534198702279031       22679
1534198002219036       29597
1534198605189050       11796
1534198007209121       19654
1535198702061054       25342
1535198212101059       22819
1535197503131117       19377
1535198803255119       22937
1535197608028311       15710
1535197501128369       24591
1536197405270013       15526
1536198402134004       18326
1536197312034015       21755
1536197901275016       29158
1536198405206083       29727
1234199004029001       14620
1234198002169002       12831
1234198611199003       13283
1234198012199004       12402
1234198706219005       24886
1234197812129006       23230
1234197701239007       19611
1234197906209008       13897
1234197304129009       10231
1234197003259010       24607
1234198701079011       29518
1234198405169012       21416
1234198610119013       24790
1234198907069014       13158
1234198405109015       22260
1234198106179016       24818
1234198107099017       24940
1234197708199018       16961
1234198708199019       15929
1234198201239020       18482
1234198207069021       13467
1234197312119022       22046
1234198912069023       29357
1234198311129024       13816
1234198811099025       22464
1234197104079026       10351
1234197512268070       26906
1234197504178071       18504
1234197301168073       25673
1234198605098074       16561
1234198509118075       23956
1234197511198076       15831
1234198302028077       26572
1234198708238078       23611
1234197312088079       28083
1234197406148080       14268
1234197703048081       11723
1234198001208082       20541
1234198510168083       20543
1234197608078084       22597
1234199001118085       25643
1234198203158086       16879
1234197110178087       25850
1234199003188088       27679
1234197405268089       10967
1234197311178090       10646
1234198204058091       24014
1234198603198092       13800
1234199012078093       26813
1234197006098094       11138
1234197108058095       24278
1234198505268096       23281
1234197809078097       17968
1234198012038098       22295
1234198508078099       16772
1234197907098100       20025
1234197707098101       11314
1234198808118102       27658
1234198610248103       29995
1234197409128104       27286
1234197303158105       20618
1234198311088106       27155
1234198701048107       28656
1234198304078108       13494
1234198401198109       10978
1234197611088110       21760
1234198602148111       11563
1234198311048112       22574
1234197701268113       12725
1234198802128114       26076
1234197303028115       26401
1234197509058116       28388
1234198410288117       27558
1234199007158118       16683
1234197510248119       15552
1234197208068120       13256
1234197201068121       20977
1234197712098122       13404
1234197912258123       21381
1234197307058124       27165
1234197811128125       25232
1234197003078126       23424
1234197907048127       21859
1234197807218128       26843
1234197303148130       16550
1234198609288131       18064
1234198501128132       23214
1234197005068133       14521
1234197508028134       12830
1234198402278135       11977
1234197504218136       28962
1234197709228137       13377
1234198107108138       26220
1230197405203218       26698
1233197007050058       24942
1233198104060178       21090
1233198811040364       27434
1233197412030414       11319
1236198803025088       12697
1234197906138139       28617
1234198102238140       20104
1234198709218141       14266
1234198503118142       25458
1234198207178143       12879
1234197612018144       25047
1234197702038145       12443
1234197107148146       26526
1234198710258147       27844
1234198103128148       21973
1234197207278149       29673
1234197310038150       25735
1234197512218151       22471
1234197211258152       11752
1234199004238153       28643
1234198009078154       27158
1234198911248155       10311
1234198611138156       16654
1234197808048157       24494
1234197510278158       21539
1234197506208159       13743
1234197309158160       12802
1234198505258161       12126
1234198302098162       10694
1234197710248163       12944
1234198610148164       12065
1234197005198165       10008
1234197404238166       10634
1234198007278167       21425
1234197001168168       22861
1234197303168169       27418
1234197307178170       22362
1234197905168171       19947
1234197903208172       11690
1234198106068173       11265
1234198904278174       10389
1234198903268175       26515
1234197304078176       17138
1234197402198177       18844
1234197207068178       20639
1234198205098179       16327
1234198902268180       27563
1234198102138181       10179
1131198902092008       27936
1131197304108030       28446
1233198109040089       17461
1233198508200203       10012
1235197601273174       12751
1235198209173224       23275
1235198609203285       22081
1236197907235026       16804
1234198801289001       27786
1234199006189002       19019
1234197205039003       28672
1234198810089004       15417
1234197703039005       24318
1234197409279006       19974
1234199002139007       27919
1234197506069008       11759
1234197205049009       16736
1234198002269010       17838
1234198402049011       13050
1234199006149012       28597
1234198503069013       22384
1234199004229014       10673
1234198903089015       11229
1234198711169016       23558
1234197910059017       16595
1234198402219018       17832
1234198205229019       29799
1234197411019020       25989
1234198410169021       18688
1234197905169022       18017
1234198507059023       11564
1234198002149024       18723
1234198303269025       14515
1234199005239026       14559
1330198201289011       20717
1331198702114240       23112
1332198107013008       11228
1431198511154103       24890
1432198409062084       22022
1432197202204037       13256
1433198009085060       23635
1433198709255216       14348
1434197611098044       12396
1434197504148184       21570
1435197411122073       11990
1435198202033142       11009
1435198406073430       27399
1530197111248009       10433
1530199005108029       24867
1530197411288030       26199
1530198312158054       24154
1531198209102002       14123
1531197802104121       18770
1531197002204204       23400
1533198607241042       13904
1533197706121311       13904
1533198407216057       29164
1533197507106058       20537
1533198710186071       29777
1533198307256264       27122
1533199004286269       19516
1534197908203047       15104
1534199009228014       19371
1534198602109107       12243
1534197608149108       10478
1535198607190037       12904
1535198704112045       25296
1535197511282065       22632
1535197707192081       12537
1535197602022083       11064
1535198407222087       15885
1535198002172088       28172
1535198802082089       24058
1535198909192091       12171
1535199012282144       22735
1535199008232161       25474
1535198603242229       24408
1535198503042296       26162
1535197811082354       26763
1535198609192434       17675
1535198808143011       28201
1536198105154006       27690
1630197409082111       24052
1630198811038030       25783
1630198205108032       27212
1630198603098044       26489
1630199008068110       28112
1630197410128114       19099
1630198607238144       22138
1630199006139005       14612
1631198907150001       19596
1631197601170011       18218
1631198401250022       15989
1631199003230055       17874
1631198711140072       24781
1631198203040077       28717
1631197809172009       16202
1631198708074019       11821
1631197202127017       14173
1631199008057090       20210
1631198001288124       19047
1631197802238243       12079
1631198709038263       20999
1631198508158280       26914
1632198506218013       24126
1632198707018035       10931
1633198412267019       26385
1633198611277075       19148
1633198101057101       25844
1633197504057210       12773
1633197307177216       11246
1633197202067229       17580
1633197706227256       29815
1633198908247269       19364
1633197607047270       27994
1633197310259025       17967
1633198004039028       16854
1633198805169035       16606
1633198707129053       16645
1634197601010006       17806
1634197906140030       27674
1634198202280069       18967
1634197202120078       18059
1634197606150098       19578
1634197501180121       23982
1634197501210147       28722
1634198406230150       16101
1634197304190152       15267
1634198707190170       12856
1634197409120218       15195
1635197407271010       27869
1636198202023012       29285
1636198112105041       15066
1636198811265174       19174
1535198109102012       15411
1535199008052069       25931
1535197407192001       16598
1535198509162002       16051
1535198009242004       10939
1535199003172005       11552
1535197510072006       14208
1535197405222007       16981
1535198412282008       23446
1535197511042009       14307
1535198404182010       11877
1535197812232011       14899
1535198403162013       26055
1535197012092014       15800
1535197612022015       16039
1535197104142016       19642
1535198905182017       13293
1535197610112018       25428
1535197502022019       27111
1535198904032020       25213
1535198111102021       28999
1535198310102022       13916
1535198112272023       17217
1535197208162047       11613
1535198406272048       13450
1535197312272049       21779
1535197902132050       10635
1535197106262051       18108
1535198412072052       29822
1535197408102053       23618
1535198402212054       18687
1535199012262055       28832
1535197408082056       11569
1535198206132057       25421
1535198604132058       22643
1535198904032059       29229
1535198101022060       26379
1535197002222061       14390
1535197902082062       22243
1535198903102063       22734
1535198808062064       18847
1535197203162065       16216
1535198507172066       17110
1535197509042067       18021
1535198612162068       24746
1535198203182093       18266
1535198010192094       16164
1535197607212095       15046
1535198404092096       25556
1535198108172097       18403
1535198308012098       12940
1535197510222099       29560
1535197512162100       17683
1535198805042101       12112
1535198807282102       23389
1535198310102103       11622
1535198407272104       11065
1535197507192105       15675
1535198503152106       15769
1535198307062107       20625
1535198106262108       29649
1535197903262109       28689
1535198204132110       13639
1535198808202111       27614
1535197603152112       18166
1535198612242113       12361
1535197010172114       17072
1535198802232115       15397
1535198301082139       13214
1535198202242140       18728
1535199002222141       16027
1535197208212142       28702
1535198004062143       29948
1535197005102144       16407
1535197301202145       18538
1535198407192146       11567
1535198012082147       23755
1535198007192148       19494
1535197812202149       14265
1535198803082150       22251
1535197904252151       20512
1535197709052152       21623
1535197106102153       14812
1535198906052154       20807
1535198702182155       12771
1535198606092156       22696
1535198905172157       25593
1535197807262158       27720
1535197911262159       24090
1535197204142160       13328
1535198004112161       14277
1535197106272186       27998
1535197306042188       12492
1535198512242189       15235
1535198308152190       20690
1535198106072191       19163
1535198903072192       16872
1535198811022193       15760
1535198301262194       15536
1535198801212195       12584
1535198908052197       13597
1535198901142198       29418
1535199004132199       16650
1535197411172200       29393
1535198309082201       23186
1535197508192202       10021
1535198911232203       15774
1535197808032204       17627
1535197812152205       28673
1535197204162206       27991
1535198808112207       18116
1535197411142208       29056
1535197409232003       14656
1535197012152187       11778
1535198107162196       17291