省文字とか置換の話をTwitterでするにはどうも書きづらいので飽きる前にここでメモっておきます。ヒロスさん場を用意してくれてありがとうありがとう。好き。
最後まで読んでも多分何も得られません。ただの作業日記ですので、サクっと省文字したい場合はタブ(\t)を何個か置換しておけば解決すると思います。暇な人は下まで読んでね。
まず現在のニコニコの投稿者コメントの仕様をおさらいしておくと、コメント数は1000まで、そして1コメント1024文字まで。
寝る時にまぶたを閉じると、ブロックが落ちてきて眠れない程の苦行を重ねて高精度の絵を作った場合や、これコメントじゃないだろ嘘乙www←いやコメントだから動画落としてみろよカスwwwとかの一般コメントで、動画が賑わいそうな変態的な投コメを作ってしまった場合はどうしても仕様限界を超えてしまう。しまうのか?そんな奴いるんか?
そんな場合はさすがニコニコさん、@置換という便利なニコスクリプトが用意されていて、これを使うことにより文字数を省略することができる。詳細は以下リンクより。なお@配管などの隠しコマンドは各自で勝手に調べてください。
例えば以下のような2コメントがある。
{“comment”: “うんこ大好き”}, {“comment”: “うんこ食べたい”} |
うんこが大好きで快便なのは大変宜しいが、うんこを2回も出すのが面倒だ。@置換を使うと以下のように文字を省略できる。
{“comment”: “@置換 \”段様\” \”うんこ\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “段様大好き”}, {“comment”: “段様食べたい”} |
「段様」を「うんこ」に置換することにより1文字省略できている。2コメントあるので、1文字×2コメントで2文字の省略ができた。しかしこれだと全体のコメント数が3コメントになってしまう。
実際は以下のように、例えばある2コメントとも1024文字を超えてしまう場合等に使用する。
{“comment”: “うんこ大好きうんこ大好きうんこ・・・ ・・・大好きうんこ大好き”}, {“comment”: “うんこ食べたいうんこ食べたいうんこ・・・ ・・・食べたいうんこ食べたい”} |
この記述では保存できない為、この2コメントはを4つに分ける必要があるが分けたくない。ワガママな奴め。そこで最大頻出の「うんこ」をある特定の1文字、例えば「A」と置く。
{“comment”: “@置換 \”A\” \”うんこ\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “A大好きA大好きA・・・ ・・・大好きA大好き”}, {“comment”: “A食べたいA食べたいA・・・ ・・・食べたいA食べたい”} |
これで描画用のコメントが1024文字以内に収まれば成功である。この処理を【置換】と呼ぶことにする。【痴漢】はまた今度説明するので落ち着いて待っていて欲しい。
めでたく今回の「うんこ」に関しては1024文字以内に収まったが【置換】をしても1024文字に収まらない場合もある。頑張り過ぎである。そんな場合でも@置換を使ってなんとかかんとかできる。うんこカモン。なお@置換を使わなくても別に普通にコメントを分割すればいいんだけどさ。改行とか位置がめんどくさいから置換のが楽だと思うよ。
以下の文字数が何千文字かあるとする。「うんこ大好きうんこ食べたい」を採番して2000まで記述した。どんだけ大好きなんだ。
{“comment”: “1うんこ大好きうんこ食べたい2うんこ・・・ ・・・2000大好きうんこ食べたい”} |
「うんこ大好きうんこ食べたい」を【置換】すれば収まりそうだが、残念ながら今回は収まらなかった。そういう体でお願いします。ではどうするか。
{“comment”: “@置換 \”A\” \”1うんこ大好きうんこ食べたい2うんこ・・・ ・・・50大好きうんこ食べたい\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “@置換 \”B\” \”51うんこ大好きうんこ食べたい52うんこ・・・ ・・・100大好きうんこ食べたい\” \”単\” \”投コメ\” \”部分一致\””}, ・・・ {“comment”: “@置換 \”ZZZ\” \”1951うんこ大好きうんこ食べたい52うんこ・・・ ・・・2000大好きうんこ食べたい\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “ABC・・・ ・・・ZZZ”} |
@置換に1~2000までの「うんこ大好きうんこ食べたい」を50ずつ分けて入れた。これにより【置換】を使用しても1024文字に収まらなかったブツが、コメント数は増えてしまうが、収まった。下痢がおさまったのだ。地球は救われた。そんでもってこの処理を【分割】と呼ぶことにする。やってることは【置換】と同じだが、こちらの方は力業である。力こそパワー。
【置換】と【分割】の説明をしたところ力尽きそうだが、実際に貼れるブツで何か事例を紹介しておく。マイワイフオブマイワイフの久美子カモン。
まずこいつの生データの基本情報。
横幅 | 132文字+改行文字 |
色数(背景込み) | 18色 |
使用文字 | 空白、ブロック、改行、タブの4種類 |
文字数とコメント数は以下。
No.(色) | 文字数 | コメント数 |
1 | 3116 | 4 |
2 | 4214 | 5 |
3 | 4310 | 5 |
4 | 2481 | 3 |
5 | 4607 | 5 |
6 | 4566 | 5 |
7 | 4272 | 5 |
8 | 4132 | 5 |
9 | 3830 | 4 |
10 | 4461 | 5 |
11 | 3687 | 4 |
12 | 3732 | 4 |
13 | 3679 | 4 |
14 | 2481 | 3 |
15 | 3143 | 4 |
16 | 2631 | 3 |
17 | 642 | 1 |
18 | 398 | 1 |
合計 | 60382 | 70 |
1024文字ずつ分ければ70コメントになりこのまま貼れるから何の問題もなかった。~fin~。ですが例えば久美子を20枚くらい貼りたい場合もあるよね。そうすると1400コメントになってしまう。今のまま生で貼っても14枚だ。そこで何とか文字数とコメント数を減らしてみたいと思うよ。
じゃあ早速タブを置換してみたいけど、ちょっと待って。実際にタブが多いのか?それともブロックなのか。タブ何個を置換すればいいのか。タブとブロックの組み合わせの方が多いんじゃないか?どの組み合わせの何文字が効率が良いんだ?世の中わからないことだらけなので一応調べようと思いますよ。
組み合わせの話をここでちょっとする。使用している文字の種類は4種類なので、任意の位置から1文字を抜き出した場合は当然4通りになる。じゃあ任意の位置から2文字を抜き出した場合はどうか。重複を許す順列辺りでググってもらうとわかるけど、16通りになる。文字を増やしていくと、3文字64通り、4文字256通り、5文字1024通り・・と増えていく。
今回は使用している文字種は4種だが仮に10種使用していた場合は、1文字10通り、2文字100通り、3文字1000通り・・とヤバイくらいに増えていく。宇宙ヤバイ。
@置換も1コメントなので、文字数は1024になると思う(調べていない)。書式等も入力しないといけないので1000文字が限界としておこう。任意位置から1000文字抜き出した場合の文字4種の組み合わせは1.14813E+602。おっやべえ無理だ。
やっぱタブの組み合わせが一番多いんでしょ(諦めた)。いやここが一番の肝でしょ。諦めちゃいかんでしょと思う諸兄。タブやブロックの集合が少なく、かつ色んな文字を使用しているトンデモデータがあったたら下さい。やります。気が向いたら。
ということでせめて何が何文字あれば一番効率良く【置換】出来るかを調べることにする。これならば文字を増やしても組み合わせは大して増えない。今回は132幅なので同じ文字の組み合わせは改行までの132文字、一番多い文字に対して132通りだけ調べればいい。いや本当は良くないんだがまた後で。
まず何の文字が一番多いかについて調べる。
文字種 | 文字数 |
空白 | 2775 |
ブロック | 9240 |
改行 | 1638 |
タブ | 46729 |
ほらやっぱり圧倒的にタブじゃん。言ったでしょ。大体、空白を制する者はコメントアートを制するってゴリも言ってた。ではタブについて何文字の組み合わせが効率が良いのかを調べる。例えばタブ2文字の組み合わせが2個あれば2文字削減できる。
文字数 | 組み合わせ数 | 削減文字数 |
2 | 22109 | 22109 |
3 | 13901 | 27802 |
4 | 9914 | 29742 |
5 | 7540 | 30160 |
6 | 5943 | 29715 |
7 | 4831 | 28986 |
・・・ | ||
66 | 5 | 325 |
67 | 0 | 0 |
・・・ | 以下0 |
タブ5文字の組み合わせを【置換】してやれば30160文字の削減になりそうだ。実際に置換してみた後の置換コードは以下。「倀」を置換文字とする。
{“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倀\” \”\t\t\t\t\t\” \”単\” \”投コメ\” \”部分一致\””} |
文字数等の情報は以下。
No.(色) | 置換前の文字数 | 置換前のコメント数 | 置換後の文字数 | 置換後のコメント数 |
1 | 3116 | 4 | 1268 | 2 |
2 | 4214 | 5 | 1978 | 2 |
3 | 4310 | 5 | 2310 | 3 |
4 | 2481 | 3 | 877 | 1 |
5 | 4607 | 5 | 2827 | 3 |
6 | 4566 | 5 | 2746 | 3 |
7 | 4272 | 5 | 2160 | 3 |
8 | 4132 | 5 | 1984 | 2 |
9 | 3830 | 4 | 1690 | 2 |
10 | 4461 | 5 | 2665 | 3 |
11 | 3687 | 4 | 1595 | 2 |
12 | 3732 | 4 | 1484 | 2 |
13 | 3679 | 4 | 1639 | 2 |
14 | 2481 | 3 | 1065 | 2 |
15 | 3143 | 4 | 2147 | 3 |
16 | 2631 | 3 | 1267 | 2 |
17 | 642 | 1 | 306 | 1 |
18 | 398 | 1 | 214 | 1 |
置換 | – | 0 | – | 1 |
合計 | 60382 | 70 | 30222 | 40 |
70コメントから置換コメントを含む40コメントまで削減出来たが、これでもまだ2000文字を超えるコメントがあるので、分割しての結果である。まだ【置換】することでコメント数を減らすことができるのなら処理を繰り返したい。【置換】後の30222文字に対して、もう一度【置換】することで更なる省文字省コメを行う。再痴漢はまた今度説明するので落ち着いて待っていて欲しい。
ここで最近話題になった@置換の【多段置換】について説明する。ノーマルな置換は以下。
{“comment”: “@置換 \”A\” \”うんこの大盛り\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “A大好き”} |
そして以下がアブノーマルな方の置換。助平Verである【多段置換】。
{“comment”: “@置換 \”B\” \”Aの大盛り\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “@置換 \”A\” \”うんこ\” \”単\” \”投コメ\” \”部分一致\””}, {“comment”: “B大好き”} |
これに関しては動作保証はせんぞという運営さんサイドのコメントが付いてますのでどうしてもおなかが痛くて我慢できないときに使いましょう。どうなっても知らんけどな。今回はちょっとつこうてみます。
話を戻して【置換】後の30222文字に対して再度効率を調べる。まずは文字の調査から。種類は空白、ブロック、改行、タブ、それから置換後の「倀」という文字の5種類
文字種 | 文字数 |
空白 | 2775 |
ブロック | 9240 |
改行 | 1638 |
タブ | 9029 |
倀 | 9029 |
結果、ブロックが多いようだ。ではブロックについて何文字の組み合わせが効率が良いのかを調べる。
文字数 | 組み合わせ数 | 削減文字数 |
2 | 2388 | 2388 |
3 | 1142 | 2284 |
4 | 727 | 2181 |
・・・ | ||
40 | 1 | 39 |
41 | 0 | 0 |
・・・ | 以下0 |
ブロック2文字の組み合わせを【置換】してやれば良さそうだ。
だがちょっと待って欲しい。文字種5で2文字の組み合わせは25通りしかない。だったら2文字くらいの組み合わせなら調べてやるよオラァン。てことで「空白ブロック」、「ブロック空白」など全通りにてどれが効率が良いのか調べることにする。以下30222文字に対して25通りの出現数。
1文字目\2文字目 | ブロック | 倀 | タブ | 空白 | 改行 |
ブロック | 2388 | 1915 | 1834 | 501 | 1062 |
倀 | 347 | 2867 | 1941 | 327 | 1 |
タブ | 2126 | 0 | 3412 | 1913 | 10 |
空白 | 2769 | 0 | 0 | – | 6 |
改行 | 69 | 690 | 274 | 34 | 295 |
結局タブ・・またお前か。純粋に文字数だけならブロックの方がタブより多いが、組み合わせを考えるとタブになるようだ。あっ、これまずいですよ。1番最初の置換で、1番多い文字を調べてから効率の良さを調べた。文字数が少ないなら全ての文字に対して何文字が効率が良いか調べるべきだったね。まあタブだけど。なお「倀改行」とか「空白改行」はリードだろうきっと。
ではタブ2つに関して置換しよう。以下置換コード。
{“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倁\” \”\t\t\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倀\” \”\t\t\t\t\t\” \”単\” \”投コメ\” \”部分一致\””} |
文字数等の情報は以下。
No.(色) | 置換前の文字数 | 置換前のコメント数 | 置換後の文字数 | 置換後のコメント数 |
1 | 1268 | 2 | 1228 | 2 |
2 | 1978 | 2 | 1709 | 2 |
3 | 2310 | 3 | 1991 | 2 |
4 | 877 | 1 | 814 | 1 |
5 | 2827 | 3 | 2537 | 3 |
6 | 2746 | 3 | 2459 | 3 |
7 | 2160 | 3 | 1855 | 2 |
8 | 1984 | 2 | 1704 | 2 |
9 | 1690 | 2 | 1501 | 2 |
10 | 2665 | 3 | 2321 | 3 |
11 | 1595 | 2 | 1381 | 2 |
12 | 1484 | 2 | 1306 | 2 |
13 | 1639 | 2 | 1411 | 2 |
14 | 1065 | 2 | 962 | 1 |
15 | 2147 | 3 | 2029 | 2 |
16 | 1267 | 2 | 1110 | 2 |
17 | 306 | 1 | 284 | 1 |
18 | 214 | 1 | 208 | 1 |
置換 | – | 1 | – | 2 |
合計 | 30222 | 40 | 26810 | 37 |
2回の【置換】で70コメ→40コメ→37コメまで減らせた。これで貼っても別に誰も怒りも笑いも泣きもしないし、表示も変わらんけど、久美子を29枚貼りたい場合は35×29+置換2=1017コメントになってしまい、残念ながら貼れないので段差ーさんが泣いてしまうのだ。
【置換】をどこまで繰り返せばいいかのラインだが、【置換】によりコメント数(置換コメントを省く)が1コメントしか削減出来なくなったところをラインとする。【置換】で1コメント削減したとしても、置換コマンドを記述するために±0になるからDA。当たり前だ。その後さらに【置換】すると格段にコメ数が減ったりするかもしれないが、知ったことではない。雰囲気で察するのだ。
以下効果が無くなるまで置換を繰り返した結果を記述する。無駄に全部書いたのでどっか間違ってると思う。
{“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倆\” \”倀倁\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倅\” \”\t倃\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倄\” \”██\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倃\” \” █\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倂\” \”倀倀\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倁\” \”\t\t\” \”単\” \”投コメ\” \”部分一致\””}, {“time”: “00:00.00″,”command”:”@999″,”comment”:”@置換 \”倀\” \”\t\t\t\t\t\” \”単\” \”投コメ\” \”部分一致\””} |
N | 2回目(上記から) タブタブを倁 |
3回目(多段) 倀倀を倂 |
4回目 空白ブロを倃 |
5回目 ブロブロを倄 |
6回目(多段) タブ倃を倅 |
7回目(多段) 倀倁を倆 |
||||||
文 | コ | 文 | コ | 文 | コ | 文 | コ | 文 | コ | 文 | コ | |
1 | 1228 | 2 | 1006 | 1 | 983 | 1 | 711 | 1 | 708 | 1 | 704 | 1 |
2 | 1709 | 2 | 1494 | 2 | 1324 | 2 | 1280 | 2 | 1215 | 2 | 1152 | 2 |
3 | 1991 | 2 | 1834 | 2 | 1529 | 2 | 1516 | 2 | 1407 | 2 | 1322 | 2 |
4 | 814 | 1 | 641 | 1 | 586 | 1 | 560 | 1 | 540 | 1 | 514 | 1 |
5 | 2537 | 3 | 2373 | 3 | 2102 | 3 | 1728 | 2 | 1646 | 2 | 1593 | 2 |
6 | 2459 | 3 | 2299 | 3 | 2018 | 2 | 1697 | 2 | 1589 | 2 | 1532 | 2 |
7 | 1855 | 2 | 1661 | 2 | 1449 | 2 | 1409 | 2 | 1297 | 2 | 1219 | 2 |
8 | 1704 | 2 | 1515 | 2 | 1326 | 2 | 1285 | 2 | 1210 | 2 | 1112 | 2 |
9 | 1501 | 2 | 1281 | 2 | 1121 | 2 | 1078 | 2 | 1000 | 1 | 951 | 1 |
10 | 2321 | 3 | 2168 | 3 | 1851 | 2 | 1761 | 2 | 1613 | 2 | 1555 | 2 |
11 | 1381 | 2 | 1181 | 2 | 1014 | 2 | 1021 | 1 | 972 | 1 | 896 | 1 |
12 | 1306 | 2 | 1074 | 2 | 959 | 1 | 943 | 1 | 896 | 1 | 832 | 1 |
13 | 1411 | 2 | 1210 | 2 | 1065 | 2 | 1054 | 2 | 999 | 1 | 942 | 1 |
14 | 962 | 1 | 833 | 1 | 745 | 1 | 712 | 1 | 674 | 1 | 629 | 1 |
15 | 2029 | 2 | 1943 | 2 | 1805 | 2 | 1245 | 2 | 1210 | 2 | 1168 | 2 |
16 | 1110 | 2 | 994 | 1 | 873 | 1 | 834 | 1 | 792 | 1 | 741 | 1 |
17 | 284 | 1 | 249 | 1 | 232 | 1 | 225 | 1 | 217 | 1 | 210 | 1 |
18 | 208 | 1 | 187 | 1 | 165 | 1 | 156 | 1 | 154 | 1 | 151 | 1 |
置 | – | 2 | – | 3 | – | 4 | – | 5 | – | 6 | – | 7 |
合 | 26810 | 37 | 23943 | 36 | 21174 | 34 | 19215 | 33 | 18139 | 32 | 17223 | 33 |
7回目の【置換】にて32コメントから33コメントに増えてしまう現象が起きた。6回目の【置換】までにしておき、あとは【分割】するのが良さそうだ。結果70コメント→32コメントとなり、14久美子→38久美子を貼れることとなった。地球は救われたのだ。
疲労が疲れてきたのでまとまらないまとめに入る。今回行った【置換】と【分割】の流れだが
- 使用している一番多い文字に対して、何文字の連続を置換したら良いか調べ【置換】する。
(激マズポイント:使用している一番多い文字に対してでなく、使用している全文字を対象にするとええね) - 上記の最適解が2文字となった場合は全組み合わせを調べて【置換】する。
- 上記を繰り返し、@置換コメによりコメント数が増えてしまう【置換】が発生した場合は【分割】にする。
ってのを自動で作った。
↓
まとめのまとめ。
タブ(\t)を何個か置換しておけ。
さいならー。
※あの某GOD某H●DA某さんの某変態的投稿者コメントを入手したので解剖して舐めまわしてやりたいと思う。あわよくば自分の物として投稿して称賛を浴びようと思う。急ぐのだ。