Elixirを書いていると将棋が強くなります(新しいことをはじめよう)


(この記事は、「fukuoka.ex Elixir/Phoenix Advent Calendar 2019」の3日目です)
昨日はkikuyuta先生の「言語バトル時には秘匿しておきたい Elixir の急所」です!こちらもぜひぜひ!

はじめに

  • 12月3日 |> 123 |> ひふみ |> ひふみん |> 加藤一二三先生
  • ということで、Elixirを書いていると将棋が強くなる話をします
  • ポエムです
  • 私は加藤一二三先生と同じく1月1日生まれです
  • A Happy New Year!!!

結論

  • 伸び悩んでいることがありましたら、ちょっと方向の違う新しいことに取り組むと、脳の弱い部分が鍛えられてめぐりめぐって良い結果につがなるとおもいます
  • アルケミスト 夢を旅した少年 という本に通じる部分があるとおもいます
  • そして、Elixir の使い手のことをアルケミストと呼ばれるのはただの偶然ではないでしょう
  • I Was Born To Love Elixir!!!
  • We Are The Alchemists, my friends

私と将棋

  • 藤井聡太先生のデビュー戦、つまり対 加藤一二三先生戦が行われたのが2016/12/26です
    • ここから藤井聡太先生の29連勝が続きます
    • ちなみにこのカードはまったくの偶然できまったそうです
    • スターは生まれながらにしてスターなんだと改めて気付かされます
  • この藤井聡太先生のデビュー戦からさかのぼること、2016年8月に私は将棋を覚えました
    • そのとき私はもうすぐ40歳に手が届きそうな年齢になっていました
    • 私はまったく駒の動き方をしらない状態で、小学生の甥にコテンパンにやられました
    • おもしろさを感じたのでしょうか、腐らず強くなりたいというおもいを強くしました
  • 将棋ウォーズでおもにやっています
  • 3級で足踏みがつづきましたが、2級にあがったとおもったらすぐに1級になりました
  • この調子で初段もすぐかとおもいましたが、また足踏みが続いています
  • 戦法の本や詰将棋の本をやってみましたがなかなか光がみえません
  • そんなときに出会ったのがElixirです


- 10分-1級の達成率が0%で低迷していた時期がありましたがちょっと増えてきました

私とElixirとの出会い

ElixirConfJP 2019 小倉城

  • 2019/9/7 こちらにLT(Lightning Talks)枠で申し込みました
  • 案内に、国際の文字が見えたので、英語でやらんといけんのやろうとおもって、英語でLTをやりました
  • LT中、はじめと終わりにそれぞれ一節ずつ2曲歌いました
  • Elixir Newbieと題して以下の話をしました
    • I Was Born To Love Elixir.
    • |> この演算子いいよね(処理の順序とソースコードの記述順序が同じになる)
      • Elixirで書いたプログラムが美しいんですよね
    • Slackの絵文字ダウンロードはFlowって書くだけで3倍速くなるよ
    • How wonderful life is while Elixir is in the world.

一発屋で終わらないように

  • fukuoka.ex
  • kokura.ex
  • NervesJP
  • 清流elixir
  • エリジョ
  • これらの勉強会に参加させてもらっています
  • リモート(Zoom)での参加も可能なのでたいへん助かっています!
  • オーガナイザーのみなさま、ありがとうございます!

もくもく会にて

  • プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 という本の問題をElixirを使って書いています
  • たいていの問題はどこかに再帰を使うと解ける傾向にあるとおもいます
    • ただし模範解答はそこからもう一歩踏み込んで、再帰ではない解法が紹介されています
  • でもなんか再帰って好きなんですよ
  • 美しいんですよね
  • ただ、私は昔から再帰には苦手意識があってなかなか書けなかったんです
  • 憧れだけはずっともっていました
  • で、どういうわけだか不思議とElixirだと再帰のプログラムが書けるようになったんですね
    • 父がErlangで、母がRuby
    • といったあたりや、近年、私が仕事でRubyを使う機会が多かったことが挙げられるかもしれません
  • こうなると夢中になってElixirで解くんです
  • 制限時間20分とか関係ありません
  • 自慢する話じゃなく恥ずべきところですが3時間くらい粘ってあれこれ取り組んでいます
    • 長考です
  • いいんです! 自分との闘い!
lib/code_iq_17.exs
defmodule CodeIq17 do
  def order(list_of_lists, 0), do: list_of_lists

  def order(list_of_lists, n) do
    for(
      x <- list_of_lists,
      y <- [0, 1],
      z = Enum.at(x, -1, 1),
      (z == 0 && y == 1) || z == 1,
      do: x ++ [y]
    )
    |> order(n - 1)
  end
end
iex(1)> c "lib/code_iq_17.exs" 
iex(2)> CodeIq17.order([[]], 30) |> length
2178309

そろそろまとめます

まとめ

  • Elixirを書く時間を増やしたことで、将棋ウォーズでの成績が少し上向いてきています
  • 自分比ではありますが、詰将棋とか将棋ズバリそのものの勉強法を繰り返すより、ちょっとひねった刺激を脳に与えてあげたほうがよさそうです
    • 序盤・中盤・終盤だと、Elixir中盤 に効果があります(自分比です)
  • ということで、なにかに行き詰まったらちょっと新しいことをはじめてみてはいかがでしょう! という提案でございます
  • そのちょっと新しいことというのが私にとっては、Elixirだったわけです
  • とにかくやってみる、ゼロと踏み出した一歩では大違い、アルケミスト 夢を旅した少年という本に通じる部分があるとおもっています
  • I Was Born To Love Elixir!!!
  • We Are The Alchemists, my friends

中盤つよくなったよ!

  • 最近のとある一局のみの解析結果です
    • この一局に限っていえば序盤・中盤はかなりの強豪だったようです
    • ただ終盤がおそまつで、総合棋力は4.19級という体たらく
  • 序盤・中盤でリードして終盤、本当は渡しちゃいけない駒を調子に乗って渡してしまっていて、相手の方に長手数の詰めがあった展開だったのだとおもいます
    • ただ私の感覚(レベル)では一度もピンチだとおもった場面はありませんでした
  • 素人どうしで同じくらいの手合いですと断然攻めているほうが有利な傾向にあるとおもいます
  • 攻められているほうは一旦守勢にはいると受けの手しかささなくなるみたいな
    • 私もそうです
    • だから意識して、私は劣勢のときには、王手がかからなくなった瞬間にとりあえず思い出王手をするようにしています
    • だいたいそのまま負けますけど、勝ちを拾うこともあります
    • どうせ負けなら華々しく散りたいとおもっています
  • この将棋は序盤から中盤での優勢をそのまま勝利につなげられたのだとおもいます

追伸

次回

次回はhisawayさんの「Elixirでコード変換してみよう」です!こちらも是非どうぞ~