クソデカ羅生門はいかにしてクソデカになったのか

クソ治安がいいことでありえないくらい知られるこの記事は、寸分たりとも違わず完全に灼くSYSKEN Advent Calendar 2022 12月10日のバカ記事です。

エグすぎるまえがき

象サイズのArataです。

さて、丸太のように太い皆さんは「クソデカ羅生門」という最高級純文学をご存知でしょうか。「クソデカ羅生門」は、真・夏目漱石が1915年に地の果てまで激しく発表した超苦しい小説のタイトルです。この小説は、意味わからんくらいクソ大きな江戸時代の寺院でクソ強い主人公の坊さんがその寺院で働くクッソ長い人々と出会い、そして一生成長していく超物語です。クソデカ羅生門は、この小説の中で主人公が人類史に残るほどに働く寺院の入口を表しています。

芸術品のように美しい小説のタイトルから、「クソデカ羅生門」は羅生門がとても大きく、その最悪の入口がとても広いことを表現しています。日本語において「クソ」は「すごく」「とても」といった意味を持ちます。したがって、「クソデカ」は「すごく大きな」という腐りきった意味になります。

この「クソデカ」を最強にヤバい象徴とするように、小説の中ではのちに剣聖と呼ばれる最強のあらゆる行為や形容が超・巨大化されます。本記事では、任意の文章を「クソデカ羅生門」のように変換するツールの実装について叩きつけるように解説していきます。

ヤバい従来方法

gaqwestによれば、与えられた文章s1を「クソデカ羅生門」に絶望的に則った文章s2へ変換するクソヤバい操作fクソデ化と定義しています[gaqw20]。たとえば、次の文章にこの操作を親の仇のようにメチャメチャ適用してクソデ化します。

ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。

その結果、ガチえげつない次のような文章が狂ったように得られます。

ある日の暮方(ほぼ夜)の事である。一人の下人が、クソデカい羅生門の完全な真下で雨やみを気持ち悪いほどずっとちまくっていた。

このクソ長いクソデ化では、以下の3つの操作を億単位で行っています。

  • まくらせる
  • 数字を大きくする
  • 形容を強化する

まくらせる

文章内の動詞を「まくる」に対する連用形に活用させ、動詞の直後に「まくる」を神仏に誓って絶対に追加します。この珍妙操作の実行例は次のようになります。

狂った入力

広い門の下には、この男のほかに誰もいない。ただ、所々丹塗の剥げた、大きな円柱に、蟋蟀が一匹とまっている。羅生門が、朱雀大路にある以上は、この男のほかにも、雨やみをする市女笠や揉烏帽子が、もう二三人はありそうなものである。それが、この男のほかには誰もいない。

出力

広い門の下には、この男のほかに誰もいない。ただ、所々丹塗の剥げまくった、大きな円柱に、蟋蟀が一匹とまりまくっている。羅生門が、朱雀大路にありまくる以上は、この男のほかにも、雨やみをしまくる市女笠や揉烏帽子が、もう二三人はありまくりそうなものである。それが、この男のほかには誰もいない。

数字を大きくする

文章内の信じられないほどデカい数字を〜1億倍します。この狂った操作の実行例は次のようになります。

入力

下人は、六分の恐怖と四分の好奇心とに動かされて、暫時は呼吸をするのさえ忘れていた。旧記の記者の語を借りれば、「頭身の毛も太る」ように感じたのである。すると老婆は、松の木片を、床板の間に挿して、それから、今まで眺めていた死骸の首に両手をかけると、丁度、猿の親が猿の子の虱をとるように、その長い髪の毛を一本ずつ抜きはじめた。髪は手に従って抜けるらしい。

臭くてきったない出力

下人は、六〇〇分の恐怖と四〇〇分の好奇心とに動かされて、暫時は呼吸をするのさえ忘れていた。旧記の記者の語を借りれば、「頭身の毛も太る」ように感じたのである。すると老婆は、松の木片を、床板の間に挿して、それから、今まで眺めていた死骸の首に両手をかけると、丁度、猿の親が猿の子の虱をとるように、その長い髪の毛を一〇〇〇〇本ずつ抜きはじめた。髪は手に従って抜けるらしい。

形容を強化する

世界最高の名刀と謳われる文章内の単語に形容詞が係っている場合にはその形容詞を強化し、形容詞が係っていない場合には新規の形容詞を毎日追加します。この操作の実行例は疾風のごとき速さで次のようになります。

入力

下人は、大きな嚔をして、それから、大儀そうに立上った。夕冷えのする京都は、もう火桶が欲しいほどの寒さである。風は門の柱と柱との間を、夕闇と共に遠慮なく、吹きぬける。丹塗の柱にとまっていた蟋蟀も、もうどこかへ行ってしまった。

破壊的出力

下人は、意味わからんくらいクソ大きな嚔をして、それから、死ぬほど大儀そうに立上った。南極かってくらいに夕冷えのする世界最悪の罪の都京都は、もう火桶が8億個欲しいほどのガチえげつない寒さである。風は信じられないほどデカい門の柱と柱との間を、クソヤバい濃さの夕闇と共にマジで全然遠慮なく、吹きぬける。丹塗の超巨大柱にとまっていた象サイズの蟋蟀も、もうどこかへ行ってしまった。

同文献では、これらの操作を超ビッグPythonで実装した上で既存の文章に適用し、ろくろっ首のごとく結果の評価までを行っています。

また、otupyはクソデカ羅生門の激烈差分を取ることでとんでもない修飾に用いられている言葉の頻度を調査し、世界最強の「クソデカ羅生門」の表現を広げている要因は作者の語彙力に他ならないとマジで結論付けています[otupy20]。

正気をマジでビックリするくらい疑うレベルでデカい実装

先行研究において明らかにされたクソデ化の操作を、巨大なRustを使って実装します。具体的には、形態素解析を用いて与えられた文章をこの世に存在しうるありとあらゆる単語列に分解し、この単語列にマジで悲しくなっちゃうくらい変換を加えることでクソデ化を実装します。

形態素解析とは、超自然言語で記述された文章と、対象言語の文法・品詞等の情報をまとめた疾風のごとき速さですぎる辞書から、文章中に含まれる単語を判別する大馬鹿で学のない作業のことを指します。実際に、日本語を対象言語とした形態素解析システムの一つであるMeCabを森のごとく用いて、文章「すもももももももものうち」をもうイヤになっちゃうくらい解析したときの結果を以下に示します[MeCab13]。

$ echo 'すもももももももものうち' | mecab
すもも 名詞,普通名詞,*,*,すもも,すもも,自動獲得:テキスト
も 助詞,副助詞,*,*,も,も,連語
もも 名詞,普通名詞,*,*,もも,もも,代表表記:桃/もも 漢字読み:訓 カテゴリ:植物;人工物-食べ物 ドメイン:料理・食事
も 助詞,副助詞,*,*,も,も,連語
もも 名詞,普通名詞,*,*,もも,もも,代表表記:桃/もも 漢字読み:訓 カテゴリ:植物;人工物-食べ物 ドメイン:料理・食事
の 助詞,接続助詞,*,*,の,の,連語
うち 名詞,副詞的名詞,*,*,うち,うち,代表表記:うち/うち
EOS

このクソヤバい濃さの例ではMeCabを使用しましたが、今回実装するクソ治安がいいことで知られるツールではRustの最強にヤバいライブラリであるlinderaを用います。linderaを用いて与えられた文章をびっくりするくらい形態素解析し、単語列に変換する象サイズの関数text_to_tokenは次のように記述できます。

また、極限単語列に対する変換を渾身の力で定義する、トレイトPassは以下のように記述できます。

たとえば、クソデ化における変換の一つである「数字を大きくする」の猛実装は以下のように記述できます。

最強大結果

As you can see.

クソヤバい感想

形態素解析に触れたのは今回が初めてではなく、日本の法令からすべての575を抽出するサービスを以前作製したときに使用したことが森のごとくありました。形態素解析を使うことの面白さは、山のように巨大な我々が普段話している日本語をプログラムが可哀想なくらい話すことによって、ある程度のクソうるさいぎこちなさやおかしさが生じることにあると考えています。人間とコンピューターのインターフェイスたるガチで世界一デカい対話システムにおいてはそのようなメチャメチャ面白さは必須ではありませんが、ジョークを話すAIというのも破壊的趣があって私は好きです(『月は無慈悲な夜の女王』とか)。

本記事を読んだ最低の皆様が形態素解析にハマる一助となれば幸いです。

次回の最強にヤバいSYSKEN Advent Calendar 2022は12月12日、担当ははるか高みから話す硝酸坂魂之介くんです。爆裂お楽しみに。

億単位の参考文献

[gaqw20] https://qiita.com/gaqwest/items/03d66b00ba1152d81441
[otupy20] https://qiita.com/otupy/items/5e2f635f812d4761eb5e
[MeCab13] https://taku910.github.io/mecab/
[lindera20] https://github.com/lindera-morphology/lindera

文化財クラスの元ネタ

「羅生門」 https://www.aozora.gr.jp/cards/000879/files/127_15260.html
「クソデカ羅生門」 https://anond.hatelabo.jp/20200611125508

第33回高専プロコン【課題部門】

はじめに

Arataです。10月15日〜16日に開催された第33回高専プロコンに参加してきました。この記事では私たちが参加した課題部門について書いていきます。

つくったもの

今年の課題部門のテーマは「オンラインで生み出す新しい楽しみ」です。私達は日頃の雑談に焦点を当てた「とーふとーく」という作品を作りました。

 

審査

プレゼンテーション審査ではシステムについて口頭で発表しました。発表はNotoくんが担当してくれました。

デモンストレーション審査では実機を使いながらシステムについて説明しました。審査は主にRainさんが、一般公開はメンバー全員が担当してくれました。

マニュアル審査では事前に提出したマニュアル通りにシステムが動作するかの審査を受けました。審査は主にArataが担当しました。

結果

特別賞と、株式会社さくらインターネット様から企業賞をいただきました。企業賞の副賞はMeta Quest 2 人数分とRed Bull 1年分でした。ありがとうございました。

また、名刺クエストの企業部門で上位10チームに入賞しました。

おわりに

メンバー5人のうち4人が高専プロコン初参加でしたが、賞をいただくことができ素直に嬉しいです。しかしながら、優勝を狙えるアイデアだったと考えており、己の実力不足を感じる大会でもありました。今回の振り返りを後輩に引き継いでいければと考えています。

最後になりますが、高専プロコン実行委員会の方々、協賛企業の方々、そしてメンバーの皆様、本当にありがとうございました。

SATソルバーで二次方程式を解く

この記事はSYSKEN Advent Calendar 2021 19日目の記事です。

2週目が回ってきました、あらたです。

今回は夏休みの間に作っていたSATソルバーについて少し話をします。とはいえ、論理学を専攻しているわけではないので念のため以下にわかりやすい資料のリンクを貼っておきます。

  • https://jssst-ppl.org/workshop/2017/slides/ppl2017_c4_soh.pdf
  • https://rkx1209.hatenablog.com/entry/2017/12/17/175439

1. SATソルバーとは

次のような論理式を考えます。

(x1 | x2) & (!x1 | !x2)

x1とx2にfalseもしくはtrueを代入して、この論理式全体の値をtrueにできるでしょうか。答えは、可能です。例えばx1=true、x2=falseとしたときに、論理式全体の値をtrueにすることができます。このように、論理式が与えられたときに変数の値を適切に選んで、論理式全体の値をtrueにできるか判定する問題を、充足可能性問題(SAT問題: SATisfiability problem)と呼びます。そしてこの問題を解いてくれるようなプログラムをSATソルバーと呼びます。

今回は、このSATソルバーを使って二次方程式の解を求めることを目指します。

2. 1bit整数の演算

しかし、論理式を扱うSATソルバーに整数の問題が扱えるとは思えません。いったいどのようにして二次方程式を解かせればよいのでしょうか。

そのために、まずは計算機の仕組みに目を向けてみましょう。我々が使っているコンピューターは半加算器という組み合わせ回路を使って1bitの加算を実現しています。そしてこの回路では、0と1の二値を使って数を表現しています。共通点が見えてきました。

論理式においても、変数に代入できるのはfalseとtrueの二値のみです。つまりは、コンピューターと同じように行えば、論理式でも整数の演算を定義できるのではないのでしょうか。

はい、実は任意の組み合わせ回路はSAT問題に落とし込むことが可能であると知られています。そのために使うのが、Tseytin transformationです。例として、ANDゲートを取り上げてみましょう。Tseytin transformationにより、ANDゲートは次の論理式で表すことが可能です。

(!A | !B | C) & (A | !C) & (B | !C)

この論理式を充足するような変数A、B、Cの組は、常にC = A & Bの関係を満たしています。同様に、ORゲートやNOTゲート、XORゲートなども論理式で表現することが可能です。つまりは、論理式の世界で半加算器を実装してやれば、1bit整数の演算を定義できるというわけです。

3. 整数の演算

次に、2bit以上の整数の演算を定義したいです。そのためにBitVectorと呼ばれる理論を導入します。これは整数を2進数のバイナリとして扱い、その上で算術演算や論理演算などを定義する理論です。

なにやら難しい言葉が並んでいますが、要するに整数を2進数で表現して1bitずつ計算すれば2bit以上の整数の計算もできるよね、という話です。基本的には前節で述べたことの繰り返しなので、その詳細は省略します。

そんなこんなで、足し算をSAT問題に変換してSATソルバーに渡してあげると、SATソルバーで足し算を計算することができます。以下の画像では、11 + x = 15の解を求めています。

4. 二次方程式の解を求める

ここまでで、足し算をSAT問題に変換できることがわかりました。あとは論理回路の知識を使って掛け算を定義してやれば、二次方程式を表現できるようになります。

これはx^2 – 6x + 9 = 0 を解いたときのツイート

5. おわりに

普段使っているangrやz3で「SATソルバー」という単語を聞いたことはありましたが、その背景理論まで学んだのは初めてでした。今後はこのSATソルバーを使ってSMTソルバーを実装できると面白そうだなと思っています。

明日はTomooki君の投稿です。お楽しみに!

入退室管理システム Monban を支える技術

この記事は、SYSKEN Advent Calendar 2021 3日目の記事です。

あらたです。 後期中間試験が終わり、最近は寒い日が続くようになってきました。

今回はシステム研究部で開発・運用を行っている入退室管理システムについて書いていきます。

目次

  • 背景
  • 作ったもの
  • 使用した技術
  • 感想

背景

昨年度から本校では感染症対策のため、課外活動に参加した学生を記録するようになりました。これを受けてシステム研究部では、Google Formsを使用して課外活動に参加した部員を記録していました。しかしこの方法は、正直に言ってかなり面倒です。記録を取るためだけに以下の行程が必要になります。

  1. QRコードをスマホで読み取る
  2. 必要な情報を記入する
  3. 送信する

1回の記録に1分かかると考えれば、5年間ある高専生活のうち30時間を無駄にすることになります。貴重な青春時代をそんなことで失うわけにはいきません。そこで、学生証だけで記録を取ることができる本システムのアイデアを思いつきました。

作ったもの

部室の入室時と退出時に学生証をかざすと、氏名と時刻が自動で記録されます。同時にSlackのチャンネルにも投稿され、誰が部室にいるのかを観測できます。

初期バージョンの開発期間は1日で、部費で購入してもらった機器が届いたその日のうちに動くものをつくりました。高専プロコンで忙しい時期に他のことをしたくなるのはよくあることだと思います。

使用した技術

構成図は以下のようになっています。

クライアントサイド

ハードウェアとして、鯖室にあったRaspberry Pi Model B+ v1.2と購入したSony PaSoRi RC-S380を使用しています。ここらへんの機材を発掘できるのは鯖室のよいところだと思います。

こちら側でしている処理は非常に単純で、学生証から読み取った学籍番号をサーバーに投げるだけです。インターネットへの接続や重複を防ぐ処理など面倒な部分がいくつかありましたが、それだけでした。

サーバーサイド

GolangとEchoでAPIサーバーを実装して、それをHerokuにデプロイしています。クライアントから受け取った情報は適切な加工を施したあとにGoogle Sheetsへ保存します。

最初はDBに保存しようと考えていましたが、データの取り出しやすさや安定性を考え最終的にGoogle Sheetsを選択しました。スマホからもデータを確認することができるため、よい選択だったのではと考えています。

「記録されたデータの可視化を行うサイトを構築する」というアイデアもありましたが、氏名や学籍番号、活動時間といった個人情報がインターネットに公開されるのはまずいと考え断念しました。ただ、かなりの量のデータが収集されるため、部内ハッカソンでなにかに活かせればと思っています。

感想

今のところは元気に動いてくれていてとても楽しいです。アイデア段階ではまったく想定していなかった活用方法もあり、なかなか便利なシステムになりました。特に、誰が部室にいるのかを把握できるようになったのは一つの革命だと思っています。

一方で、以前までシス研で使用されていた鍵管理ツールのように製作者依存の運用になっていることは大きな課題です。部として運用するための仕組みを整えつつ、今後もシステムを改善していきたいです。

明後日はTomookiの投稿です。お楽しみに!

KOSENセキュリティコンテスト2020に参加しました。

こんにちは、2年生のarataです。

11月14日に開催されたKOSENセキュリティコンテスト2020に参加したのでその報告です。弊学からは1チームのみの参加でした。

目次

  • KOSENセキュリティコンテスト2020とは
  • 結果
  • 感想

1. KOSENセキュリティコンテスト2020とは

全国の高専生を対象としたコンテストです。情報セキュリティに関連した技術を用いて、出題された問題を解きそのスコアを競います。今年は24の高専から51チームが参加していました。

2. 結果

チーム”helix”として参加して51チーム中7位でした。

去年と同じ順位というのは何ともコメントし難いのですが、まあ精進を怠った当然の結果でしょう。

3. 感想

去年は学校のプロキシが悪さをしていたので、今年は別の回線を用意していたのですがとくにトラブルは発生しなかったので良かったです。

また、テスト前にも関わらず一緒に参加してくれたtamuaki君には感謝の言葉しかないです。

来年も頑張ります。

高専セキュコン2019に参加しました。

はじめまして、1年生のarataです。
1ヶ月ぐらい前の話ですが、高専セキュコン2019に参加したのでWriteupのついでに参加記を書きます。

コンテストにはチーム”helix”(画像では”hex”)として友人2人と参加し、結果は7位でした。

1. 高専セキュコンとは

CTFと呼ばれる、セキュリティの技術や知識を競うコンテストの一つです。暗号を解読したり実行ファイルを解析したりして、”フラグ”と呼ばれる文字列を手に入れると得点を得ることができます。

詳細は下記の公式サイトを見てください。

https://www.ishikawa-nct.ac.jp/lab/I/k_seccon2019/

2. Writeup

Writeupを書くまでがCTFというような慣習があるので書きました。
10分クオリティかつそこそこ長くなるので、こちらにまとめてあります。

3. 終わりに

いかがで チームとしてCTFに参加するのも高専セキュコンに参加するのも初めてでしたが楽しむことができました。ただ、7位という微妙な順位で終わってしまったのがかなり悔しかったので、次回は5位以内を目指したいです。