お気持ち練習帳

気持ちの整理や数学等の書きたいことを書きます

Dead by Daylight パークの場所が検索できる表作ったよ!

docs.google.com

皆さんはDBD楽しんでますか?私は環境がガラッと変わり、サバイバーやっていてやりごたえがあるなと思うことが増えてきました。

ところで、DBDをプレイしているとこんな機能ほしい、他のゲームである機能がないとか思うことありませんか?私はよくあります。 一人でマップ探索したいし、パークの説明文はみ出るし、付けたいパークの場所が分かんなかったり...結構あります。 カスタムマッチで、いろんなパークを使ってると毎回パークがどこにあるかわからずアイコンを全部見て確認してますが、それがめんどうでめんどうでなりません。 そこで、パークの名前(略称含む)と場所の表(サバイバーとキラーの両方)を作成しましたので、是非使ってみてください! ただし、この表は、パークが全て揃っていてかつ全てtier3のときのものなので、パークが揃ってないキャラでの公開マッチングでは場所がずれていますのでご注意ください。

【DBD】VC使用時の報告

DBDのサバイバーをプレイしているときにVCを使用することは、一部の界隈ではよくないとされているが、大会においては問題なく使用できます。 その際、VCの利点を活かすために報告や要求、オーダーなどをVCですると思うが、今回の記事では報告について自分が知っていることをまとめたいと思います。

自分は、大会に出るようになったのが2ヶ月前で知識不足だと思うので、何か間違っている点や加筆する必要がある場合は教えていただけると助かります。

報告すること

発電機

  • 発電機の位置

発電機がある場所を報告する。 また、堕落やデットロック等で発電機が直せない状況の場合それも報告する。

  • 発電機の進行具合

発電機が何割回っているかを定期的に報告する。 特に、ガラクタいじり対策で7割、刑事の直感の準備のため直る直前の報告は欲しい。

  • 発電機の引き継ぎ

発電機直している人がチェイスになって、その発電機をつけたい場合は近くにいる人が発電機を引き継ぎに行くと報告する。

チェイス

チェイスの開始時の位置、チェイスでどこからどこに向かうのか、どこでチェイスが切れたのかの報告がほしい。

  • 倒した板

倒した板の報告がすべきこととして考えられるが、これは全部報告していると情報量が多すぎるので、マップに湧く強板の場所だけで良いと思う。

トーテム

  • トーテムの場所
  • 呪術トーテムかどうか
  • トーテムを壊すとき

回復

  • 回復場所
  • 回復方法

セルフケアなのか、内なる力なのか、誰かと一緒に回復するのかの報告がほしい。

救助

  • 自身が救助行くかどうか
  • 救助ルート

キラー

  • キラーの種類
  • キラーのアドオン
  • キラーの位置

ツインズの場合は、姉と弟の位置を両方とも共有する必要がある。

  • キラーの罠

トラッパー、ハグの罠やピッグの逆トラバサミの解除位置などの報告。

その他

  • 最初の湧き位置
  • マップの生成がどうなっているか

報告方法

  • 場所を言う

報告では第一にどこで〇〇しているという場所を言う必要がある。 場所の報告の仕方としては、いくつかあるがマップを9分割して右上、左中と呼んだり、マップを時計に見立てて1時方向などと呼ぶ方法がある。 どちらの場合も上や0時方向がマップのどこに当たるかをサバイバー間で決めておく必要がある。

  • どこからどこに向かうのか

チェイス位置やキラーの位置などの動くものを報告するときは、ただ単に左中と言うよりも左中から左下行ったの方が情報量が多く、発電機から離れる等の判断ができるため助かる。

  • 文字数の削減

4人それぞれが報告するので、報告の文字数が多いと言葉がかぶって聞き取りにくくなってしまうので、言う文字数はなるべく削減する必要がある。 どこまで削減するかは、サバイバー間で取り決める必要があると思うが、例えばホーキンスの場合「左の大部屋でチェイスしてたけど、キラーのターゲットが切れて左下の方向に向かっていったよ」というよりは「左中タゲ切れ、左下行った」で十分に伝わるし文章が短くなって良い。

【python】各文字を並べ替えて作れる文字列の辞書順

AtCoderをやっていて、文字列  S が与えられたときに。各文字を並べ替えて作れる文字列の辞書順を使って、hogehogeするって問題にたまに出会います。 いつも辞書順のリストってどう作るんだっけとなるので、ここにメモっておきます。

from itertools import permutations

S = input()

# 辞書順のリストを表示
print(["".join(p) for p in sorted(set(permutations(S)))])

【DBD】赤帯必見!チェイス解説系動画集

こんにちは、なれです。

DBDが好きで色々な人とDiscordで通話しながらやっているのですが、「赤帯行けるけど、ランク1になれない」「チェイスうまくなりたい」という声をちょくちょく聞きます。赤帯だとランクを上げるには、ある程度チェイスできないとpipがもらえなかったりするので、チェイスの重要度が他のランク帯より上がっていきます。今回の記事では、参考になるチェイスの解説動画を紹介していきたいと思います。

カメラワーク編

  • カメラワークの重要性

動画の0:30~1:30で、カメラワークの重要性を説明してくれています。

ざっくり言えば、キラーの位置や動き方がわかるならそっちの方向にカメラを動かしましょう、そうしないと見えない位置からキラーに切られますよってことです。

www.youtube.com

 

  • 練習方法

1本目の動画では、チュートリアルを使用したカメラワークの練習法を紹介しています。このくらいの操作ができないと、チェイスのときにカメラワークを活かすのが難しいため頑張って練習しましょう。

2本目の動画は、試合時のカメラの動かし方の基礎的な部分を解説しています。私自身もこの動画のようにカメラを動かしており、おすすめです。

www.youtube.com

www.youtube.com

  • 理想的なカメラワーク

この動画は、カメラワークの応用的な部分を紹介しており、理想はこういうものだよという位置づけで紹介させていただきます。

www.youtube.com

チェイスルート編

共通小屋や2窓等のチェイスポジションとよばれるものが、マップには点在しています。サバイバーはそれらを駆使してチェイスするのですが、それらにはうまく逃げられるルートが存在します。

チェイスルートを効果的に活用するには、カメラワークができることが前提となっているので注意が必要です。

そんなチェイスルートの紹介がこちら。

www.youtube.com

この動画では、共通小屋のチェイスルートのみを解説していますが、シリーズ物となっていて、動画の概要欄から飛べる別の動画では、別のチェイスポジションの解説を行っているので全部見ることをおすすめします。

この場所では、この位置を見ながら等のカメラワークも説明しているので、上手い人がどうやってチェイスしているのかこれでだいたい分かると思います。

www.youtube.com

基本的に、各マップには固有建築とよばれるマップ特有の建物があります。この動画は、それらを窓だけ使ってチェイスする方法を解説しています。

待ちポジ編

チェイスポジションには、キラーがほぼどんなパターンできても対応できる場所、通称待ちポジというものが存在します。なので、チェイス

①待ちポジまで走る

②待ちポジで待つ

③キラーが待ちポジから見える

④次の待ちポジまで走る

ということをひたすら繰り返します。(もちろん、板を倒すとかもありますが)

この待ちポジを、各チェイスポジションで解説しているのが次の動画となります。

www.youtube.com

おわりに

この他にも、チェイスの考え方はたくさんあります。思いつくだけでも、

  • 板窓の強弱の概念
  • 読み合い
  • サバイバーができるフェイント
  • キラーの誘導

があります。それらは、さがしてもいい動画がありませんでした。。。なので、上手い人の動画や生放送を見て自分で勉強するのが良いと思います。

 

チェイスはDBDにおいて一部でしかありませんが、できるようになれば楽しくなること間違いなしです。今回紹介した動画を、見て練習してみんなでチェイスうまくなりましょう!

入緑したよ

今年の2月くらいから、競技プログラミングAtCoderで本格的にやり始めました。そこでのレーティングが一段回上がって、緑色になったのでその報告とそれまでにどんな勉強をしてきたかを書きたいと思います。

f:id:nareO7:20210627135626p:plain

勉強したこと

AtCoder Beginners Selectionsを解く

atcoder.jp

AtCoder始める際にはまずこれをときました。とりあえず10問解こうみたいな問題で、難易度はそんなに難しくありませんでした。競技プログラミング特有の入出力になれるためにも、一度解くのがおすすめです。

AtCoder ProblemsのBoot camp for Beginnersをある程度解く

f:id:nareO7:20210627140123p:plain

AtCoder ProblemsはAtCoderの過去問をまとめているサイトで、今まで自分がどのくらい問題を解いたかを管理してくれます。過去問を解くにあたって、自分で問題を選ぶのがめんどくさかったため、このBoot camp for Beginnersに頼りました。問題が、Easy、Medium、Hardの3種類に分かれておりそれぞれ100問あります。難易度はそれぞれ灰、茶、緑と別れており初心者が自分の難易度にあった問題を選ぶことができます。自分は、上記の図にもある通り、大体220問ほどときました。Easyを解ききったことで、ABCコンテストのABC問題の早解きができるようになってきたと感じます。どの問題が、どのアルゴリズムで解くのかはわからないので、苦手なアルゴリズムの勉強には向いてないかなと思います。

 アルゴリズム実技検定を読む

 この本は、AtCoderが主催?しているアルゴリズム実技検定とよばれる検定試験の参考書です。この本では、動的計画法最小全域木等のアルゴリズムを勉強しました。この本を買った理由としては、サンプルコードがC++ではなく、Pythonで書かれていてPython使いの私としてはとても読みやすかったからです。ただ、アルゴリズムを勉強しても実際の問題で使うにはギャップが有り、練習しないとなあって感じです。

今後の目標

今後は、次の色である水色を目指したいと思っています。今だと、ABCのCまでしか解けておらず、しかも最初からCまでは大体解けてたので成長をうまく実感できてません。水色に上がるには、DやEまで解く必要が出てきてそこまでくれば、競技プログラミングできてきてるなという実感も得られると思うので、そこまで頑張りたいと思います。

Wade's method による正標数の超越数の判定

はじめに

この記事は Math Advent Calendar 2020 の12月12日分の記事です。 今年は新型コロナの影響で、在宅勤務が増えて時間も増えましたが仕事の勉強やら体調がよろしくなかったことで、あまり数学ができませんでした。 このままでは、今年度なんのアウトプットもできずに終わってしまうなと思い、アドベンドカレンダーの記事を書くことにしました。

今回書くのは、正標数での超越数の話です。 超越数の証明法には色々ありますが、その中でも Wade's method とよばれる方法で、面白い証明だな~と思ったので紹介したいと思います。 ただ、Wade's method がどんな方法かは今回紹介する定理でしか知らないので、一般的にではなく具体例での紹介しかできないです。

定理の紹介

この記事では [O] の定理1を紹介しますが、実際の論文では超越数であることを示すだけでなく超越数度という定量化も示しています。 行間を埋められず超越数であることしか、私が分かってないのでそこまでを紹介していきます。

 p素数 u を正整数とし、 F を位数  q = p ^ u の有限体とおく。  K = F ( ( T ^ {-1} ) ) を係数  F のローラン級数体とおく。

定理. 多項式  0 \neq G \in F [T],  (e_k) _ {k \geq 0} を非負整数列で  e=e_0 < e_1 < \ldots , e_k | e_{k+1}, e_{k+1} / e_k p べきでないとする。
 
\begin{aligned}
\xi := \sum_{k=0}^{\infty} G ^ {-e_k} \in K
\end{aligned}
とおく。 このとき、  \xi F(T) 上超越的となる。

証明

 \xi が代数的だと仮定する。 このとき、 A_0 , \ldots , A_d \in F [T ] で  A_d \neq 0 かつ  \sum_{j = 0}^{d} A_j \xi ^ {q ^ j} = 0 となる多項式が存在する。  g := \deg G とおき、任意の  0 \leq j \leq d に対して  e _ \beta g > \deg A _  j となる整数  \beta をとる。 また、任意の  0 \leq j \leq d に対して、以下の条件を満たす整数  k _  j を定義する:

 
\begin{aligned}
e _ {k _ j} \leq q ^ {d - j} e _ \beta < e _ {k _ j + 1}.
\end{aligned}

 e _  \beta \lt e _ {k _  j + 1} より、 \beta \leq k _ j となる。 また、 j = d のときは e _ \beta = e _ {k _ d} となることに注意。

 
\begin{aligned}
0 & = G ^ {e _ \beta q ^ d} \sum_{j = 0}^{d} A_j \xi ^ {q ^ j} \\
& = \sum_{j = 0}^{d} \sum_{k = 0}^{k _ j} A_j G ^ {e _ \beta q ^ d - e _ k q ^ j} + \sum_{j = 0}^{d} \sum_{k = k _ j + 1}^{ \infty } A_j G ^ {e _ \beta q ^ d - e _ k q ^ j} \\
& =: S _ 1 + S _ 2.
\end{aligned}

 S _ 1 \in F[T] を示す。 任意の  0 \leq j \leq d, 0 \leq k \leq k _ j に対して、

 
\begin{aligned}
e _ \beta q ^ d - e _ k q ^ j \geq e _ \beta q ^ d - e _ {k _  j} q ^ j \geq 0.
\end{aligned}

したがって、 S _ 1 \in F [T] となる。

 S _ 1 \neq 0 を示す。  0 \leq j \leq d, 0 \leq k \leq k _ j に対して、 (e _  j) _ j の定義より、

 
\begin{aligned}
e _ \beta q ^ d - e _ k q ^ j = 0 \Leftrightarrow k = k _ d, j = d.
\end{aligned}

そのため、

 
\begin{aligned}
\mu := \min \{ e _ \beta q ^ d - e _ {k _ j} q ^ j \mid 0 \leq j \leq d - 1 \} \cup \{ e _ \beta q ^ d - e _ {\beta - 1} q ^ d \}
\end{aligned}

とおくと、 R \in F [T] が存在して、 S _ 1 = G ^ \mu R + A _ d とかける。  0 \leq j \leq d - 1 に対して、 k _  j のとり方より、 q ^ {d - j} - e _ {k _ j} / e _ \beta \gt 0 となる。  \beta \leq k _ j より、  q ^ {d - j} - e _ {k _ j} / e _ \beta \in \mathbb{Z} となるので、

 
\begin{aligned}
e _ \beta q ^ d - e _ {k _ j} q ^ j = e _ \beta q ^ j (q ^ {d - j} - e _ {k _ j} / e _ \beta ) \geq e _ \beta 
\end{aligned}

また、

 
\begin{aligned}
\frac{e _ {\beta - 1}}{e _ \beta} \leq \frac{e _ {\beta - 1}}{2 e _ {\beta - 1}} = \frac{1}{2} \leq 1 - \frac{1}{q ^ d}
\end{aligned}

より、

 
\begin{aligned}
e _ \beta q ^ d (1 - \frac{e _ {\beta - 1}}{e _ \beta}) \geq e _ \beta.
\end{aligned}

よって、 \mu \geq e _ \beta となる。

 
\begin{aligned}
\deg A _ d \lt g e _ \beta \leq  \deg G ^ \mu 
\end{aligned}

となるため、 S _ 1 \equiv A _ d \neq 0 (\mod G ^ \mu ) となる。

最後に、 | S _ 2 | \lt 1 を示す。  k _  j の定義と  \beta \leq k _ j + 1 より、 (e _ {k _ j + 1} / e _ \beta ) q ^ j - q ^ d \geq 1となる。  S _ 2 の各項に対して、

 
\begin{aligned}
\deg (A_j G ^ {e _ \beta q ^ d - e _ k q ^ j}) \leq \deg A _ j - g e _ \beta (\frac{e _ {k _ j + 1}}{e _ \beta} q ^ j - q ^ d) \lt 0.
\end{aligned}

よって、 | S _ 2 | \lt 1 となる。

したがって、

 
\begin{aligned}
0 = | S _1 + S _ 2 | = | S_ 1 | \geq 1
\end{aligned}

となるので矛盾。

最後に

級数の超越性を示すのに、素数ベキの冪乗を取ることででうまく項ごとに取り扱えるようにして、整数部分と小数(?)部分に分けて示しているのがおもしろポイントだなと思っています。 このような手法で、超越数度も計算できるのもお気に入りポイントです。 この手法で、正標数でのゼータ関数の超越性も計算できるらしいので、その証明も追いたいなと思ってます。 また、このくらい素朴な手法なら代数的独立性の判定もいけそうなので、手法自体の歴史を追ってみて何かしら研究できたらいいなって感じです。

参考文献

[O] Ahmet S. Ozdemir, On the measure of transcendence of  \zeta = \sum_{k = 0}^{\infty} G _ k ^ {- e _ k} formal Laurent series, International Journal of Maps in Mathematics, vol 2, issue 1, 2019, 99--107.

Dead by Daylightのサバイバーのチェイスの考え方・テクニック

DBDのチェイスの考え方を探しても、初心者向け記事が多く、ある程度プレイしてる人向けが見つからなかった。 なので、自分が考えてることや参考にしたいチェイスの考え方やテクニックを書いておきます。 動画を撮る技術はないので、いつもチェイスの参考にしている方の動画を使って説明します。 この記事は、私の考えを書くだけで、動画の投稿者の考えとは異なる可能性があることにご注意ください。

キラーの位置をなるべく多く確認できるポジションを取る

youtu.be

ジャングルでのチェイス中、キラーの位置が把握できない時間は多い。 そのため、キラーはフェイントを仕掛けてサバイバーに倒そうとする。 見えない中で、フェイントに引っかからないために、キラーが来る複数ポイントを見渡せる位置で待つのが良い。 上記の動画では、キラーが左右のどちらから来ても対応できるジャングルの頂点部分で待機している。 その後、キラーが右から来るのをステインで察知したので、左側へ逃げている。 ちなみに、1:05あたりで窓を飛び越えた後に一瞬止まっているのは、キラーが窓を越えるか左から来るかを確認してから動くためである。 プラスアルファのテクとして、キラーの位置を把握できても、自身の位置がバレるのは良くないので、キラーが片方から来たときは鯖が見えないようなポジション取りをすることがよくある。

沼ったふり

youtu.be

キラー側に、サバイバーがミスっていると思わせるテクニック。 上記の動画では、板を倒せるポジションより少し前に出て、キラー側に「このサバイバーの位置だと板倒せないから、突っ込めば倒せる」と勘違いさせる。 しかし、サバイバー側はキラーがそう思ってくれるだろう位置にわざといるので、キラーが来たタイミングで後ろに下がり板を倒す。

キラーとサバイバーの間隔調整

youtu.be

チェイス中にキラーとサバイバーの間隔があけばあくほど、キラー側は別のサバイバーを探そうとか、ここから回り込もうとかの選択肢が増える。 すると、選択肢が増えた分キラーの行動が予測できなくなり、倒される確率が高まってしまう。 それを防ぐために、間隔を調整してキラーの行動をある程度制限することが重要だ。 動画では、2:13~2:15にかけて小屋の中で歩いている。 これは、小屋の入り口までキラーが来たときに走って窓越えすれば攻撃があたらないように間隔を調整している。 最初の考え方と似ている部分もあるが、ここのチェイスはこの考え方で説明するのが適切と思った。

サバイバーの目線

youtu.be

サバイバーは3人称視点だが、どこを向いているかはキラー側でもわかるため、目線によってキラーはサバイバーの行動を予測する。 チェイス中にサバイバーが前を向いてるとき、板や窓を探してたり、窓を越えようとする場合が多いだろう。 動画では、2窓ポジのチェイスで、サバイバーが前しか向いていないため窓を越えるとキラーが予測するのを逆手に取って、窓を飛ばずに攻撃を回避している。 キラー側としては、鯖がこっち見てないからフェイントかけ放題だし、どうせ窓越えだろうと思ったのに逆にこっちが引っかかった状態である。

板フェイント

youtu.be

板を倒さずキラーが殴ると攻撃が当たる状況で、板を倒すと見せかけるテクニック。 板を挟んでのチェイス中、どこかのタイミングで板を倒さないと攻撃が当たるが、攻撃すると板に当たってしまう状況がよくある。 キラーが板に当たることに比べて、サバイバーが攻撃を食らうのは非常にまずいので板を倒すことが多い。 キラーもそれがわかっているため、板に当たらないように止まったり少し後ろに下がる。 その時間を利用して、もう一週板グルをして時間をかせぐのがこのテクニックである。 サバイバー側が板を倒すべき状況でないときに、わざと板前で待っても読まれがちなので、倒すべき状況かを判断しないといけないのがめんどう。

今回は、5つの考え方・テクニックを紹介したが、他にもあれば、新しい記事を書くかも。