どうしてこんなものを作ってしまったんだろう。
というわけで、今回のネタは無限の猿定理です。直接の元ネタはTwitterですが、下ネタ全開なのでリンクを開く際はご注意ください。
概要
タイトルにもあるように「進捗・どう・です・か」をランダムな順序で表示し、「進捗どうですか」が完成したところで適当にクエスチョンマークをつけて去っていくプログラムです。
特に意味もなく文字カウントします。おおよそ数十文字から1000文字程度で目的を成し遂げて去っていきます。
生成された煽り文句たち
煽り文句も煽り以外も結構バリエーションがあるものです。
「進捗どう進捗どう進捗どう」
焦っているんですかね。
「進捗ですです進捗どうです」
激しい進捗があった人のセリフでしょう。
「どう進捗ですか」
進捗を伝えてからの冷酷な迎え撃ち。
「進捗かどうかどうですか」
自信がなくなってきた。
「どうかどうか進捗進捗進捗」
締め切り間近。もうやばそう。
ソースコード
使い道のなさそうなソースコードもどうぞ。例によってC++11です。
完成文字列に繰り返しがない場合、終了の判定も面倒なことをせず行うことができます。
#include <iostream> #include <random> #include <functional> const int word_max = 4; const std::vector<std::string> words = {u8"進捗", u8"どう", u8"です", u8"か"}; const std::vector<int> words_length = {2,2,2,1}; auto myrand = std::bind(std::uniform_int_distribution<int>(0, word_max-1), std::mt19937(std::random_device()())); int main(int argc, char** argv){ int word_count = 0, sorted_count = 0, last_num = word_max; while(sorted_count != word_max-1){ const int num = myrand(); std::cout << words[num]; word_count += words_length[num]; sorted_count = num > last_num ? sorted_count+1 : 0; last_num = num; } std::cout << "???\n" << word_count+3 << "文字で煽られました。" << std::endl; return 0; }
どうも、区切り間隔は文字ではなく文節か単語くらいのほうがおもしろいようです。
文字数と終了確率について
この段落は次回の進捗分のためにとっておきます。