【World of Warships】フランス戦艦について
お船のブログ用のはてなアカウントを作ったのでそちらに記事を移行しました。
刷新後の対空の雑感を含め、新たな要素を多少追加して少しずつ表現をより適切なものに変えておりますのでそちらをぜひご覧ください。
まえがき
このブログにWorld of Warshipsの話を書くのは初めてなので一応このような前書きを書きます。WoWS、楽しいので皆さんもぜひ。
先日フランス戦艦ブランチを遂に登り切り、Tier10のRepubliqueを手に入れましたので、その記念と今何のツリーを勧めようか悩んでいらっしゃる方へ仏戦をお勧めする目的でこの記事を書きます。Wikiに書いていないことをかけていけたらなと思います。
フランス戦艦ブランチ
仏戦は18年3月のバージョン0.7.2より実装されたブランチ。(私はEarly AccessによりTier6 Normandie以降しか乗っていません。)まずは全体的な特徴を5つまとめておく。
全体的な特徴
1.足が速い。
2.火力が高い。
3.装甲がよわい。(特にHE弾に弱い。)
4.対空が高い。(※Tier7以降は)
5.(際立った)苦行艦がない。
一般論を述べても仕方がないので、一つ一つ見ていきます。くどくどと長い文章を書きますが、プレイしながら思ったことなので皆さんにとって有用だといいな。
※以降のスクショは公式からの引用か、私のSS。
Tier6 Normandie
・主砲
主砲は45口径340mm4連装砲が3基12門(ちなみにT7 Lyonも同じ砲塔)となっており、同格のNew Mexicoや扶桑と門数では並んでいる。しかし口径が340mmで、火力においては若干劣る。とはいえ、AP弾の25mmへの強制貫通がないという点ではNew Mexicoや扶桑と同じなので巡洋艦狩りについてはそこまで問題なく行える性能であると言える。お世辞にも精度がいいと言える性能ではないが、このTierでは事情は他国も変わらない。ちなみに見ればわかるが、1番2番は前方周回、3番が後方周回。引き撃ちをやりにくいのが辛い。
特筆したいのはAP弾ではなくHE弾。AP弾の弾速が780m/sなのに対し、HE弾の弾速は921m/sと戦艦砲最速を誇る。火災発生率は26%と口径相応程度だが、この弾速から来る当てやすさは非常に信頼できる。340mmのHE弾は56mmまでの装甲を貫通できるため、特に遠距離の戦艦に対しては、精度も貫通力もないAP弾を撃つよりレーザービームHE弾を撃ち込んだ方がベター。(ちなみに私はこの主砲で戦艦のバイタルを抜いたことはない。)(弾速が140m/sも違うので偏差のずれには注意。)
・機動性
Normandieを語るうえで外せないのが圧倒的な機動性だと思う。11万2000馬力というこのTier帯としてはOPなエンジン(金剛は13万だけど)を積んでおり、最高速度は29.5knot(金剛は30knotだけど)に達します(おのれ金剛)。旋回半径も640mと小さく、加減速も良好な性能を持つ。長射程と高機動性、超速HE弾を使って敵戦艦を燃やし、たまに巡洋艦を強襲しろという事だろうか。(こなみかん)
・装甲、抗堪性
抗堪性は同格最低レベル。HPはTier5のNew Yorkを下回り、とても十分とは言えないが、こればっかりはどうしようもないので、味方の戦艦とかにヘイトを押し付けるなり、頑張って回避するなりしよう。
(バイタル周りの)装甲は悪くない。(多分)ドイツ戦艦ほど凶悪ではないが、タートルバック2重装甲を施してあり、真横からの砲弾に対しては240mm+70mm+20mm=330mmで防いでくれる。とはいえ、戦艦の砲撃を真横で受けると当然のようにぶち抜かれる。
問題はHE弾に対する防御で、甲板のかなりの部分が25mmで最大でも30mmしかなく、8inch HEや6inch IFHEは勿論、6inchHEも25mmの装甲を貫通できるので、巡洋艦に一方的に打たれる状況はヤバい。
最後に対水雷防御だが、13%とゴミ同然。観測機や戦闘機は無いので駆逐艦の位置を常に意識し魚雷を常に警戒しよう。同格以上の魚雷が3本当たれば確実に死ぬ。どうしても事故が多い時は他艦種と分隊を組もう。
・対空
長らくTier6対空最弱Shipは扶桑安定だったが、ついに彼女がその座を明け渡す時が来た。扶桑の対空は最終船体で121だが、それを大きく突き放す51というどうしようもない値になってしまっている。味方と行動を共にし、可能なら巡洋艦と分艦隊を組もう。
・総評
空母とのマッチングも多いこのTierで無に等しいこの対空はかなり厳しいものがあるが、それ以外の性能はそれなりにバランスよくまとまったいい船だと思う。
・推奨UG:主兵装、ダメコン1、射撃システム1、ダメコン2or推力2
スロット3について
他の戦艦と同様にダメコン2で良いが、エンジンがヤバくて加速もキビキビなので推力で強化するのもありかも。(やったことないが)
・推奨Skill:察知、アドレナリンor熟練砲手、管理、隠蔽(10p)
level.2スキルについて
NormandieとLyonは主砲旋回が遅いので熟練砲手はアリ。しかしTier8以降ではクルックルなので不要になる。NormandieとLyonを耐え抜けばあとは十分快適になるのでどうするか悩むところ。私は熟練を取ってLyonまで使い、Richelieuで14pになってから振りなおした。
・モジュール改修順序:船体→射撃管制→エンジン
HPが低いので船体を最優先。そこそこ長い射程を持つので射撃管制でそれを伸ばそう。エンジンは素でも28knot出るので後回し。
・シナリオ運用について
速力と射程が良いので戦線展開には苦労しない。ただし対空がほぼ0で耐久性も高いわけではないので、被弾盾に向いているとは言えない。私は巡洋艦(旧Cleveland、Bbudyonny)でシナリオに出ることが多くて、対空の重要性を過大に評価してしまっているかもしれないが、戦艦の対空はそこまで重要じゃないのかもしれない。まあTier6のシナリオは巡洋艦が無双すれば大体クリアできるのでランダム戦が息苦しく感じたり、モジュールの改装が終わってないときはシナリオで乗るのもアリだと思う。
Tier7 Lyon
Tier7は長門やColoradoなどの16inchクラスの砲を搭載し始める船もあり、一撃の重さに磨きがかかってくるが、Lyonは手数の多さで勝負していく船。
・主砲
主砲の諸元はほぼ変化ないが、砲塔が1基増え、片弦指向門数が16門とゲーム内最多になった。まさしくショットガンという形容が正しい弾の飛び方で、巡洋艦には回避不能な一撃を食らわせ、戦艦には一度に複数火災を起こすことが可能。ダメージが低いとはいえこれだけの砲を近距離で腹を向けている船に撃てばただではすまない。駆逐に対しても相当削ることができるので見つけたら撃っていこう。
細かい取り回しは悪化しており、旋回時間が50秒を超えるので熟練砲手があった方が良いかもしれないレベル。射程も18.6キロと1キロ以上短くなっている。射界の悪さは変化ないが、真後ろに2基撃てるので引き撃ちは多少やりやすい。
・機動性
単純にNormandieの船体に主砲を1基追加しただけの船なのでその分旋回半径(長くなったので)と最高速度(重くなったので)が落ちたという感じ。とはいえ同格の中で27knotは悪い数字ではない。
・装甲、抗堪性
Normandieと全く同じ。AP弾にはそこそこ耐え、HE弾と魚雷に弱い。
・対空
前級は悲惨な対空だったが、Lyonは打って変わって最終船体で368という最大秒間ダメージを手に入れ、グナイゼナウに迫る対空になる。空母のお供もそこそここなせるはず。(やったことないけど)
・総評
全体的にNormandieの船体に砲塔を1基追加したから、という感じがにじみ出る。とはいえ16門の斉射の威力は凄まじく、艦種関係なく腹を晒す船は瞬殺できる。OP。
スロット3について
前級は主機がハイパワーだったので推力改良2も選択肢だったが、こいつは普通になった。なのでダメコン2で良い。
・推奨Skill:察知、熟練砲手orアドレナリン、管理、隠蔽(10p)
level.2スキルについて
Tier6よりさらに主砲旋回が遅くなっていて50秒を超えるので、熟練砲手が欲しくなる。
・モジュール改修順序:船体→射撃管制→エンジン
HPが低いので船体を最優先。未改装時の射程は17キロを切って辛いので射撃管制が二番目。エンジンは、26knotでないけど、仕方ないね。Tier7だし、そこまで時間もかからないだろうからそこまで問題ではない。
・シナリオ運用について
本艦を使えるシナリオは極限の最前線とエルメス。
まずは極限の最前線について。私はAtlanta以外で参加したことがないが、強いLyonが居るととてもスムーズだった。低Tierで比較的軽装甲の艦をサクサク処理していくというシナリオ(最後のNC、Alabama除く)なので、DPMは高いが口径が小さく重装甲の相手が苦手なLyonにとっては稼ぎやすいシナリオ。終盤、敵のラッシュが来るときまでは回復ポジで撃ちまくる巡洋艦にヘイトを買ってもらっていても良いが、最後のラッシュでは戦艦がタンクをしないと無理なので要塞のヘイトを買おう。修理班と残HPを使いきって沈むか沈まないかクリアするぐらいがベスト。ちなみにAtlantaがヤバいぐらい強いシナリオ(私の最高与ダメは21万。常に12万ぐらいは出る。)なので、奴に沈まれないように守ってあげよう。分艦隊を組もう。
エルメスについて。ハンパないDPM(DPMだけ見ればRichelieuの1.5倍以上)はエルメスでも当然有効。駆逐をいかに早く潰すかが勝利のカギとなるシナリオなので、駆逐を最優先で撃て。このシナリオもAtlantaなど課金CLはアホ強いので守ってあげよう。最後、Graf Zeppelinを殺せるのは戦艦ぐらいしかいないので、敵駆逐のラッシュにケリが付いたら、狙おう。駆逐艦を狙うときはHE弾ではなく、AP弾を使ったほうがいいと思う。HE弾は部位HP0になっていたらダメージ半減+艦全体HPも0ならダメージなしなので瀕死で残ったりする。APの過貫通は当たりさえすれば950ダメージ必ず出る。
Tier8 Richelieu
ウォォォーーーカックイーーーーー!!
・主砲
380mm45口径4連装砲を前部集中配置で2基8門搭載している。380mmという口径は独戦Bismarck級と同じで、NCや天城にはかなり劣るが弾速が830m/sとかなり速く、遠距離での貫通力は天城を上回り同格ツリー艦トップ。しかし小口径高速AP弾の宿命である強制貫通のなさには苦しめられることになる。強制貫通は26mmまでであり、T8以降のアメリカ巡洋艦やドイツ巡洋艦に艦を立てられると何もできない。特にRoonとHindenburgに対しては、腹を見せてくれていても喫水が低い+装甲がタートルバックで厚いのでなかなかダメージが入らない。(私の腕の問題という説はある。)後述の抗堪性も相まって、RoonとHindenburgは天敵。
この高初速低弾道のAP弾にはさらに問題点があり、貫通力が高すぎるのか10キロ以下で完全に腹を晒している巡洋艦のバイタルを過貫通してしまう。私のガバガバ検証では、特に同格以下の日巡に対して顕著に現れるような気がする。多少角度が付く(ガバガバ検証によると45度程度だと普通に問題ない)とバイタルに砲弾がとどまってくれるようなので、「最上、愛宕などとヘッドファイトするときはHEを使え」という事ではない。巡洋艦が隙を晒すのは一瞬なので、焦って撃ち込まず、絶好のタイミングを見計らおう。
・副砲
100mmと152mmを積んでいる。素の射程が7キロと優秀で、この後のTierでも副砲はアホほど強力なので強化する価値はある。(先に隠蔽は取ろう。)
・機動性
最高速度はブランチ最高に達し、さらにエンジンブーストも解禁される。エンジンブーストは最大船速を+8%するだけでなく、加減速への応答がかなりスムーズになるので遠距離の戦艦の砲撃を見てからエンジンブースト起動+フルスロットルで急所を外すといったこともできたりする。
NC、天城と比べて舵も2秒ほどよく、本当に文句のつけどころのない性能だと乗りながら思った。
・装甲、抗堪性
中途半端なタートルバック装甲は健在で、腹を向けていなければまず抜かれることはない。ただし船体は全身32mmで、大和武蔵砲をはじける要素はない。(他国も事情は同じですね。)大和級と至近距離で下がれない状況になったとき、真正面を向けるよりは軽く斜めに受けるようにするとバイタルに届きにくくなるので意識すると良いかも。
HE弾への弱さもやはり健在で、Hindenburg、蔵王、Des moinesに燃やし続けられると成す術がない。その場合は自慢の速力を活かして逃げよう。
一応、HPはNCや天城より3000、Bismarckに対して6000ほど劣るが、そこまで気になる値ではないというのが乗ってみた感想。
水雷防御は35%、Alabama(50)や天城(43)ほどではないが、そこそこ耐える。普通レベル。
・対空
秒間ダメージは462と順当に強化され、そこそこ自衛が可能。流石にNCやAlabamaほどは無いので過信は禁物。対空特化もなしではないが、上級取るぐらいでやめとくのが吉。
・総評
ちょっと主砲は欠点が多いですが、それでも高初速低弾道高貫通力なので腹を見せている船には艦種関係なく刺さる優秀な砲。そして完全な防御姿勢で全火力を指向できるメリットは計り知れないものがある。(頭を向けてタンクになれという意味ではないので誤解のないよう。)他国のTier8の戦艦は全火力を指向するために30度以上傾ける必要があり、近距離のタイマンでそのような状況になった場合相手を完封することも可能。(純タイマンに持ち込めないのであればやめておこうな。)
装甲の薄い天城紀伊、ゆるふわ弾道のNCとAlabama(エアプ)、生存性が低すぎるMonarch(エアプ)、主砲がガバで貫通力もないBismarck(エアプ)という微妙な船の集まる(諸説あり)Tier8の中では、かなり欠点の少ない良艦だと思う。(たぶんRomaの方が強いけど。Romaほしい。)
・推奨UG:主兵装、ダメコン1、射撃システムor副砲、ダメコン2、隠蔽
副砲はTier9、Tier10ともにドイツ戦艦を凌ぐほど強力なのでそれを伸ばして遊ぶのはアリ。私は両方試した結果、射撃システムにした。重要な場面でバイタルに正確な一撃を叩き込める能力はやはり重要。
・推奨Skill:察知、アドレナリン、管理、隠蔽、副砲指定、上級(18p)
副砲特化型。隠蔽を取ると海面発見距離が12.6キロとかなり良くなるので隠蔽を取って巡洋艦を強襲しろ。副砲遊びが楽しいので隠蔽の次は副砲、次が上級。
・モジュール改修順序:船体→エンジン→射撃管制
HPが低いので船体を最優先。未改修でも射程23キロ、速力30knotなので十分といえば十分。23キロ先の敵に撃ってもロクなダメージにならないので、エンジンの方が先かな?
・シナリオ運用について
使えるシナリオはエルメス。Lyonに比べてDPMが30%以上減でLyonほど使い物にならない。と公式Wikiには書いてあるが、私は十分強いと思っている。砲配置と優秀な旋回速度おかげで、いろんなところに出てくる敵に砲を向けるのは苦労しない。さらに副砲も対空も優秀で、Tier1のDB、TBがボロボロ落ちるし、副砲で火災を取りながら主砲でガッツリ削るという運用で中盤の戦艦が沸くところもめちゃくちゃ稼げる。私の最高与ダメは18万。精度が悪いが、近い駆逐艦が頭を向けていればAPが通常貫通になってワンパンで吹き飛ばせる。HEを撃つなAPでワンチャンを狙え。
Tier9 Alsace
ウオオオオーーーーーーーーーツエェェェェーーーーーーー!!!
・主砲
主砲の性能はTier8 Richelieuから変化なし。しかし後ろに1基追加され、12門の投射量を誇る!強い!
Tier8からTier9に上がるときの火力向上方法として今まであったのが、長砲身化して貫通力を上げる(天城→出雲、NC→Iowa)か、大口径化させて威力と貫通力を向上(Bismarck→FDG、Monarch→Lion)の2つだったが、もっと単純に「砲門数を増やす」という手を採ってきている。
12門による斉射の威力は凄まじく、腹を向けた戦艦ならバイタルに入らずとも万単位HPを吹き飛ばすこともザラにある。(腹晒しFDGとかめっちゃおいしい。)また、駆逐艦に対して強くなるのも砲門数が多いことのメリットで、広い散布界も相まって回避不能な一撃を繰り出すことができる。
ただし、貫通力に悩まされるという点は前級から変化なしで、さらに前もよくはなかった精度が大幅に低下、おまけに同格最長だった射程も20.3キロと平凡な値(ちょっと短め)にされている。(精度がよくて射程もあったらそれこそOPだけど)
射界は前方37度、後方30度ぐらい。(後方はあやふや)37度は跳弾判定がでないので近距離でヤバいというシーンでは前方2基で戦ったほうがよいかもしれない。
HE弾での運用も結構強いので私は気に入っていた。火災発生率が36%でそれが12門なので、相当火災を取りやすい。GKや大和が遠距離で頭を向けていると380mmAPではマジで全くダメージが出ない。HE弾で燃やし尽くせ。
旋回速度も優秀。6スロットで主砲改良をつけて全速転舵に追従する。しかしエンブを焚くと追従できなくなるので若干シビアなライン。でも熟練を取るほどのことではない。
・副砲
100mmの副砲を片弦6基12門(計8基24門)、152mmを中心軸上に3基9門と、これも同格最強レベル。しかしドイツ戦艦のような1/4ルール、装甲の硬さが無いので着火用と割り切ろう。火災力は優秀で、戦艦とヘッドファイトするときは敵が一瞬で火だるまになる。
152mm砲は前方1基、後方2基なのでちょっと使いづらい。
・機動性
最高速度は32knotと変化なし。しかし船体は確実に重くなっているので加減速はのんびり。エンブ中の加減速のキレは他国の戦艦を凌駕するので、加減速で回避とはいかなくとも急所からずらすということは可能。地味に素の最高速度がIowa級に負けているが気にしてはいけない。
・装甲、抗堪性
前級から順当に強化され、装甲は普通。同格米戦のIowa級(エアプ。抜いた経験は数知れずある)がゴミ装甲すぎるのでAPに対してはとても硬く見える。HEへの弱さはやはり健在で、Tier9になってマッチングすることの増えたHindenburgに特に注意。私が燃やし殺された回数は殺した回数よりはるかに多い。この辺は他の戦艦も同じだが。
水雷防御はツリー最高の44%。ただしこのTierの魚雷は一本2万弱ほどの威力があるので、たくさん食らうとヤバい。(当たり前だが)
Tier10のRepubliqueの特徴である上部構造で過貫通になりにくい現象は地味にAlsaceでも発生している。どうしようもない。辛く悲しい。
・対空
遠距離は100mm両用砲が強力。対空砲の手動制御を取ると遠距離で400を超える対空を発揮するのでめっちゃつよい。さらに何故かAlsaceだけ水上戦闘機が使えるのでブランチ中最高の対空能力といっても過言ではない。水戦は魚雷の警戒用に有償品を積んでおくのがよい。
・総評
火力が目に見えて向上するので非常に強い。新しい船だからというのはあるが、アジアサーバーのTier9戦艦では武蔵に次ぐ勝率、平均与ダメをマークしている。副砲の貫通を無視した単純なDPMはGKを抜き、実装艦艇トップらしいので、Alsaceで止めて副砲特化にして遊ぶのも楽しそう。(ただし副砲手動、上級射撃、IFHEを取ると隠蔽が取れないので普通にTier10にいく分には普通に主砲の強みを生かしていこう。)
私が使った感想として、とても強くて使いやすい船だった。私が使った船の中で多分最も大口径率が高い。トップTierになったら無双できる。
・推奨UG:主兵装、ダメコン1、射撃システムor副砲改良2、ダメコン2、隠蔽、主兵装改良(or副砲改良3?)
副砲について
副砲特化にするとき、3スロットの副砲改良2は必須だが、シグマが1.7しかない主砲のガバり具合は半端ではない。砲撃の命中率は射撃システムがあるのとないのとでは全然違うのでかなり悩むところだと思う。(私は艦長レベル的に上級が取れなかったので、副砲は旗と指定だけのみでの強化だった。)6スロットの副砲改良3はつけたことないけど多分間違いなくナシ。主砲改良があるのとないのとでは全然DPMが違う。副砲装填時間を20%短くするなら基本射撃訓練を取った方が対空も上がるのでまだマシ。(それをやると管理を取れなくなるので多分これもナシ。)
・推奨Skill:察知、(敵弾接近or予防、好きなのを)、アドレナ、管理、隠蔽、副砲指定、上級(19p)
戦艦の基本に則りつつ、長所である副砲を伸ばすカスタム。主砲旋回が速いのが神すぎる。ちなみに我が港は迷彩が枯渇気味なので15pぐらいで卒業。ほかの19艦長がない状態でここまでで18とかにするのは無理でしょ。
・モジュール改修順序:船体→射撃管制→エンジン
HPが低いので船体が最優先。副砲も強くなる。そして射程が短くてつらいので射撃管制。最後にエンジン。
Tier10 Republique
難しい。だが間違いなく強い。
・主砲
ここまでの艦では小口径ガバガバ砲をたくさん積むことで火力増強を行ってきた感の強いフランス戦艦だが、最終的には大口径(431mm)高精度(Σ2.0)高速(840m/s)弾を8門搭載することに落ち着くことになる。ちなみに45口径から50口径になって、シュっと伸びた砲身がめちゃくちゃカッコいい。
カッコいいだけでなく、システム的にもめちゃくちゃ恵まれている。
まず目を引くのが装填時間。素で24秒。この時点で主砲改良3を積んだ他国BBの装填時間を上回っており、主砲改良3を積むとなんと21.12秒(22.7発毎分)、さらにアドレナリンラッシュが効き始めると普通に20秒を切り、頭のおかしい火力を発揮し始める。(なんか6スロットに装填速度が-18%とかいう頭のおかしいUGが来るとか来ないとかの話が出ており、これが出ると素で19秒程度になり、さらに狂っている。)
380mm砲で悩まされていた貫通力だが、Republiqueでは大幅に改善している。30mmまでの強制貫通を持ち、Moskvaと愛宕以外の巡洋艦の甲板を角度関係なく貫ける。Alsaceでは天敵だったHindenburgもRepubliqueなら苦労しない。さらに大型艦への貫通力もゲーム内トップクラスで、14キロ以内では大和砲の貫通力を上回る。弾速も840m/sでTier10最速。巡洋艦にとってみれば、大和がScharnhorstの弾速と装填時間を手に入れたという感じ。
HE弾もぶっ壊れ性能である。ダメージは6300と普通だが、火災発生率が驚きの48%。(大和のHE弾湿気すぎでしょ)災害誘発旗と放火犯旗で強化すると50%になり、頭がおかしいとしか言いようがない。コンカラーの真似をして災害誘発をバンバン取っていこう。
精度も良い。シグマ値は大和に次ぐ2.0で、Alsaceのガバガバ主砲(1.7)で100戦した後だったので最初は非常に戸惑った。HEを撃つときもAPを撃つときも、高い精度はやっぱり最高。
射界、旋回速度も申し分ない。主砲改良3をとっても41.4秒で、余裕で舵に追従する。射界は前後30度あり非常に優秀。艦の構造が前後でほぼ対称なので、押しと引きで使い勝手が同じというのも強い。(しいて言うならRichelieu、Dunkerque配置がよかった。)
そして射程が長い。大和に次ぐ26.1キロ。ここまでくると撃ちたい敵が射程外ということがなくなる。遠距離での貫通力も大和に次ぐ2位だが、大和のように戦艦の船体への強制貫通があるわけではないので、HE弾でコンカラーの真似事をしよう。後述の副砲を活かすためにIFHEをとってもそこまで火災力の低下を感じにくいかも。
・副砲
127mmの副砲を片弦4基8門(計8基16門)、152mmを中心軸上に3基9門配置。小口径砲はリロードが長くなり、数も減っているが、口径が5inchになってIFHEなしでもDDの船体、戦艦の上部構造物にダメージが通るようになった。
大口径の方はリロードが12秒から8秒になった。モジュールが更新されており、ダサいという意見とカッコいいという意見、両方あると思う。(私はこっちの方がカッコいいと思う。)前級では前方に1基、後方に2基という配置だったが、こいつは前に2基になって突撃時に使いやすくなった。
射程を最高まで強化すると12.1キロとゲーム内最長。射程は長いがこいつはGKでないので相応の運用をしよう。
・機動性
最大速もさすがに低下して30knotになった。船体もめちゃくちゃ重くなっているので加速もゆったり。しかしエンジンブースト中の加速力はほかの戦艦の比ではない。頭を向けてバックするときもエンジンブースト中はすいすいなのでそういう場面では焚こう。
ヤバいなと思って動画を作ってみた。
・装甲、抗堪性
垂直装甲厚も順当に強化され、主砲下計552mm、エンジン542mmになった。さらに400mmの舷側装甲は下向きにかなり角度がついており、遠距離であれば多少腹を見せてもバイタルに届くことはまずない。
ただし甲板及び船体は砲塔を除きすべて32mmであり大和砲は角度関係なく刺さる。あらゆるHE弾が刺さる。つらい。
上部構造物はバグなのか何なのか、AP弾が過貫通しにくい。戦艦砲の斉射を上部構造で受けて1万ぐらい吹っ飛ぶことがザラにある。上部構造はクソでかいのでリパブ最大の弱点かも。(もしかしたら副砲のバーベットで信管が作動してるのかも)
水雷防御は39%と微減したが並み。HPが増えているので実質的には上がっている。
・対空
57mmの対空砲がメイン。ただし両用砲の数が減っているので遠距離対空が前より落ちた。その分手動制御との相性が悪くなっている。152mmのヤツ以外はポンコツで、すぐぶっ壊れるので終盤は役に立たないことが多い。巡洋艦を頼ろう。
・総評
クソ強い。Moskvaと愛宕以外の巡洋艦への強制貫通があるので、当たりさえすれば必ずダメージが出る。巡洋艦にとっては弾速の速い大和砲が20秒に一回飛んでくるようなもの。
戦艦に対してはさすがに強制貫通の大和、発火率のConquerorの方が優秀。対面にこいつらを引いたときはあまり強気なことはできない。ただしこちらにも強力なHE弾があるので、APが通らないときは積極的にHEを撃っていこう。高速、高貫通力AP弾は対戦艦でも強いので腹を見せている敵にはAPを撃とう。
・推奨UG:主兵装、ダメコン1、射撃システムor副砲改良2、ダメコン2、隠蔽、主砲改良3
・推奨Skill:察知、敵弾or予防、アドレナリン、管理、隠蔽、副砲、上級(19p)
Solving Sudoku by Bit operation(16x16)
ボードの表現
16x16の数独なので16x16=256マスあります。
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | |
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
3 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
4 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
5 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 |
6 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 |
7 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |
8 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |
9 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 |
10 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |
11 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 |
12 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 |
13 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 |
14 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 |
15 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 |
256ビット型の各位(ビット)を上のように配置します。
今回、ペンシルマーク記法を自然に表現するために、上のようなビットボードを16個合わせて配列にし、候補となる場所のビットを立てておきます。このようなビットボードを採用すると数独を解く上で必要な操作をより簡潔に書け、実行も高速になります。(速いかどうかは実験してないけど多分速い。)
256bitの整数型としてつかったのはstd::bitsetです。
ビット演算で有利な操作
数字を入れる操作
数字を入れる操作は数独を解く上で最も基本となる操作です。これは探索のどの場面においてもたくさん出てくるので、できるだけ高速に実行されることが求められます。
ある場所のある数字Nを決定した時に、同じ行、列、ブロックのマスの候補数字Nを消去する処理が必ず発生します。これを普通の配列、及び数値代入でやった場合対象となるマスの数だけ(列、行で12x2、ブロックで15の39回)配列へのアクセスが必要があります。
今回組んだものは列、行、ブロックごとにマスクを事前に用意して、ビットマスクを取ることでボードへのアクセスは1回で済みます。(確定させるNのボードだけの話)
用意するマスクは下の3通り(18個)です。
a | b | c | d | e | f | g | h | I | j | k | l | m | n | o | p | |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
横用のマスク xMask
a | b | c | d | e | f | g | h | I | j | k | l | m | n | o | p | |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
10 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
11 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
12 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
13 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
縦用のマスク yMask
a | b | c | d | e | f | g | h | I | j | k | l | m | n | o | p | |
0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ブロック用のマスク(これが16通り)blockMask[16]
これを書いたものが以下になります。(baseは256bit整数型)
gist06a918a9ea81d7e0d23ae524ac759dab
これをもとに数字をセットするメソッドを組みます。横マスク用の座標をx、縦マスク用の座標をyとして、xMaskを(x*16)ビット左シフトすることで任意の横、yMaskをyビット左シフトすることで任意の縦の操作を行え、どの blockに属するかをx,yから計算してblockMaskを添え字から指定し、ブロックも操作できます。
gist3e2a215961b14eadfcce5b5f1e1c7725
終わったかどうかの判定
例によって深さ優先探索で最終的には答えを出していくわけですが、それには終了(すべてのマスが確定したかどうか)の判定が必要になってきます。
候補があるかないかだけを示したビットボードしか無いと、いろいろと不便なので私は確定した数字とマスを記録しておくための256bit整数の16個のボードをもうひとつ用意しました。
これを用いると終わったかどうかの判定は簡単で、16個の確定マス配列のビットORをとってすべてビットが立っていれば終了、一つでも0があれば続ける、と判定が可能です。(OR関数は入力された16個の配列のORを返す関数です。)
gistad2bd76ffad82600f3bf0c2f71de7044
※すべてのマスが1であるかどうかを判定するためにビットを反転させて0かどうか調べています。
矛盾があるかどうかの判定
これも深さ優先探索に必要な処理です。矛盾があればfalseを返して戻れるところまで戻り、別の候補を入れてみて、、、、、といった処理が無数に発生します。
具体的に矛盾とは、マズいところに入れてしまって、どこかのマスに一つも候補がなくなってしまったときが矛盾です。
これも簡単な話で、ペンシルマーク用の配列のビットORをとってすべてのビットに1が立っていればtrue、一つでも0があればfalseを返せばクリアできます。
gistc91faf8889781b1b72984c86d6edbad4
お気づきの人も居ると思いますが、終了判定の返り値を反転させれば得られます。ですが今回は別のメソッドとして実装しています。
まとめ
今組んでいるもので実装している埋める手段はNaked SingleとHidden Singleの2つのみですが、殆どの問題を探索無しで解けている感じです。ただ、16x16の56個問題とかになると相当時間がかかります。LocalizationとかNaked Pairとかを実装していく必要がありそうです。
Sudoku Solver
はじめに
なんで急に数独を解き始めたかというと、がっこの先生が図書室にプログラミングコンテストチャレンジブックを入れてくれて、それをやっと借りることができて(プログラミングの本としては超人気、現在5件も借りられてる)、それの二章に再帰関数が書いてあって、その部分和集合問題(n個の要素を持つ集合が与えられて、その和がkとなる部分集合は存在するかどうかを判定する問題)を理解したので、「チョット難しめなの解いてみるか〜」とおもったからです。(日本語力がないのでここまですべて一文)
ちなみに私は数独超ニガテです。小学校6年ぐらいの時以来解いてないし、ちょっとでもむずかしい問題は解けません。
深さ優先探索(depth-first search)です。その名の通りまずノードをできるだけ深いところまで伸ばしてから最も近い未探索ノードへ遷移します。
数独は深さが定まらない木には使えませんが、数独は問題にかかわらず深さは常に一定以下(9×9なら最大81)なので使えます。
また数独の問題は基本的に解を一つしか持ちません(持つ場合もあるがすぐに対処できる)。そのため、不正解となる探索はすべての空きマスを埋める前に空いているマスに打てる数字の候補がなくなります。そのため終了条件は「探索をおこなって空きマスがなくなったら終了」となります。
実装
こういう感じで実装しました。(一部の英語がカス!)
アルゴリズムのところでも言ったように、すべての空きますが埋まったら表示してtrueを返すというふうに書いてあります。実は最初に判定するところを組んでいたのですが、途中で枝刈りがすでに十分であることに気づいて消しました。(nは空きマスの番号)(つまり深さ)
ちなみに斜めでも1〜9を揃えたい場合は斜めで判定するメソッドを書いて、return trueをreturn target.jadge();的な感じに変えればいけます。
解が複数あるときは、trueをfalseに変えればいけます。(下のようにいっぱい表示される)
(画像長すぎ)
この状態のプログラムでも9×9の数独ならば問題にほぼ関係なく瞬時に、世界最高難易度と言われている問題でも0.5秒程度で終わります。
16×16への挑戦
9×9が瞬殺できるなら16×16に挑戦するまでです。16×16は計算量が飛躍的に向上するようで(詳しい近似とかはしらんけど)、今までのものをそのまま拡張しただけでは現実的な時間(数時間)内に終わりそうにありません。(目標は数秒以内)(これも問題によりけりだけど)
高速化手法① 分岐の少ない順にソート
数独を解くときに左上から当てはめていくドアホなんて普通いません。普通候補が少なそうなところから順に埋めていきます。
途中で枝が刈れない木なら、分岐の少ないところから埋めたところでノードの総数は変わりません。しかし数独の探索木の場合、探索を進めて行くと多量の枝刈りが自動的に行われるので分岐の少ないところから埋めたほうが有利に埋めていくことができます。
実際、実験用に適当に選んだ問題は普通に解くと右側の4ブロックが早い段階で埋まるらしく、プログラムでもそこを先に探索されるように左上に配置して入力したら8分ぐらいとかなり速くなりました。
ただ、どこのマスの候補が一番少ないかは常に変化します。なのでノードごとにソートし直すものを組んだところ、400分経っても終わりませんでした。
これの効果が薄かった(あるいは確認できなかった)のにはいくつか理由があります。
・まず一つに、ノード一つあたりの処理コストが向上したことです。すべての空きマスに対して打てる数を列挙してソートするので非常に高コストです。
・そして二つ目に、脈絡のない場所を次々に探索しすぎという問題です。横や縦に並んだブロック中の空きマス(相互に影響しあう空きマス)ならば効果的に枝刈りができていたかもしれませんが、斜めのブロック(相互に影響しない)中の空きマスが次々に探索されていくことが考えられるアルゴリズムなため、浅いノードでの枝刈りがあまり発生しなかったという点です。
これらを解決するために考えたのは、縦横のブロック同士の干渉を計算しながら探索順序を最初に決め、あとは変更しないというものなのですが、いかんせん具体的にどうすればいいかというのが思いつきません。しょんぼり。
高速化手法② 自明な場所を埋めておく
あるマスにNが入っていたとすると、それと縦横とブロックないにNは存在しません。ボード上のすべてのNについて、Nが入らないマスを埋めて、Nが存在しないブロックの空きマスがひとつならそこがそのブロック中のNであるとわかります。これをすべてのNについて行って、わかるところを探索無しで埋めてしまおうというのがこれです。
まだ実装が不完全なためなんとも言えませんが、この方法はゲーム全体においてかなり効果を持つように思います。
ゲーム序盤では、簡単な問題ならば膨大な自明なマスがあります。これは完全に確定するので、探索を行わなければならない場所が大幅に減ることになります。
探索を行っている途中でも、探索中に仮においた数字によってボードのどこかで矛盾(候補がなくなる)が起きればいいので早期に枝を刈ることができる気がします。
ただ、一回自明なマスを確定させて、その確定によって新たな自明なマスが発生する可能性があります。(まあアップデートがあったかを受け取ればいいんだけど、実装が面倒っていうね、それだけだよ)
まとめ
まあと言った感じで、16×16の数独には結構悪戦苦闘してるというわけです。プログラミングの勉強としての数独ソルバーですが、とても良い題材なのではないかなと思います。再帰関数を用いたプログラミングは始めたばかりなのですが、これを解くことによって結構自信がついたし、実際簡単なものなら瞬殺できる実力がつきました。
暇すぎて爆発しそうな人は数独ソルバーを作ってみてはいかがでしょうか。
私からは以上です。
P.S.このプログラム17個問題とかだとクソ
ビット演算使ってリュカレーマーテストを高速化したお話
ビット演算にした部分
リュカレーマーテストでコストがかかる部分は主に2つ、二乗の演算と剰余算です。ちなみにどちらが痛いかというと剰余算です。(今回わかった)
リュカレーマーテストに出てくる剰余算は割る数が限定されている(判定対象のメルセンヌ数)なのでbit演算に落とし込めそうだと思いたち、実装して今に至ります。
方法
※判定対象pを2^i-1とします。で割る数をnとします。ここではnをpで割ったあまりを求める操作を考えます。
1、nをpでマスクして下位iビットを得ます。
2、nをiビット右シフトして上位ビットを得ます。
3、1と2の結果を足してnに入れときます。
4、1~3をn<=pになるまで繰り返します。
5、n=pならn=0にします。
証明(というより詳しく言っただけ)
1はnのp以下の部分を求めるところです。pを2^iと近似しているため5のような処理が最後に入ってきます。
2について。1のpを2^iと近似するものによれば、nのp以上の部分には(n>>p)個のpがあるわけです。真値は2^i-1なのでこれ一つ一つにあまりが1ずつ発生していることになります。これを全部足したいのでnをi桁ビットシフトしてます。
3について足します。
4について。1と2を1回ずつ実行しただけでは64とかの数では答えが8とかになります。これを防ぐために複数回実行しています。(なので割る数とオペランドのbit数に大きな差がある場合は遅くなる)
5について。このままだと割る数にpの倍数を代入された時にpが返ってしまいます。それを防ぐためです。
結果
30番目、2^132049-1を判定。上が今回、下が従来
5倍弱ぐらいの速度になってますね。今回のもので、割り算単品でかかっているコストがどの程度なのか分かりませんがだいぶ速くなっているはずだと信じています。
(実行環境i7 4770K single thread, linuxmint18 64bit, g++, gmp)
終わりに
リュカレーマーテストの最大の問題である、実行速度がO(N^2)という点は変わっていませんが(変わったらマジで大事件だけど)、比例定数を落とすことには成功していると思います。二乗に関してはgmpを使っての実装なのでこれ以上にはならないでしょう。(GPU使うなら話は別ですが)
P.S.年明けにGTX1060 6GB買います
あーねんまつ
今は12月28日あと数日で2016年が終わります。
今年は今までになくいろんなことがあった年だったように感じます(昔の記憶はどんどん失われていくため)
PCが新しくなったり、部活で大会に出たり、文化祭で激務だったり色々とありましたね
来年はもっと飛躍できる年にしたいですね
天使と悪魔と二分探索
少し前に映画、天使と悪魔を見ました。爆弾の場所を探す時にカメルレンゴの提案でバチカンの各区画の電力を順番に落として映像の電気に変化があるかないかを探すシーンがありました。
劇中ではたくさんある区画の電力を順番に落としていましたが、まず半分ずつ落として、映像に変化があった片方のさらに半分を落として、、、、を繰り返した方(二分探索)した方が圧倒的に速く探せるのに、、、、と感じました。
仮に二分探索で最も効率的に探索が行える2の冪乗個、今回は128個の区画があったとすると劇中のやり方では平均64回の試行でわかることになりますが、二分探索なら8回の試行で分かってしまいます。64回で終わらないリスクを考えれば一回の試行にかかる時間が長くても二分探索を行ったほうがいいと思うんですけどね