結論
組めない。
最長のリレーは
- 粟原市の千葉市長
- 千葉市の熊谷市長
- 熊谷氏の富岡市長
- 富岡市の榎本市長
の4市。
なお上の結果は2020年11月時点のものです。
序論
千葉市の熊谷市長(もうすぐ県知事になりそうですけど)は有名ですよね。

(Wikipediaより引用)
しかし熊谷市長というと埼玉県熊谷市の市長さんと混同しそうになります。生まれ持った名字なので仕方ないのですが、時々こういう名前衝突が起こります。更に言うと、理論的には「XX市のYY市長 → YY市のZZ市長 → ZZ市のXX市長」という無限ループが発生してしまう可能性がありますし、そうなったら大変です! 調べなければなりません。
調査方法
全国市長会ホームページが全自治体(町村は含まれていないようです)の市長名を公開してくれているので、これを全探索していきます。向こうのページの仕様で、検索結果がユニークアドレスを持っていないので、もし下のコードを実際に実行したいという奇特な方がいたら実際にページにアクセスして検索クエリを出してhtmlファイルを入手してください。下のコードで言うとsource.htmlがそれに当たります。
以下ソースコード:
import re
import requests
def search(p,result):
print('{}市の{}市長を探索中 ... '.format(p[0],p[1]))
for r in result:
if r[0] == p[1]:
return 1+search(r,result)
print('{}市は存在しないようです\n'.format(p[1]))
return 1
def main():
t = open('source.html').read()
pattern = r'<tr><td class="city_info">(.*?)市</td><td class="city_info">(.*?) (.*?)</td><td class="city_info">'
result = re.findall(pattern,t)
max_length = 0
for r in result:
max_length = max(max_length,search(r,result))
if max_length == 4:
break
return
main()
実行の様子。
釜石市の野田市長を探索中 ...
野田市の鈴木市長を探索中 ...
鈴木市は存在しないようです
二戸市の藤原市長を探索中 ...
藤原市は存在しないようです
八幡平市の田村市長を探索中 ...
田村市の本田市長を探索中 ...
本田市は存在しないようです
奥州市の小沢市長を探索中 ...
小沢市は存在しないようです
滝沢市の主濱市長を探索中 ...
主濱市は存在しないようです
仙台市の郡市長を探索中 ...
郡市は存在しないようです
石巻市の亀山市長を探索中 ...
亀山市の櫻井市長を探索中 ...
櫻井市は存在しないようです
塩竈市の佐藤市長を探索中 ...
佐藤市は存在しないようです
気仙沼市の菅原市長を探索中 ...
菅原市は存在しないようです
白石市の山田市長を探索中 ...
山田市は存在しないようです
名取市の山田市長を探索中 ...
山田市は存在しないようです
角田市の黑須市長を探索中 ...
黑須市は存在しないようです
多賀城市の深谷市長を探索中 ...
深谷市の小島市長を探索中 ...
小島市は存在しないようです
岩沼市の菊地市長を探索中 ...
菊地市は存在しないようです
登米市の熊谷市長を探索中 ...
熊谷市の富岡市長を探索中 ...
富岡市の榎本市長を探索中 ...
榎本市は存在しないようです
栗原市の千葉市長を探索中 ...
千葉市の熊谷市長を探索中 ...
熊谷市の富岡市長を探索中 ...
富岡市の榎本市長を探索中 ...
榎本市は存在しないようです
結果
もしループ構造がある場合、このコードだと無限ループを起こして無限行の出力が出されるはずですが、幸か不幸かそうはなりませんでした。最大の長さを調べてみると4個でした。6個ぐらい行くと思っていましたが、案外少ないものですね……。
ちなみに4個のラインは、冒頭にも示した粟原市→千葉市→熊谷市→富岡市ラインです。ただ、千葉市の熊谷俊人市長が県知事に立候補してたぶん確実に当選するでしょうからこのラインは崩壊することが予想されます。市長名ループ化の実現は遠そうです。
