# 都道府県 人口(人) 面積(km2)
strData =<<_EOT_
北海道 5,248,552 83,424.39
青森県 1,246,138 9,645.64
岩手県 1,226,430 15,275.01
宮城県 2,303,160 7,282.29
秋田県 965,968 11,637.52
山形県 1,077,057 9,323.15
福島県 1,847,950 13,783.90
茨城県 2,868,041 6,097.39
栃木県 1,942,312 6,408.09
群馬県 1,937,626 6,362.28
埼玉県 7,337,330 3,797.75
千葉県 6,279,026 5,157.60
東京都 13,942,856 2,194.07
神奈川県 9,200,166 2,416.30
新潟県 2,222,004 12,584.24
富山県 1,042,998 4,247.59
石川県 1,137,181 4,186.05
福井県 767,742 4,190.52
山梨県 812,056 4,465.27
長野県 2,049,023 13,561.56
岐阜県 1,988,931 10,621.29
静岡県 3,639,226 7,777.35
愛知県 7,552,873 5,173.06
三重県 1,779,770 5,774.45
滋賀県 1,413,959 4,017.38
京都府 2,583,140 4,612.20
大阪府 8,823,453 1,905.29
兵庫県 5,463,609 8,400.94
奈良県 1,331,330 3,690.94
和歌山県 923,721 4,724.65
鳥取県 555,663 3,507.14
島根県 673,891 6,708.27
岡山県 1,891,346 7,114.33
広島県 2,807,987 8,479.64
山口県 1,355,495 6,112.53
徳島県 728,633 4,146.75
香川県 956,069 1,876.79
愛媛県 1,338,811 5,676.16
高知県 697,674 7,103.64
福岡県 5,110,113 4,986.51
佐賀県 814,211 2,440.70
長崎県 1,325,205 4,131.00
熊本県 1,746,740 7,409.45
大分県 1,134,431 6,340.76
宮崎県 1,072,077 7,735.33
鹿児島県 1,599,984 9,187.08
沖縄県 1,454,184 2,281.00
_EOT_
arr = []
strData.split("\n").each{|line|
dat = line.split("\t")
dat[1] = dat[1].tr( ',', '' ).to_i # 人口(人)
dat[2] = dat[2].tr( ',', '' ).to_f # 面積(km2)
arr << dat
}
arr.sort_by!{|x| - x[1] / x[2] }
popula = 0
area = 0
ans = []
20.times{
arr.sort_by!{|x| (popula + x[1]) / (area + x[2]) }
a = arr.pop
ans << a
popula += a[1]
area += a[2]
}
puts "%12.6f 人/km2" % [popula / area]
puts "[#{ans.map{|a| a[0]}.join(",")}]"
=begin
959 デフォルトの名無しさん 2020/02/24(月) 20:48:14.13 ID:D8qhYUus
[お題]
URLのページに都道府県別の人口と面積が載っている。
今回使用するのは、2019.10.1のデータ
URL: https://u...content-available-to-author-only...b.jp/pjn/pb.html
異なる20都道府県を選んで人口密度(人/km2)を最大化する。
人口密度は、少数6桁程度表示
選んだ都道府県名を 20個表示する(表示されてる順 ← 県コード順)。
例えば、3都道府県なら、
4906.099305 人/km2
[東京都, 神奈川県, 大阪府]
※入力はwebページから(工夫して)コピペで、スクレイピングの問題じゃない。
=end
IyDpg73pgZPlupznnIwJ5Lq65Y+j77yI5Lq677yJCemdouepje+8iGttMu+8iQoJc3RyRGF0YSA9PDxfRU9UXwrljJfmtbfpgZMJNSwyNDgsNTUyCTgzLDQyNC4zOQrpnZLmo67nnIwJMSwyNDYsMTM4CTksNjQ1LjY0CuWyqeaJi+ecjAkxLDIyNiw0MzAJMTUsMjc1LjAxCuWuruWfjuecjAkyLDMwMywxNjAJNywyODIuMjkK56eL55Sw55yMCTk2NSw5NjgJMTEsNjM3LjUyCuWxseW9ouecjAkxLDA3NywwNTcJOSwzMjMuMTUK56aP5bO255yMCTEsODQ3LDk1MAkxMyw3ODMuOTAK6Iyo5Z+O55yMCTIsODY4LDA0MQk2LDA5Ny4zOQrmoIPmnKjnnIwJMSw5NDIsMzEyCTYsNDA4LjA5Cue+pOmmrOecjAkxLDkzNyw2MjYJNiwzNjIuMjgK5Z+8546J55yMCTcsMzM3LDMzMAkzLDc5Ny43NQrljYPokYnnnIwJNiwyNzksMDI2CTUsMTU3LjYwCuadseS6rOmDvQkxMyw5NDIsODU2CTIsMTk0LjA3CuelnuWliOW3neecjAk5LDIwMCwxNjYJMiw0MTYuMzAK5paw5r2f55yMCTIsMjIyLDAwNAkxMiw1ODQuMjQK5a+M5bGx55yMCTEsMDQyLDk5OAk0LDI0Ny41OQrnn7Plt53nnIwJMSwxMzcsMTgxCTQsMTg2LjA1Cuemj+S6leecjAk3NjcsNzQyCTQsMTkwLjUyCuWxseaiqOecjAk4MTIsMDU2CTQsNDY1LjI3CumVt+mHjuecjAkyLDA0OSwwMjMJMTMsNTYxLjU2CuWykOmYnOecjAkxLDk4OCw5MzEJMTAsNjIxLjI5CumdmeWyoeecjAkzLDYzOSwyMjYJNyw3NzcuMzUK5oSb55+l55yMCTcsNTUyLDg3Mwk1LDE3My4wNgrkuInph43nnIwJMSw3NzksNzcwCTUsNzc0LjQ1Cua7i+izgOecjAkxLDQxMyw5NTkJNCwwMTcuMzgK5Lqs6YO95bqcCTIsNTgzLDE0MAk0LDYxMi4yMArlpKfpmKrlupwJOCw4MjMsNDUzCTEsOTA1LjI5CuWFteW6q+ecjAk1LDQ2Myw2MDkJOCw0MDAuOTQK5aWI6Imv55yMCTEsMzMxLDMzMAkzLDY5MC45NArlkozmrYzlsbHnnIwJOTIzLDcyMQk0LDcyNC42NQrps6Xlj5bnnIwJNTU1LDY2MwkzLDUwNy4xNArls7bmoLnnnIwJNjczLDg5MQk2LDcwOC4yNwrlsqHlsbHnnIwJMSw4OTEsMzQ2CTcsMTE0LjMzCuW6g+WztuecjAkyLDgwNyw5ODcJOCw0NzkuNjQK5bGx5Y+j55yMCTEsMzU1LDQ5NQk2LDExMi41MwrlvrPls7bnnIwJNzI4LDYzMwk0LDE0Ni43NQrpppnlt53nnIwJOTU2LDA2OQkxLDg3Ni43OQrmhJvlqpvnnIwJMSwzMzgsODExCTUsNjc2LjE2CumrmOefpeecjAk2OTcsNjc0CTcsMTAzLjY0Cuemj+WyoeecjAk1LDExMCwxMTMJNCw5ODYuNTEK5L2Q6LOA55yMCTgxNCwyMTEJMiw0NDAuNzAK6ZW35bSO55yMCTEsMzI1LDIwNQk0LDEzMS4wMArnhormnKznnIwJMSw3NDYsNzQwCTcsNDA5LjQ1CuWkp+WIhuecjAkxLDEzNCw0MzEJNiwzNDAuNzYK5a6u5bSO55yMCTEsMDcyLDA3Nwk3LDczNS4zMwrpub/lhZDls7bnnIwJMSw1OTksOTg0CTksMTg3LjA4Cuaylue4hOecjAkxLDQ1NCwxODQJMiwyODEuMDAKX0VPVF8KCglhcnIgPSBbXQoJc3RyRGF0YS5zcGxpdCgiXG4iKS5lYWNoe3xsaW5lfAoJCWRhdCA9IGxpbmUuc3BsaXQoIlx0IikKCQlkYXRbMV0gPSBkYXRbMV0udHIoICcsJywgJycgKS50b19pCSMg5Lq65Y+j77yI5Lq677yJCgkJZGF0WzJdID0gZGF0WzJdLnRyKCAnLCcsICcnICkudG9fZgkjIOmdouepje+8iGttMu+8iQoJCWFyciA8PCBkYXQKCX0KCglhcnIuc29ydF9ieSF7fHh8IC0geFsxXSAvIHhbMl0gfQoJcG9wdWxhID0gMAoJYXJlYSA9IDAKCWFucyA9IFtdCgkyMC50aW1lc3sKCQlhcnIuc29ydF9ieSF7fHh8IChwb3B1bGEgKyB4WzFdKSAvIChhcmVhICsgeFsyXSkgfQoJCWEgPSBhcnIucG9wCgkJYW5zIDw8IGEKCQlwb3B1bGEgKz0gYVsxXQoJCWFyZWEgKz0gYVsyXQoJfQoJcHV0cyAiJTEyLjZmIOS6ui9rbTIiICUgW3BvcHVsYSAvIGFyZWFdCglwdXRzICJbI3thbnMubWFwe3xhfCBhWzBdfS5qb2luKCIsIil9XSIKCj1iZWdpbgoKOTU5IOODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCkyAyMDIwLzAyLzI0KOaciCkgMjA6NDg6MTQuMTMgSUQ6RDhxaFlVdXMKICAgIFvjgYrpoYxdCiAgICBVUkzjga7jg5rjg7zjgrjjgavpg73pgZPlupznnIzliKXjga7kurrlj6PjgajpnaLnqY3jgYzovInjgaPjgabjgYTjgovjgIIKICAgIOOAgOS7iuWbnuS9v+eUqOOBmeOCi+OBruOBr+OAgTIwMTkuMTAuMeOBruODh+ODvOOCvwogICAg44CAVVJMOiBodHRwczovL3UuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmIuanAvcGpuL3BiLmh0bWwKCiAgICDjgIDnlbDjgarjgosyMOmDvemBk+W6nOecjOOCkumBuOOCk+OBp+S6uuWPo+WvhuW6pijkurova20yKeOCkuacgOWkp+WMluOBmeOCi+OAggogICAg44CA5Lq65Y+j5a+G5bqm44Gv44CB5bCR5pWwNuahgeeoi+W6puihqOekugogICAg44CA6YG444KT44Gg6YO96YGT5bqc55yM5ZCN44KSIDIw5YCL6KGo56S644GZ44KLKOihqOekuuOBleOCjOOBpuOCi+mghiDihpAg55yM44Kz44O844OJ6aCGKeOAggoKICAgIOOAgOS+i+OBiOOBsOOAgTPpg73pgZPlupznnIzjgarjgonjgIEKICAgIOOAgOOAgDQ5MDYuMDk5MzA1IOS6ui9rbTIKICAgIOOAgOOAgFvmnbHkuqzpg70sIOelnuWliOW3neecjCwg5aSn6Ziq5bqcXQoKICAgIOKAu+WFpeWKm+OBr3dlYuODmuODvOOCuOOBi+OCiSjlt6XlpKvjgZfjgaYp44Kz44OU44Oa44Gn44CB44K544Kv44Os44Kk44OU44Oz44Kw44Gu5ZWP6aGM44GY44KD44Gq44GE44CCIAoKPWVuZAo=