2020年11月9日月曜日

【数学】確率の収束のイメージをあなたに

こんにちは。アスラトと申します。今日は確率の収束をわかりやすく解説したいと思います。

なぜ執筆するに至ったかというと、「数学苦手なので皆さんの味方です^^〜」という顔をしつつ、長ったらしい文章だけの記事を駆逐するためです。

対戦よろしくお願いします。

仮定


こんなお話を考えてみましょう。

ある日天才陽キャ魔術師のアスラト君の元にとあるYoutuberからの依頼が届きました。

「『25mプールを全部海水にしてみた』っていうドッキリしたいんすけど、用意できやす?w」

アスラト君は「う、うぇーい...」と返答し、報酬金を得るべく早速仕事に取り掛かりました。天才陽キャ魔術師のアスラト君は特殊な転送スキルを持っていて、1回の操作で海からランダムに場所を選んでその地点の海水をバケツ一杯分だけプールに転送できます。この時プール中の塩分濃度はどのように変化するでしょうか。

海水を転送した場所によって塩分濃度の推移が大きく左右されます。海全体の塩分濃度は3.4%になりますが、遠洋ならそれより高く、逆に河口付近が選ばれたなら0%付近になります。

そして超重要事項として「海水転送前後で残された海水の塩分濃度は変化しない」という点があります。つまりバケツ一杯程度の海水が消えたところでその近くの塩分濃度はほとんど変わらないよね!ということです。

あれれ......?


しかしアスラト君はバケツ100杯分の海水を入れ終わったところで大変な事実に気づいてしまいました。なんとプールの塩分濃度が2%しかないのです!これじゃあ真水でカサ増ししたのではないかと陽キャ達からあらぬ疑いをかけられてしまいます!アスラト君の運命や如何に!

結果


作業は全然終わっていませんが、なんと最終的には確率の収束によってプールの塩分濃度は3.4%付近になると考えられます。

ただあまり知らない方からすると確率の収束にはこのようなイメージがあるかと思います。

こちらは正しくありません。なぜなら転送予定の海水の塩分濃度が3.4%を大きく超える(3.75%)ためです。これは「海水転送前後で残された海水の塩分濃度は変化しない」ことに反します。新しく転送する海水も期待される塩分濃度は3.4%でなくてはなりません。

正しいイメージはこちらになります。確率の収束は期待される塩分濃度の向上によってではなく、期待される濃度は同じだがその圧倒的な量によって予定に近づくものです。そのため確率の収束にはたくさんの回数が必要だと言われています。実際プールの容積はバケツ6万杯ぐらいなので100杯程度で偏っていても問題ありません。

別の話


上の2つはくじの引き方の関係に似ています。

上側が引いたくじを戻さない場合、下側は戻す場合になります。上側では1回目を外すと2回目の確率は1/2となり1回目よりも大きくなります。これは確率の収束の誤ったイメージの例と似ています。確率の収束とは1回目よりも2回目の方が確率が大きくなる事で期待していた結果に近づくこととは別物です。この2つのケースを分けて考えると整理しやすいと思います。

余談


上記まで確率の収束とは、確率変数の収束や確率収束という意味で使用させていただきました。上で述べた混乱の原因って確率の収束という言葉にあると思うんですよね。だって予定に合わせて確率が変動しそうですもん。実際には確率は変わらずとも成立します。したがって確率の収束で確率は収束しないのです!

結論


確率の収束とは、確率の変動とは関係なしに、試行回数を増やすと予定した結果に近づく法則のことです。

余計に分からなくなったら申し訳ないけど中和ではなく希釈って感じです。以上!


ここまでの説明で理解できたのは元々数学ができる人なのでは......ボブは訝しんだ

色々不明瞭な部分もありましたので気が向いたら記事を改良します。


2020年10月1日木曜日

乖離性ミリオンアーサーサービス終了;;

高校2年生の時の思い出が終わってしまった;;
これでミリオンアーサーシリーズのソシャゲ全滅かぁうーん

あなたの背中は私が守ります。お腹は攻撃します。

私の記憶が正しければクリスタル175個で9800円だったはずなので12万円分持ってたんですかね。最近はあんまり配ってなかったけど2周年目くらいまではログインだけでもめちゃくちゃ石を配ってた印象。それ自体が衰退の一因な気がするのでもどかしいけれども。

こんな感じでオフライン版を残してくれたのはまじ有能。

【即日追記】
伝えたかったことを忘れてた。
実は「アスラト」という名前は「アストラトエレイン」が元ネタ。最初は5文字目以降除いた「アストラ」で活動しようとしたら予想以上に使われていたので「アスラト」に変更。「アストラトエレイン」ってめちゃくちゃ響きが良くて好きなんですよね。少女漫画チックな絵も珍しかったので印象にも残ってます。

2020年8月30日日曜日

チー牛のお前らにクセ毛を減らす方法教えてやるよ

これ見たらお前らのボサボサキモオタヘアーも多少ましにはなるだろ。
そんな具体的な改善策等を貢献度を評価しつつのせていくぞ。感謝しな。

ちなみに俺のスペックは以下だ
  • 軟毛 (重力に逆らえない系男子)
  • 髪ぺったんこ (実質キリトみたいなところあるよな)
  • 彼女いない歴 = 年齢 (あまりのイケメンさに畏怖し近寄ってこないだけ)

剛毛タイプの人はあまり参考にならないかも。

なぜクセ毛が発生するかの理解 / 貢献度:☆★★

遺伝や生活習慣を除けばクセ毛の原因はキューティクルの、詳細に言えば髪の水分の喪失。
そして重要なのは水分の保持には風呂から出た後が重要ということ。
シャンプーの種類に関しては市販の奴でも一応大丈夫。
あとこのブログに辿りついた人は問題ないと思うけど、リンスとドライヤーはしてね。

髪の拭き方 / 貢献度:☆☆☆


風呂から出たら拭くのは髪から。
ある程度水分を取り除けたら、まだタオルが湿っていない部分を使って第二フェーズ。
今度は両手を使ってタオルで前髪を挟んで下ろすように拭く。
これをやるかどうかで翌朝の髪のキューティクル具合が全然違う。
特に道具も必要ないので積極的にやるべし。

髪を拭いた直後 / 貢献度:☆★★

髪を拭き終わったらカーラーを前髪等に設置。
カーラーの種類はこんな感じの奴。
髪が額にひっついて汗で苦労するタイプじゃなきゃ必要ないかも。

温風での髪の乾かし方 / 貢献度:☆☆★

髪に分け目を作る人はその分け目側の手でドライヤーを持って乾かそう
ドライヤーは少し離れたところから風力MAXで。
髪は持ち上げるようにして根元を乾かすことでダメージを減らしつつ素早く終わらせられる。

冷風での髪の乾かし方 / 貢献度:☆☆☆

温風が終わったら今度は冷風を髪に。
温風の時とは異なり髪はあまり持ち上げないように。
こちらはキューティクルを閉じる用途だと思うと良さそう。
そのため髪の方向に逆らわないように上方からの送風を意識すべし。
小型の扇風機を上方に設置すると、回しながら化粧水とかをつけられるのでおすすめ。

まとめ

貢献度が高い奴は特におすすめなんでみんなやってみてくれよな。
また新たに発見したら追記するかも。

2020年5月20日水曜日

RPGが好きなレベリングが好きな人

皆さんはRPGが好きな人ですか?ちなみに私はRPGが好きな人です。

本記事ではこのタイプのゲームが好きな人の傾向と対策について私の経験から述べていきたいと思います。
傾向という謳い文句を聞くと性格診断とかを思い浮かべる人がいるかもしれません。
以下が某サイトのRPGが好きな人の恋愛傾向になります。(なぜ恋愛)
ロールプレイングゲーム(RPG)
『ドラゴンクエスト』のような長時間かけてレベルを上げたり、アイテムを集めたりしながら根気よくゴールを目指すRPGを好きな人は、物事の『過程』を楽しむタイプ。恋愛においても、日々のデートやメールのやり取り、プロポーズをするまでの準備期間などをワクワクしながら過ごす性格です。また、先の展開が読めないRPGを好むという好奇心旺盛な一面もあるので、何気ない日々に楽しさを見つけて、一緒にワクワクしながら過ごせるポジティブな異性を求める傾向があります。
疑問なのが太字の部分。
まるでレベリングは世間から嫌われているみたいじゃないですか。

俺は大好きなんだよ!レベリングが!

もっと詳しく言うと自分のステータスや武器性能といった数値が上昇するのが楽しい。
逆にボスの撃破とかはそこまで興味がないですね。工夫して倒しても順当に倒しても数値に何の変化もないですし。

ここで私の感性を伝える為に「楽し〜ポイント」を図解したいと思います。


「RPGが好きな人はボスを倒す為に苦痛なレベリングをする」方とは性質が異なることがご理解いただけたと思います。(ほんまか)
「RPGが好きな人は過程を楽しむ」っていうのもレベリングそれ自体が目的なので、過程を楽しむタイプと言われるとうーん。
道中は全て過程で細かい目的の集合自体が過程になる人がいるとも言えなくはないのですが......ねぇ。

さて今回の主張はこれからです。
私のようなレベリング自体も好きな人は現実の世界でも自身の能力の数値化をすることを心がけるべきだと思います。
例えばダイエットをしたいなら、ダイエット器具よりも体重計を買うべきとか。
筋肉をつけたいならダンベルより握力計?の方が良いとか。色々。

特に私に近い人は能力や成果を可視化してみると何か変わる...かもしれません。お試しを。



実は私、運動ができず勉強はできる方なのですが、これは短期的に成果の可視化されたからかもしれません。
勉強って頻繁かつ明確に自分の立ち位置を点数化されますが、運動はそうはいきませんし。
学校の体力測定の成績表を見ると結果は散々ですが数値化されていて結構好きです。
ん?成績?高3の1500m走の全国偏差値が28になります。対戦よろしくお願いします。

2020年4月22日水曜日

【C#】競プロ用にSegmentTreeのライブラリを作ったよ!

SegmentTreeってセグメント木とかセグ木とか色々に呼ばれているので検索するの苦労しません?
あなたはどのワードでここに辿り着きましたか?

先にコードを載せます。超普通のセグ木になります。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Library
{
    public class SegmentTree<T> where T: struct
    {
        private readonly T[] data;
        private int size = 1;
        private T defaultValue;
        private Func<T, T, T> function;

        public SegmentTree(int size, T defaultValue, Func<T, T, T> function)
        {
            while(this.size < size) this.size *= 2;
            this.defaultValue = defaultValue;
            this.function = function;
            data = Enumerable.Repeat(defaultValue, this.size * 2 - 1).ToArray();
        }

        // [a, b)
        public T RangedValue(int a, int b) { return RangedValue(a, b, 0, 0, size); }

        private T RangedValue(int a, int b, int now, int l, int r)
        {
            if (r <= a || b <= l) return defaultValue;
            if (a <= l && r <= b) return data[now];

            return function(RangedValue(a, b, now * 2 + 1, l, (l + r) / 2), RangedValue(a, b, now * 2 + 2, (l + r) / 2, r));
        }

        public T this[int index]
        {
            get
            {
                return data[size + index - 1];
            }
            set
            {
                index += size - 1;
                data[index] = value;
                while (index > 0)
                {
                    index = (index - 1) / 2;
                    data[index] = function(data[index * 2 + 1], data[index * 2 + 2]);
                }
            }
        }
    }
}

以下工夫した点

  • Genericsの型であるTに値型の制約を与えた
  • indexによるアクセスでより直感的に
  • ぐう短い

2020年3月31日火曜日

「Atcoderで水色になるまでにやったこと」を書きます


グラフが歪すぎる。

自己紹介



名前:アスラト
言語:C#
コンテスト出場回数:22回
入水時点のACCount:330

画像の通り競プロはやったり辞めたりしていました。
個人ではほとんどありませんがゲーム製作でプログラムを書いています。
ちなみに製作でのC#は二年ほどのブランクがあります。実質競プロ専用言語。

やったこと



大きく三段階に分かれています。
時系列順に並べましたが、「この順番でやるべき」という意味ではありません。
  1. AtCoderProbremsで古い時期のC問題と簡単なD問題を毎日解いた
  2. 125番目以前でD問題のDifficultyが水〜青色なABCを時間制限をつけて解いた
  3. 「レッドコーダーが教える、競プロ・AtCoder上達のガイドライン」を半分くらい解いた
上の三点とC#の話について書きたいと思います。


AtCoderProbremsで古い時期のC問題と簡単なD問題を毎日解いた



具体的にはABC64以前のC, D問題を1日1問以上を目安に解きました。
Streak数は驚異の41!すごい!ほめて!





誰も褒めないので私が褒めます!えらい!
大学で帰る前に図書館に行って問題を解いてから帰るという生活を送っていたおかげですね。
このように競プロを強制的に触れる環境を作り習慣化させました。
最初のアプローチとしては正しかったと思います。

一方でアルゴリズムに関しては大学の授業程度の知識しかありませんでした。(蟻本未購入勢)
過去問中に知らない解き方が出てきたらグーグルで検索する......といったことを繰り返し行ってきました。
これは非常に無駄が多くお勧めできません。
先に体系立ったアルゴリズムの学習または速解きの練習から始めることをお勧めします。


125番目以前でD問題のDifficultyが水〜青色なABCを時間制限をつけて解いた



古い時期でそこそこ簡単なC, D問題が枯渇し始めてからこちらに移行しました。
AtCoderのバーチャルコンテスト機能を利用してA〜D問題まで解きました。
こちらの目的は専ら速解きです。

特に茶〜緑色で
「D(orE)問題は無理!しかもC(orD)問題で大量に時間を消費した!」
という時はぴえん😭な結果になることを身を持って体験してきたはずです。
ある程度解けるようになったらどこかで速解きの練習はした方がいいと思います。
あとバーチャルコンテストで私と対戦しましょう!


「レッドコーダーが教える、競プロ・AtCoder上達のガイドライン」を半分くらい解いた




みなさんこれをやりましょう。学習に向いている問題ばかりです。
ちなみに「半分」である理由は、解いている最中に水色に昇格しただけで深い理由はありません。
これのおかげかは分かりませんが、解き始めた3/5辺りからレートが急上昇したのでみなさんやりましょう。

振り返って



振り返ると「体系的学習→演習」の流れを完全に崩してしまった気がします。
蟻本等で勉強した上で上述のリンクをクリアし、その後速解きの練習をすると要領良く水色に昇格できると思います。
ただ1, 2番目の演習を先であっても私の血肉になりえたことはここに明言させていただきます。

C#はぶっちゃけどうなの?



C#の良い点はそこそこ速くて綺麗に書けることです。
LINQの暴力だけでなく、入力部分を工夫するだけでもC++より簡潔に記述できます。(関連:【C#】手抜き競プロライブラリ〜入力編〜
其を侮る勿れ、短く書け得ることはそれだけ伸び代を残していることを意味します。
C++よりも一歩先のレートに足を伸ばせるかもしれませんね。実際私も水色になれたわけで。

とはいえ、速さ及びライブラリの充実度においてC++には到底叶いません。
速さは言わずもがな、C#には優先度付きキューも平衡二分木も順列列挙も存在しません。
加えてどマイナーな問題を解くとC#で提出している人が極端に減ります。

ではなぜC#を使うのか。理由は「使えた」ことと「関数型」です。
そもそも「関数型を使って綺麗に速くかけるようになりたい」という願望から私の競プロ生活が始まりました。
そして新たに言語を学ぶ気になれなかった私は、当時使えたC, C#, Java, JavaScriptの中からLINQがあるC#を選択したという歴史的な背景が存在します。

最後にC#もとい競プロの言語についてめちゃくちゃ良いこと言うので聞いてください。

競プロをする目的が競プロならC++にしろ。そうでないならなんでも良い。

これが私の結論です。
何をするにも言えますが、目的や目標の明確化を心がけると良いと思います。

今後



私の当初の目標は水色になることでしたが、まだ上昇の余地が残されているのでもう少しだけ続けてみようと思います。
青に昇進できてもできなくてもまた記事を書きたいですね。

P.S.
水色に昇進することを入水って表現するのすこ

2020年2月18日火曜日

dmmのデイリーパチンコの大当たりを一月で二回引くの巻

2020/2/7に大当たりを引いて、


2020/2/18でまた大当たりを引きました。


結構すごくないですか?確率低いと思うんですけど。

2019年12月27日金曜日

【C#】手抜き競プロライブラリ〜入力編〜

最近競プロを再開しました。
競プロやってたって言えたらかっこいいじゃないですか。
目標は水色。

今日は基本中の基本かつ速度の大幅な向上を期待できる入力のライブラリをご紹介します。

といってもStreamを使ってどうたらこうたら......とかはしないです。

あくまで自分の理解を越えない範囲で、コスパの良い書き方を目指しました。
class Input {
    static IEnumerator<string> enumerator = new string[] { }.AsEnumerable().GetEnumerator();

    public static string Line => Console.ReadLine();

    public static string[] StrArr => Line.Split(' ');

    public static int NextInt => int.Parse(NextWord());

    public static long NextLong => long.Parse(NextWord());

    public static List<int> IntList => StrArr.Select(int.Parse).ToList();

    public static List<long> LongList => StrArr.Select(long.Parse).ToList();

    public static string NextWord() {
        while (!enumerator.MoveNext()) {
            enumerator = StrArr.AsEnumerable().GetEnumerator();
        }
        return enumerator.Current;
    }
}

うーん、NextWordだけ"()"が必要なあたりすごく手を抜いてる感が出てますね。

NextInt等はJavaのScannerに挙動が近いです。(Scannerの宣言ないけど)
var a = NextInt;
Console.WriteLine(a);

こんな感じ。

賢い点はenumeratorの初期値に空のstringを入れていること。
これによってwhile文の条件式が簡潔に済ませられます。

コードはご自由にどうぞ。間違いがあったらごめんね。

2019年9月15日日曜日

【ASTRALCHAIN】クリア後の感想とちょっとしたアドバイス

ネタバレは回避します。

筆者について



各FILE(章)の最後にクエスト等の遂行度合いをリザルトとして確認できます。
私は各FILE平均2個程度のクエストを逃していました。
ASTRALCHAINでは実際に現地に赴かないとマップに表示されないクエストが存在するので注意が必要です。

難易度はFILE04まで「有利」、簡単すぎたのでそれ以降「拮抗」に切り替えました。
「有利」での残機は7でしたが、減る前に全て倒せていました。
まあ「拮抗」に切り替えた途端死にまくってゲームオーバーになりましたが。

クリア時間は30時間弱。想定通りらしいです。

地形



私が力説するより紹介映像見た方が早そう。



綺麗っすね。

キャラメイクの部分で主人公の誕生年が2058年と読み取れます。
舞台は近未来的なSFがベースとなっており、マップにもその仕掛けが組み込まれています。
繁華街とか情報量が多すぎてすごい(小並感)
またIRISという情報統合装置?(動画サムネの機能)もSFの味を引き立たせることに成功しています。

欠点は上下移動が弱すぎる(特に上方向へジャンプできない)点です。
物を破壊した際にアイテムが高いところに落下し取れない事態がままあります。
本作の舞台は人工島で、当然フィールドも人工物ばかり。
必然的に高低差のあるマップが多いのですが、それが操作で活かされていない気がします。
ついでに戦闘時も上下の操作性が低いので飛行ユニットへの攻撃手段が限られてしまいます。
分かるんですよ。ボタンが足りないからジャンプできないって。
でもせっかくだし欲しかったよなぁ。

キャラクター



プラチナゲームズは尻がすごいと言われていますが、あんま関心なくて申し訳ないw
男主人公デフォルトマンなので女主人公やキャラメイクの感想とかもありませんし。

リアル路線を追求した脱中世ファンタジーゲームは、もれなく不気味の谷との戦うことになります。
本作はある程度リアル路線に進みながらもギリギリのデフォルメ度合いで粘れていたと思います。
ただ結局童顔さが残る女主人公(男主人公の場合は妹)が一番可愛くて、美人扱いされる人達はいうほど......
気になる人は公式サイトで見てみましょう。
妹ちゃんは声ついて動くとより可愛くなりますよ!

ストーリー



ムービー部分で真っ先に抱いた感想は「映画みたいだった」です。
漫画やアニメよりも映画。力入ってるなぁと。
とにかくキャラクター達が違和感なく動くんですよね。
何気ない場面でも待機モーションがヌルヌル動いたのは衝撃でした。
またきっちりフラグを回収しつつも読めない展開が合わさる塩梅が優れていました。
ただ終幕して全てが明らかになったかというと微妙さが残ります。
しっかり考察すれば解決してくれる?

音楽



ゆっくり曲を聞けたの主題歌しかない説。
戦闘中に会話が挟まらなくとも曲を聞く暇などありません。
だってそういうゲームの作りになってますもの。
非戦闘中はグラフィックに頭のリソースを奪われていたのでやっぱり聞いていません。
もう一周しないと音楽の良さを享受できないかも。

戦闘



「戦闘が難しい」「覚えることが多すぎる」という意見が見られましたが、チュートリアルが非常に親切だったので気になりませんでした。

本作の戦闘は「チェインバインド+シンク」や「ジャストレギオン+シンク」を獲得することで真価を発揮します。
プラチナお得意のヒットストップが加わり脳汁ドバドバですよ。
ここから本当に戦闘が楽しい。

不満な点はカメラワークの正解が分からなかったこと。
...と思ったけどカメラの回転スピード速くすれば解決するかも。あとでやろ。

まとめ



最近物量でゴリ押すゲームが多い中で短く太く仕上げた作品は貴重です。
SF, アクション, 短時間クリア この3点に興味を持った方は購入をおすすめします。

買ってから知りましたが2本でお得 ニンテンドーカタログチケットがめっちゃお得。
ぜひご検討ください。

2019年9月7日土曜日

ふるーつふるきゅーとを遊んだ

ふるーつふるきゅーと(R18版)をやってみたんですよ。
最序盤の仕掛けとかちょっと面白かったんですけど、それより驚いたのが声優の若本さん(セルとかアナゴさんとかの人)っぽい人が出てたこと。
ただの声真似ならいいんですけど(良くないけど)、もしそうなら仕事を選べと言いたい。幾ら何でも謎すぎる。