ふと所用により、日本の高速道路の出入り口(インターチェンジ)の概算が知りたくなった。頭のいい人ならチャチャッとフェルミ推定して算出するのだろうが、考えるよりダーティコードを書いた方が早いと思ったので高速道路の出入口数を調べるテキトーなスクリプトを組んだ。Wikipediaには「日本のインターチェンジ一覧」というページがあるので、そこから情報を引っ張ってきて日本の高速道路のインターチェンジの数をざっくり算出する。
実行したら、2,692ヶ所と出た。2013年10月11日現在、最低でも日本に2,692カ所は高速道路の出入り口があるっぽい。
以下、概算に使ったコード。ハードコーディングしまくりなので、Wikipediaのページの構成が変わったらすぐに使えなくなるので要注意。
# | |
# number of interchanges | |
# | |
require 'nokogiri' | |
require 'open-uri' | |
ic_urls = %w( | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%82%E8%A1%8C | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%8B%E8%A1%8C | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%95%E8%A1%8C | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%9F%E8%A1%8C | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%AA-%E3%81%AF%E8%A1%8C | |
http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E4%B8%80%E8%A6%A7_%E3%81%BE-%E3%82%8F%E8%A1%8C | |
) | |
sum_of_ic = 0 | |
ic_urls.each do |ic_url| | |
html = Nokogiri::HTML(open(ic_url)) | |
puts URI.decode(ic_url.gsub('http://ja.wikipedia.org/wiki/', '')) | |
html.css('h3+ul').each do |ul| | |
h3 = ul.previous_element | |
if /^.\[編集\]$/ =~ h3.text | |
cnt = ul.children.count / 2 | |
sum_of_ic += cnt; | |
puts h3.text | |
puts "count:#{cnt}" | |
puts "sum:#{sum_of_ic}" | |
end | |
end | |
end | |
puts "all sum:#{sum_of_ic}" |