mike-neckのブログ

Java or Groovy or Swift or Golang

第96回箱根駅伝予選会のデータを勝手に分析してみた

先週末くらいに箱根駅伝の予選会があったようで、いろいろな実況ツイートが先週末流れていました。

その中で気になったのは以下のようなツイートたちです

前者は統計とか中央値とか人間騙されやすいよねという興味と麗澤大学で模擬試験とか受けたなーという記憶からの興味、後者は山梨学院大学が全盛期の時代を知っているおっさんにとって感慨深いという興味から気になりました。


さて、ここでは前者の様子を可視化してみようと思います。なお、この記事ではデータとグラフの傾きしか見てないので言っていることが非常に偉そうに見えます。すみません。

具体的には以下のデータをプロットします。

  • 各チーム上位10人のデータをタイムの良い順にソートする
  • 予選通過ラインの 10:57 を 10 で割った値(1:05:42) を基準タイムとして、各ランナーのタイムと基準タイムの差分を積み上げていく
  • 横軸は各チーム内での順位
  • 縦軸は差分タイムの積み上げ

これを予選通過ライン上の数校(以下の5校) + 1位 + 山梨学院大学 でプロットしてみました。

f:id:mike_neck:20191105103049p:plain

グラフで右上に上がっていく場合は、 n 番目のランナーは予選通過ラインの個人タイム(1:05:42)よりもよいタイムで走っていることを表します。逆に右下に下がる場合は予選通過ラインの個人タイムよりも悪いタイムで走っていることを表します。また、チームの10人通過順位とはグラフ上の x = 9 の点から x = 10 の点の傾きの値を表します(傾きが大きい値のほうがよいタイム、多くの場合は傾きはマイナスになっているので、水平に近いほうが10人通過順位が速いことになります)。

このグラフから…

  • 東京国際大学はさすが1位だけあって、チーム内8位くらいまでのランナーが 1:05:42 よりも速いタイムで走っていて、かつ、10人の中で大きく崩れている選手もいません。
  • 中央大学は4番手までの選手はいいのですが、それ以降の選手が伸びてくれていません。その結果7番手の選手で早稲田大学に追いつかれて、8番手で逆転されています。
  • 上武大学は1〜3番手までの選手はよいですが、4番、5番手の選手と力の差がありそうです。また、4番、5番手以降の選手がさらに力不足のようで、右肩下がりなグラフになっています。
  • 山梨学院大学は2番手の選手ですでに予選通過ライン上のタイムになってしまっているので、全体的に厳しい状況になっています。
  • 早稲田大学麗澤大学は非常によく似た傾向を示していて、6〜7番手の選手までが予選通過ラインのタイムとほぼ同じか若干速いタイムで走っています。選手層が厚いチームと言えます。では麗澤大学早稲田大学との違いですが、早稲田大学麗澤大学の差は1番手の差をずっとキープしている状態ですので、エースの有無が最終的な結果にあらわれたと言えそうです。もちろん駅伝なので、選手層をさらに厚くすることでも解決できますし、参加できなかったエースの回復によっても解決可能だと思います。

以上、趣味に全振りしたエントリーでしたが、プロット画像やデータの取得は Go 言語でやってみました。コードはこちら。

github.com

箱根駅伝というか関東学連箱根駅伝予選会の結果データをテキストファイルとかjsonなどという気の利いた形式ではなく、 PDF という残念な形式で配布していますので、以下の PDF のライブラリーを使いました。

github.com

これのフォーク元の rsc/pdf というのを最初使ったのですが、怪しい挙動だった(リソースの Close もれがあるっぽい)ので、フォークされたこちらを使ってみました。

グラフ画像の作成はこちらを使いました。

github.com


おわり

Goland でテストを実行したら、 他のファイルにある型について undefined となる場合の対処

Goland でテストを実行しようとしたときにテストファイルとは異なるプロダクションファイルにある型について、 undefined となってテスト実行できない場合の対処。日本語の記事が見つからなかったので書いた。

f:id:mike_neck:20191029232756p:plain

続きを読む

雑学 - パラメーターの個数は254個まで

調べたら 254 個までだった。

パラメーター 254

jshell> interface StrFun254 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,String arg13,String arg14,String arg15,String arg16,String arg17,String arg18,String arg19,String arg20,String arg21,String arg22,String arg23,String arg24,String arg25,String arg26,String arg27,String arg28,String arg29,String arg30,String arg31,String arg32,String arg33,String arg34,String arg35,String arg36,String arg37,String arg38,String arg39,String arg40,String arg41,String arg42,String arg43,String arg44,String arg45,String arg46,String arg47,String arg48,String arg49,String arg50,String arg51,String arg52,String arg53,String arg54,String arg55,String arg56,String arg57,String arg58,String arg59,String arg60,String arg61,String arg62,String arg63,String arg64,String arg65,String arg66,String arg67,String arg68,String arg69,String arg70,String arg71,String arg72,String arg73,String arg74,String arg75,String arg76,String arg77,String arg78,String arg79,String arg80,String arg81,String arg82,String arg83,String arg84,String arg85,String arg86,String arg87,String arg88,String arg89,String arg90,String arg91,String arg92,String arg93,String arg94,String arg95,String arg96,String arg97,String arg98,String arg99,String arg100,String arg101,String arg102,String arg103,String arg104,String arg105,String arg106,String arg107,String arg108,String arg109,String arg110,String arg111,String arg112,String arg113,String arg114,String arg115,String arg116,String arg117,String arg118,String arg119,String arg120,String arg121,String arg122,String arg123,String arg124,String arg125,String arg126,String arg127,String arg128,String arg129,String arg130,String arg131,String arg132,String arg133,String arg134,String arg135,String arg136,String arg137,String arg138,String arg139,String arg140,String arg141,String arg142,String arg143,String arg144,String arg145,String arg146,String arg147,String arg148,String arg149,String arg150,String arg151,String arg152,String arg153,String arg154,String arg155,String arg156,String arg157,String arg158,String arg159,String arg160,String arg161,String arg162,String arg163,String arg164,String arg165,String arg166,String arg167,String arg168,String arg169,String arg170,String arg171,String arg172,String arg173,String arg174,String arg175,String arg176,String arg177,String arg178,String arg179,String arg180,String arg181,String arg182,String arg183,String arg184,String arg185,String arg186,String arg187,String arg188,String arg189,String arg190,String arg191,String arg192,String arg193,String arg194,String arg195,String arg196,String arg197,String arg198,String arg199,String arg200,String arg201,String arg202,String arg203,String arg204,String arg205,String arg206,String arg207,String arg208,String arg209,String arg210,String arg211,String arg212,String arg213,String arg214,String arg215,String arg216,String arg217,String arg218,String arg219,String arg220,String arg221,String arg222,String arg223,String arg224,String arg225,String arg226,String arg227,String arg228,String arg229,String arg230,String arg231,String arg232,String arg233,String arg234,String arg235,String arg236,String arg237,String arg238,String arg239,String arg240,String arg241,String arg242,String arg243,String arg244,String arg245,String arg246,String arg247,String arg248,String arg249,String arg250,String arg251,String arg252,String arg253,String arg254); }
   ...> 
|  次を作成しました: インタフェース StrFun254

パラメーター 255

jshell> interface StrFun255 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,String arg13,String arg14,String arg15,String arg16,String arg17,String arg18,String arg19,String arg20,String arg21,String arg22,String arg23,String arg24,String arg25,String arg26,String arg27,String arg28,String arg29,String arg30,String arg31,String arg32,String arg33,String arg34,String arg35,String arg36,String arg37,String arg38,String arg39,String arg40,String arg41,String arg42,String arg43,String arg44,String arg45,String arg46,String arg47,String arg48,String arg49,String arg50,String arg51,String arg52,String arg53,String arg54,String arg55,String arg56,String arg57,String arg58,String arg59,String arg60,String arg61,String arg62,String arg63,String arg64,String arg65,String arg66,String arg67,String arg68,String arg69,String arg70,String arg71,String arg72,String arg73,String arg74,String arg75,String arg76,String arg77,String arg78,String arg79,String arg80,String arg81,String arg82,String arg83,String arg84,String arg85,String arg86,String arg87,String arg88,String arg89,String arg90,String arg91,String arg92,String arg93,String arg94,String arg95,String arg96,String arg97,String arg98,String arg99,String arg100,String arg101,String arg102,String arg103,String arg104,String arg105,String arg106,String arg107,String arg108,String arg109,String arg110,String arg111,String arg112,String arg113,String arg114,String arg115,String arg116,String arg117,String arg118,String arg119,String arg120,String arg121,String arg122,String arg123,String arg124,String arg125,String arg126,String arg127,String arg128,String arg129,String arg130,String arg131,String arg132,String arg133,String arg134,String arg135,String arg136,String arg137,String arg138,String arg139,String arg140,String arg141,String arg142,String arg143,String arg144,String arg145,String arg146,String arg147,String arg148,String arg149,String arg150,String arg151,String arg152,String arg153,String arg154,String arg155,String arg156,String arg157,String arg158,String arg159,String arg160,String arg161,String arg162,String arg163,String arg164,String arg165,String arg166,String arg167,String arg168,String arg169,String arg170,String arg171,String arg172,String arg173,String arg174,String arg175,String arg176,String arg177,String arg178,String arg179,String arg180,String arg181,String arg182,String arg183,String arg184,String arg185,String arg186,String arg187,String arg188,String arg189,String arg190,String arg191,String arg192,String arg193,String arg194,String arg195,String arg196,String arg197,String arg198,String arg199,String arg200,String arg201,String arg202,String arg203,String arg204,String arg205,String arg206,String arg207,String arg208,String arg209,String arg210,String arg211,String arg212,String arg213,String arg214,String arg215,String arg216,String arg217,String arg218,String arg219,String arg220,String arg221,String arg222,String arg223,String arg224,String arg225,String arg226,String arg227,String arg228,String arg229,String arg230,String arg231,String arg232,String arg233,String arg234,String arg235,String arg236,String arg237,String arg238,String arg239,String arg240,String arg241,String arg242,String arg243,String arg244,String arg245,String arg246,String arg247,String arg248,String arg249,String arg250,String arg251,String arg252,String arg253,String arg254,String arg255); }
   ...> 
|  エラー:
|  パラメータが多すぎます
|  interface StrFun255 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,String arg13,String arg14,String arg15,String arg16,String arg17,String arg18,String arg19,String arg20,String arg21,String arg22,String arg23,String arg24,String arg25,String arg26,String arg27,String arg28,String arg29,String arg30,String arg31,String arg32,String arg33,String arg34,String arg35,String arg36,String arg37,String arg38,String arg39,String arg40,String arg41,String arg42,String arg43,String arg44,String arg45,String arg46,String arg47,String arg48,String arg49,String arg50,String arg51,String arg52,String arg53,String arg54,String arg55,String arg56,String arg57,String arg58,String arg59,String arg60,String arg61,String arg62,String arg63,String arg64,String arg65,String arg66,String arg67,String arg68,String arg69,String arg70,String arg71,String arg72,String arg73,String arg74,String arg75,String arg76,String arg77,String arg78,String arg79,String arg80,String arg81,String arg82,String arg83,String arg84,String arg85,String arg86,String arg87,String arg88,String arg89,String arg90,String arg91,String arg92,String arg93,String arg94,String arg95,String arg96,String arg97,String arg98,String arg99,String arg100,String arg101,String arg102,String arg103,String arg104,String arg105,String arg106,String arg107,String arg108,String arg109,String arg110,String arg111,String arg112,String arg113,String arg114,String arg115,String arg116,String arg117,String arg118,String arg119,String arg120,String arg121,String arg122,String arg123,String arg124,String arg125,String arg126,String arg127,String arg128,String arg129,String arg130,String arg131,String arg132,String arg133,String arg134,String arg135,String arg136,String arg137,String arg138,String arg139,String arg140,String arg141,String arg142,String arg143,String arg144,String arg145,String arg146,String arg147,String arg148,String arg149,String arg150,String arg151,String arg152,String arg153,String arg154,String arg155,String arg156,String arg157,String arg158,String arg159,String arg160,String arg161,String arg162,String arg163,String arg164,String arg165,String arg166,String arg167,String arg168,String arg169,String arg170,String arg171,String arg172,String arg173,String arg174,String arg175,String arg176,String arg177,String arg178,String arg179,String arg180,String arg181,String arg182,String arg183,String arg184,String arg185,String arg186,String arg187,String arg188,String arg189,String arg190,String arg191,String arg192,String arg193,String arg194,String arg195,String arg196,String arg197,String arg198,String arg199,String arg200,String arg201,String arg202,String arg203,String arg204,String arg205,String arg206,String arg207,String arg208,String arg209,String arg210,String arg211,String arg212,String arg213,String arg214,String arg215,String arg216,String arg217,String arg218,String arg219,String arg220,String arg221,String arg222,String arg223,String arg224,String arg225,String arg226,String arg227,String arg228,String arg229,String arg230,String arg231,String arg232,String arg233,String arg234,String arg235,String arg236,String arg237,String arg238,String arg239,String arg240,String arg241,String arg242,String arg243,String arg244,String arg245,String arg246,String arg247,String arg248,String arg249,String arg250,String arg251,String arg252,String arg253,String arg254,String arg255); }
|                        ^------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
|  次を作成しました: インタフェース StrFun255。しかし、このエラー(
|      パラメータが多すぎます
|      interface StrFun255 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,String arg13,String arg14,String arg15,String arg16,String arg17,String arg18,String arg19,String arg20,String arg21,String arg22,String arg23,String arg24,String arg25,String arg26,String arg27,String arg28,String arg29,String arg30,String arg31,String arg32,String arg33,String arg34,String arg35,String arg36,String arg37,String arg38,String arg39,String arg40,String arg41,String arg42,String arg43,String arg44,String arg45,String arg46,String arg47,String arg48,String arg49,String arg50,String arg51,String arg52,String arg53,String arg54,String arg55,String arg56,String arg57,String arg58,String arg59,String arg60,String arg61,String arg62,String arg63,String arg64,String arg65,String arg66,String arg67,String arg68,String arg69,String arg70,String arg71,String arg72,String arg73,String arg74,String arg75,String arg76,String arg77,String arg78,String arg79,String arg80,String arg81,String arg82,String arg83,String arg84,String arg85,String arg86,String arg87,String arg88,String arg89,String arg90,String arg91,String arg92,String arg93,String arg94,String arg95,String arg96,String arg97,String arg98,String arg99,String arg100,String arg101,String arg102,String arg103,String arg104,String arg105,String arg106,String arg107,String arg108,String arg109,String arg110,String arg111,String arg112,String arg113,String arg114,String arg115,String arg116,String arg117,String arg118,String arg119,String arg120,String arg121,String arg122,String arg123,String arg124,String arg125,String arg126,String arg127,String arg128,String arg129,String arg130,String arg131,String arg132,String arg133,String arg134,String arg135,String arg136,String arg137,String arg138,String arg139,String arg140,String arg141,String arg142,String arg143,String arg144,String arg145,String arg146,String arg147,String arg148,String arg149,String arg150,String arg151,String arg152,String arg153,String arg154,String arg155,String arg156,String arg157,String arg158,String arg159,String arg160,String arg161,String arg162,String arg163,String arg164,String arg165,String arg166,String arg167,String arg168,String arg169,String arg170,String arg171,String arg172,String arg173,String arg174,String arg175,String arg176,String arg177,String arg178,String arg179,String arg180,String arg181,String arg182,String arg183,String arg184,String arg185,String arg186,String arg187,String arg188,String arg189,String arg190,String arg191,String arg192,String arg193,String arg194,String arg195,String arg196,String arg197,String arg198,String arg199,String arg200,String arg201,String arg202,String arg203,String arg204,String arg205,String arg206,String arg207,String arg208,String arg209,String arg210,String arg211,String arg212,String arg213,String arg214,String arg215,String arg216,String arg217,String arg218,String arg219,String arg220,String arg221,String arg222,String arg223,String arg224,String arg225,String arg226,String arg227,String arg228,String arg229,String arg230,String arg231,String arg232,String arg233,String arg234,String arg235,String arg236,String arg237,String arg238,String arg239,String arg240,String arg241,String arg242,String arg243,String arg244,String arg245,String arg246,String arg247,String arg248,String arg249,String arg250,String arg251,String arg252,String arg253,String arg254,String arg255); }
|                            ^------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^)が修正されるまで、参照できません

これは JVM 仕様により規定されているっぽい(https://docs.oracle.com/javase/specs/jvms/se12/html/jvms-4.html#jvms-4.3.3)。また、 javac では、これをコンパイルエラーにしている。


なお、このエラーになるパラメーターの数を調べたあとに、 jshell を終了すると例外が発生した

jshell> /exit
|  終了します
Exception in thread "main" java.lang.IllegalArgumentException: Value too long: interface StrFun1024 { String apply(String arg1,String arg2,String arg3,String arg4,String arg5,String arg6,String arg7,String arg8,String arg9,String arg10,String arg11,String arg12,String arg13,String arg14,String arg15
…途中省略…
ring arg1007,String arg1008,String arg1009,String arg1010,String arg1011,String arg1012,String arg1013,String arg1014,String arg1015,String arg1016,String arg1017,String arg1018,String arg1019,String arg1020,String arg1021,String arg1022,String arg1023,String arg1024); }
    at java.prefs/java.util.prefs.AbstractPreferences.put(AbstractPreferences.java:253)
    at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder$PreferencesStorage.put(JShellToolBuilder.java:293)
    at jdk.jshell/jdk.internal.jshell.tool.ConsoleIOContext.close(ConsoleIOContext.java:240)
    at jdk.jshell/jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:977)
    at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder.start(JShellToolBuilder.java:254)
    at jdk.jshell/jdk.internal.jshell.tool.JShellToolProvider.main(JShellToolProvider.java:120)