先手は豊島。最近、実力が高いレベルで安定してきた感がある。
後手は畠山。攻め将棋だが、インタビューでは闘争心という言葉を出していた。
△84歩から角換わりに。相腰掛け銀。
後手の△65歩はよくある筋だが、▲45歩とこちらも位を取るのは見慣れない形。
これでどうやって先手は手を作るのかと思っていたら、後手から△44歩の反発!
先手の打開の仕方を見たかったので、その意味では少しがっかりしたが、
闘争心がむき出しになった、畠山らしい手だとも思った。
しかし、この棋風で角換わり後手をやると、(勝敗で)かなり損してそうに思うが…。
▲44同歩△同銀に▲25歩△43金右。
ここで先手は飛先交換ができる。しかしスルーで▲88玉と入る。
そしたら後手は△33銀と引いて飛先を受けた。
つまり、先手79玉型なら飛先交換されても後手44銀を生かした攻めが成立した?
4筋の歩を、お互い手持ちにしているという将棋。豊島は▲75歩。
解説で、パスのような手と言われた。なるほど後手は動かす駒がない。
実戦は△64角だった。これもなるほどという手。
が、▲74歩〜▲41角がある。74の地点を受けても、▲65銀(!)という強手が。
ここ、畠山の指し手や時間の使い方は、明らかに変調を思わせた。
畠山は、歩を突き捨てたり、歩を打ったり。かなり辛(つら)そうに見えた。
悪く言えば、苦し紛れの歩。
一方の豊島は、優勢になっても細かく時間を使い丁寧に局面を進めていく。
時間の使い方も冷静で、ちょっと豊島は強すぎると思った。
ただ、意外と長引いている。もっと、後手がどんどん酷くなる将棋かと思っていた。
後手は飛車が受けに利いている。角を入手しての△63桂で、実戦的には先手もイヤだ。
△42飛も、今度はタテの防御と△49飛成を見せてなかなか。
後手が、歩と桂で作った拠点から、馬を消して成桂を残したのはすごかった。
ずいぶん強欲だなあと思っていたのだが、それがわりと通ってしまった感がある。
玉の堅さが完全に逆転していて、これは後手いけるかもと思った。
ただ、駒損で攻め駒が少なく、後手が切れそうではあった。
両者、歩を使った応酬。畠山の歩は怪しく、豊島の歩はわかりやすい。
豊島、慌てた感じで▲75金。後手は角を取られずに詰めろが続けばいいが、という解説。
この解説は、角の守りがなくなると後手玉は詰むという意味だったかな。
ここで、なのかどうかはわからないが、一気に逆転。
端を突かれてどうしようもなくなり、△77同成桂に豊島が投了。
勝った畠山は、疲弊した感じのため息。
「勝った方が激しく消耗している」を、3月のライオンで数年前に読んで以来、初めて見た。
後手がよくなったのは本当に最後のほうだろうから、ちょっと意味は違うけど。
結果を知ってから棋譜を見返しても、畠山の歩は苦し紛れとしか思えないのだが、
それでも、その歩で、離されずに付いて行って、最後は追い抜いた。
相手の攻めで駒を入手し、安い駒でしつこく食らいついて、それを通した。
この畠山の攻めは感動的だった。
ゆるゆり♪♪(9/10)
ラス前。
本当の最終回は全員集合で暴れる必要があるので、ここで最終回っぽいことをする。
タイムマシンが出てくる。1期のBGMを使うのが、好きなタイプの演出。
あかりはずっと1年生でも、1年という時間はちゃんと表現できるんだなあ。
オチはあれだが、京子の創作というより、パラレルワールドと捉えるべきだろう。
EDがよかった。今回はOPがなかったので、EDが2期のよさを象徴する存在になっている。
今期は本当に面白い話が多く、ラス前とラストは、はなから期待していない。
中だるみがなく、1クールの中央部分で楽しむシリーズだ。
多重forは再帰で書ける
(追記)
AtCoderのABC165のC問題を再帰と多重forで解いた。
・再帰
https://atcoder.jp/contests/abc165/submissions/12674026
・多重for
https://atcoder.jp/contests/abc165/submissions/12686227
(追記ここまで)
C++で、1〜4の数字を1回ずつ使った4桁の数を出力する。
const int N = 4; void hoge1() { int p[N] = {}; for (int i4 = 0; i4 < N; i4++){ if (p[i4]) continue; p[i4] = 1; for (int i3 = 0; i3 < N; i3++){ if (p[i3]) continue; p[i3] = 1; for (int i2 = 0; i2 < N; i2++){ if (p[i2]) continue; p[i2] = 1; for (int i1 = 0; i1 < N; i1++){ if (p[i1]) continue; printf("%d\n", (i4+1)*1000 + (i3+1)*100 + (i2+1)*10 + (i1+1)); } p[i2] = 0; } p[i3] = 0; } p[i4] = 0; } }
この4重のfor文は、読みにくいわけではないが、書くのが面倒だ。
また、Nを4から5に変更したいときにも、手間がかかる。
そこで、再帰を使って書き直す。
const int N = 4; void fuga(int _d) { static int p[N] = {}, q[N]; int d = _d - 1; for (int i = 0; i < N; i++){ if (p[i]) continue; q[d] = i + 1; if (d == 0){ printf("%d\n", q[3]*1000 + q[2]*100 + q[1]*10 + q[0]); continue; } p[i] = 1; fuga(d); p[i] = 0; } } void hoge2() { fuga(N); }
以下が出力。hoge1()とhoge2()は同じものを出力する。
1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321