椎名唯華の一人称表記問題について

椎名唯華の魅力のひとつに、一人称の「あてぃし」が挙げられる。

舌足らずなところがゆるふわな外見とマッチして何とも微笑ましい気分にしてくれる。聞いたことが無ければぜひ聞いて見て欲しい。

 

今回はこの椎名唯華の一人称を漫画や小説などで文字に書き起こすとき、どのように表記すべきか考えていく。椎名唯華を良く知る者からVを殆ど見ない者まで様々な友人と議論したが、これがなかなか難しい問題だと気付かされた。

 

①「あてぃし」表記

「あてぃし」と聞こえるのだから「あてぃし」と表記すればいいじゃないかという立場。二次創作の作品や発言を文字に起こされているところを見てもこの解釈が大多数のように感じる。

この解釈の大きなメリットは字面のインパクトだろう。「あてぃし」表記は見ただけでもう面白いし、一人称だけで椎名唯華のセリフだと理解できる。

 

②「あたし」表記

椎名唯華本人が「あたし」と発言しているつもりである以上、表記も「あたし」とするべきじゃないかという立場。「あたし」と書いて「あてぃし」と読む。(余談であるが私はこの立場を取っている。)

椎名唯華はツイッターで「あたし」「私」を使うことがあるが「あてぃし」を使ったことは無い事などが根拠となる。

 

③「あてぃし」「あたし」併用

シチュエーションによって「あてぃし」と「あたし」を使い分けようという立場。これは解釈によって使い分け方が変わってくると考えられる。

 

私がまず考えたのが、漫画では「あたし」小説などでは「あてぃし」を使うというもの。②で述べた通りなるべく「あたし」を使いたいが、小説では一人称でキャラクターの判断がつく方が望ましいため「あてぃし」を使う。実用性を重視した考え方だ。

 

他にも、二次創作の漫画で発見し私が感動した解釈があるので紹介したい。(勝手にリンク貼ります。非常に素晴らしい二次創作です。)

その漫画では「あたし」と「あてぃし」両方が使われていた。自分なりに考察した結果、”普段の椎名唯華”は「あたし」と言い、”霊能力者としての椎名唯華”は「あてぃし」と言っているように考えられた。要するに「あてぃし」を決め台詞として使用するという考え方だ。

 

 

いくつか解釈を考えてみたがどの解釈が正しいということも、私の解釈以外を否定する意図も全くない。むしろ一人称に注目し「この人は椎名唯華をこういう風に見ているのかな」などと想像するのが私の楽しみでもある。

ここで挙げた以外に、私はこう考えるという物があればぜひリプライなどで聞いてみたい。

今回はこの辺で。

POSSESSION CDPクリアするまでにやった事

POSSESSION CDPをクリアした。すべてはこの曲をクリアするために日々DDRをやりこんでいたため、大きな達成感を得ることが出来た。ここを節目として、POSSESSIONをクリアするために今までやって来た事をまとめる。

 

クレ数、プレイ頻度

2017年12月19日にDDRを始め、2019年6月17日にクリア。 SP958クレ、DP1168クレ、合計2126クレ。

週に何回ゲーセンに行っていたかはまばらであったが平均すると2~4回だと思う。1週間以上ゲーセンに行かなかったことは2回あったと記憶している。週0は論外、週1は下手になる、週2は地力維持、週3が上手くなるための最低限、週4はめちゃくちゃ上手くなる、週5は上手くなるけど身体への負担が大きい、週6~7はやったことがないので分からない、と言うのが自分の感覚。

哲学クリアのみを目指していたのでスコア狙いよりは高難易度特攻を重視した選曲をした。普段、特にテーマを決めていないときは1、3曲目に高難易度特攻、2曲目に低難易度で休憩、4曲目は中難易度のライフ埋めをすることが多い。とにかく体力の限界を目指し「もう動けない…」からもう1クレ入れることを意識した。一回ゲーセンへ行くと大体10クレ前後プレーすることが多かったと思う。

生活、食事面

DDRはほぼスポーツなので健康管理が重要だと考え、睡眠と食事について試行錯誤した。

私は睡眠が下手で体調が安定しなかったが、睡眠記録アプリSleep Cycleを使い始めてから睡眠の質が上がった。 アプリ自体に睡眠の質を上げる機能は無く睡眠時間や快眠度が記録されるだけである。ダイエットにもよく使われる手法だが、記録するだけで人は自然と改善していくようだ。

Sleep Cycle: スマートアラーム目覚まし時計

Sleep Cycle: スマートアラーム目覚まし時計

  • Sleep Cycle AB
  • ヘルスケア/フィットネス
  • 無料
apps.apple.com

食事はDDRをする予定の前日夜~当日朝に炭水化物を多めにとることを意識した。(逆にそれ以外の食事の工夫は行っていない。) またDDRをする1~2時間前にサンドイッチとおにぎり一つ、直前やDDR中にゼリー飲料やバナナを補給することが多かった。長く運動するためには継続的にエネルギーを補給する必要があるが、消化のスピードが違う炭水化物を摂取すると良いとされている。DDR後にはプロテインやおにぎりを食べることが多かった。プレイ中はアクエリアス2Lを飲んでいる。水、お茶、ジュース、ほかのスポーツドリンクなど大体試したがアクエリアスが合っていた。 (余談だがDDRにかかるお金よりDDR前後の食事の方がお金がかかっている。)

練習法

様々な練習法を試したが、特に有効だと思ったものを挙げる。

  • SP15ライフ埋め

SP15の曲を全部LIFE4でクリアする。自分の苦手な配置に向き合う必要があるので弱点が潰れる。結果、ある配置によって消費されるゲージや体力を抑えることが出来るようになる。ポゼクリアする数か月前には達成した。

連続でDP17を選曲していき、1日ですべての曲をクリアする。DPの体力を付けることと、単純にDP17の練習になる。これが完走できるならポゼに粘着するだけの体力は十分ある。ポゼクリアする一ヶ月くらい前に行った。

連続でSP17を選曲していき、1日ですべての曲をクリアする。DP17マラソンの方がオススメだが体力や技術が足りない場合はSP17でも出来る。これが完走できるならDP17マラソンにも挑めるはず。ポゼクリアするだいぶ前から何回か行っていた。

  • DP16スコア詰め

DP16の曲で一つ一つスコアを詰めていく。ポゼクリアする1ヶ月くらい前からやりはじめて一気に効果が出た気がする。もっと前からやればよかった。ポゼは発狂を如何にごまかすかに注目しがちだが、実は転調までの16分×3がメインの譜面を安定してさばけるようになることの方が重要だった。そしてそのような配置はDP16に多く見られるので練習する。すべての曲が練習になったが特にポゼに役立つと感じたのは(DP16以外も入れて)Windy Fairy(激)、GAIA(激)、KIMONO♥PRINCESS(激)、POSSESSION(EDP Live Mix)(激)、Sand Blow(激)、POSSESSION(激)、POSSESSION (20th Anniversary Mix)(激)。特にGAIAとSand Blowは様々なパターンの16分×3が降ってくるのでとても練習になった。

  • SAで地力が近いライバルをさがす

SAでDP高難易度の勝敗が5:5に近い負け越しになる人を探し、すべての曲で勝てるよう曲を伸ばす。ボルテや弐寺と違ってプレイ人口が多くないのでライバルも能動的に探す必要があると思いこんな手法を取ることになった。ライバルがいた方が燃える人にはオススメ。

どの練習にも言えるが、1クレ終わるたびに連コしたくなる気持ちを抑えて「今のクレで上手く踏めなかったセクション」を動画や譜面サイトで確認するようになってから成長速度が加速した気がする。予習復習は超大事。 あとは上でも書いたがとにかくDP17と18をやりこんで体力を付けることを意識した。特にやりたい曲が無ければクリア回数が少ない曲を調べ、再クリア目指した。最終的にはDP18の曲は(未クリアのプリン鬼以外)すべて複数回クリアしていた。

情報集め、研究

ポゼクリアはDPerが目指す一つのゴールでもあるので至る場所に攻略法が書いてある。そのほとんどに目を通したと思う。特に役に立ったものを貼っておく。

www.youtube.com

www.youtube.com

www.nicovideo.jp

www.ream.ais.ne.jp

www9.atwiki.jp

これらの情報をもとに自分なりの運指や捨てノーツ、餡蜜などを考え何回もトライ&エラー。徐々に修正していけば必ずクリアできる。(譜面画像もってきて意識したことや、それぞれの区間の練習曲とか書こうと思ったけど面倒なので省略。)

まとめ

ポゼをクリアできたということで次はパラレボ鬼クリアを目指す。難しいことは分かっているがポゼと同じように工夫して一つ一つ地力を上げて行けば必ず倒せるはずなので努力する。

AtCoder Beginner Contest119

AtCoder Beginner Contest 119に参加しました。

atcoder.jp

f:id:NM_MN:20190227092011p:plain

本番ではA問題とB問題を解くことが出来ました。今回のコンテストに向けて過去問を001から005まで解いてきましたが、その様な古い問題とは何となく傾向が違うのかなと感じました。古い問題よりも新しい問題に優先的に触れた方が良いとのアドバイスを何回か貰っているのでそうしていこうと思っています。

今回のコンテストで特に悔しく感じたのがC問題を解けなかった事でした。ABC002のD問題やABC113のD問題で学んだように、プログラミングを用いて問題を解くことの大きなメリットとして総当たりで探索できることがあります。今回のC問題も総当たりで探索すれば解ける問題でしたがその発想に至れなかったことが残念です。 D問題も解法自体は思いついたのですが、実装が上手くいかずに解けませんでした。C++の使い方を一つ一つ覚えていくしかないですね。

C問題

今回の問題が与えられた竹それぞれについて「Aに使う、Bに使う、Cに使う、使わない」の4(22)通りなので4進数を用いて実装できました。 パターンがそれ以上ある場合は深さ優先探索(DFS)を用いると良いみたいです。深さ優先探索聞いたことあるけどよく知らないな~と思って調べてみたところ、以前解いたABC113-D.Number of Amidakujiで僕が最初に思いついたけど上手くいかなかったアルゴリズムの事みたいです。振り返り記事では「再帰的に潜っていく」など表現していますがちゃんとアルゴリズムに名前ついていたんですね。何か伏線回収されたような気分です。 深さ優先探索のほかにも幅優先探索などのアルゴリズムもあります。それぞれ実行時間やメモリに問題がある場合があるのでメモ化などとうまく組み合わせる必要があるかもしれません。

また、同じくらいの難易度の問題としてARC092-C問題をオススメされたのでそのうち解いてみようと思います。

D問題

解法はすぐ思いつきましたが、実装に手間取りました。学んだことを覚書します。

lower_bound

ソート済みの配列の、任意の要素以上の要素の場所を二分探索する関数としてlower_boundがあります。論理値を返すbinary_searchと違って探したい要素の位置が分かるのが大きなメリットです。取得されるのはイテレーターとなるので以下のように扱うと良いみたいです。

//size_t : コンテナの要素数などを表現するために用いられる.
//distance : イテレータ間の距離を求める.下の処理で配列sのいくつ目の要素かが分かる.
//lower_bound(first, last, value) : first-last間でvalue以上の最初の要素.もしなければlastが返る.
size_t spos = distance(s.begin(), lower_bound(s.begin(), s.end(), x));
}

lower_boundの使い方も、過去問を解いていく中でvectoriteratorに触れていなければすっと入っていなかったとは思います。問題を解くことは出来なかったけど一応勉強の成果は感じました。

探索を行うときはINFを使う

lower_boundで二分探索を行うとき、見つけたい値以上、以下が無いと望んだ挙動をしない場合があります。そこで配列の先頭に十分小さな値を、配列の最後に十分大きな値をぶち込んでおくと気持ちよく動いてくれます。無限遠に建つ神社や寺を想像すると面白いですね。

まとめ

まずは全探索を疑う事。深さ優先探索幅優先探索を自分で実装してみること。lower_boundの使い方になれること。long long型を使う事。古い問題だけでなく新しい方の問題にも触れて行く事。C問題以降が解けなかったのは悔しいのでもうちょっと勉強して次のコンテストではC問題まで解ける状態に持っていきたいです。まずは毎日勉強ですね。

参考文献

cpprefjp - C++日本語リファレンス

lower_bound

size_t

distance

AtCoder Beginner Contest 119 解説放送

AtCoder Beginner Contest過去問003

AtCoder Beginner Contest 003を解きました。 atcoder.jp

f:id:NM_MN:20190220153308p:plain D問題は難易度が高く101点満点中、100点がもらえるところまでやりました。そのうちまた挑戦して101点の回答を作りたいです。 さて前回記事(ブログ移転しました)でも記した通り、ABC113の問題を解くために動的計画法について学びました。今回のD問題で早速それを使えるタイミングがありました。

1.組み合わせ _ nC _ k を出力するプログラムは面倒くさい

D問題を解くためにcombinationを利用する必要がありました。よく使いそうなのにC++にはcombinationを扱う関数が無いようなのです(もしあったら教えて下さい)。 そこでcombinationの数を出力する関数を自分で作る必要がありました。

まず思いつくのが定義式を用いる方法。combinationは次の式で求めることが出来ます。

 _ nC _ k  = \frac{n!}{k!(n-k)!}

が!!!この定義式を用いると階乗の計算をしなければいけません。問題の条件を見ると900の階乗まで扱う可能性があります。こんなのオーバーフローするに決まっています。 定義式を使う方法はダメなので違う方法を考える必要がありました。

2. 漸化式を用いる

combination、もとい二項係数の求め方として次の漸化式を用いる方法があります。

 _ nC _ k = _ {n-1}C _ {k-1}  + _ {n-1}C _ {k}

 _ nC _ 0 = _ nC _ k = 1

この漸化式を用いてcombinationを求める関数がこうです。

int comb(int n, int k) {
    if (k == 0 || n == k)return 1;
    else return comb(n - 1, k - 1) + comb(n - 1, k);
}

実に簡単な実装ですがこれでは上手くいかないことを僕は前回の過去問で学んでいます。再帰的な処理を行うといちいち初項付近まで浮き上がるハメになり、一度得た計算結果を再利用することが出来ません。ここで扱うのが動的計画法メモ化です。 階層の深いところから再帰的に処理するのではなく、浅い階層からメモしながら深い階層へと潜っていきます(パスカルの三角形を上から書いていくのに等しいです)。

    vector<vector<long long>>comb(n + 1, vector<long long>(n + 1, 0));
    for (int i = 0; i < n + 1; i++) {
        comb[i][0] = 1;
        comb[i][i] = 1;
    }
    for (int i = 1; i < n + 1; i++) {
        for (int j = 1; j < k + 1; j++) {
            comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
        }
    }

こうすれば再帰的な処理を含まないので高速に計算することが出来ます。しかも計算結果は保管されているので _ nC _ k はcomb[n][k]として簡単に取り出せます。

3.まとめ

今回はアルゴリズムで新しい学びがあったと言うよりは、前回学んだ内容がそのまま活かせたのがとても満足でした(細かい話をするとmodあたりで学びはあったのだが)。 それと401点中400点まではスムーズに書くことが出来たので手ごたえを感じています。また過去問を解きつつ、リアルタイムでコンテストに参加するのを次の目標としたいです。

4.参考文献

Wikipedia組み合わせ(数学)

Wikipedia二項係数

組み合わせ(nCr)をC++で実装して時間計測