くそなぞなぞ 難問題の系統とその解き方
この記事は,くそなぞなぞ Advent Calendar 2020 14日目の記事です。
自己紹介
anagohirame と申します。2020年12月現在,残り僅かな学生時代を過ごしています。
趣味として競技プログラミング(以下競プロ)を楽しんでおり,現在 AtCoder では青〜黄の境界をさまよっています。
くそなぞなぞとは
これから言及する「くそなぞなぞ」とは,競プロをしている界隈にて発生した,唯一解のあるなぞなぞを Twitter 上で出題し楽しむ,あるいは HackerRank などのオンラインジャッジにてコンテストの形式で出題し,その得点を競う文化のことを指します。
なお,「くそなぞなぞ」という名称自体はおそらく Twitter の「クソなぞなぞbot」というアカウントに由来しています。まさに玉石混交の構成で,質のジェットコースターを楽しむことのできる良質(逆説的ですね!)なコンテンツです。おすすめはこれとかこれとか。
過去さまざまな作者(競プロにちなみ writer と呼ばれる)によりコンテストが開催されてきましたが,現在ではりきぽんさんと尺さんが中心となって運営されているくそなぞなぞ Beginner Contest(通称くBC)が界隈の中心的な存在になっています。
くそなぞなぞ Beginner Contest とは
くBCは競プロ入門用(ほんとか?)コンテストである AtCoder Beginner Contest(ABC) にちなんだもので,難易度順に $ 100n\ (n \in \mathbb N,\, 1\le n\le 6)$ 点がつけられた6問のなぞなぞを解き,その総得点および解答時間を競うコンテストです*1。こちらの Twitter アカウントでコンテストの開催予定やコンテスト結果,レーティングなどが発表されます。レーティングは本家 AtCoder と似た計算式によってパフォーマンスと共に計算され,コンテストごとにランキングが表示されます。
本論への導入
私は直近の くBC 010 にてレーティングが2010となり,くBCの rated 範囲である2000未満の領域を脱出しました。(くBC010の結果および現在までのレートランキング。anagohirame が私です)
ここに至るまでの rated コンテストの結果をまとめた表が以下です。
コンテスト | 順位 | パフォーマンス | レーティング |
---|---|---|---|
くBC002 | 1 | 2400 | 1200 |
くBC004 | 6 | 2240 | 1639 |
くBC005 | 58 | 1195 | 1763 |
くBC006 | 6 | 2286 | 1879 |
くBC008 | 21 | 1562 | 1903 |
くBC009 | 6 | 2121 | 1949 |
くBC010 | 1 | 2400 | 2010 |
手前味噌ながら,7回中5回で1桁順位となかなかの高パフォーマンスを維持できているように思います。ちなみに参加者はコンテストごとに100人前後で,1桁順位はおよそ上位10%に相当します。
この結果を出すために何か精進をしたかというと,全くしていません。くBCに出るようになってから辞書を読む機会が増えたとか,そういったこともありません。
本記事では,現在の600点レベルの問題(いわゆる難問)の構造を分析し,そのうち私がコンテスト中に正解した問題については思考過程を明らかにすることで,知見を共有することをねらいとしています。
記事の性質上ネタバレを多分に含むのでご注意ください。
本論:F問題の構造と思考過程
典型パターン:最後の名詞が集合→その要素を探索
「○○で○○な△△ってなーんだ?」という問題文で,解答全体が△△という集合の一種となっており,その語を異なるやり方でパースすることでその中に他の○○の要素を見出す,という形式は典型となっています。
くBC002-F(参加・AC)
昔のレベルの症状ってなーんだ?
答え:過呼吸/過去級
本問はF問題のなかでも最も単純な構造をしており,「昔」「レベル」をそれぞれ言い換えてつなげると症状の一種となります。
本番の私は「昔 類語」「レベル 類語」などで言い換えを探索しつつ,それらのなかである症状の部分文字列になるようなものがないかを探していくことで「過呼吸」に到達しました。
難しいポイントは症状の全探索では答えにややたどり着きづらいことでしょうか。この問題形式であっても,全探索がうまくいくとは限りません。
いずれにせよ最易でしょう。
くBC003-F(不参加)
9より大きい薬ってなーんだ?
答:糖衣錠/十以上
これも同様の構造。「より大きい」という表現をそのまま答えに使うとは考えづらく,これを言い換えることで「10以上」を導くことは比較的容易でしょう。ここから「いじょう」を suffix として持つ薬を考える/探索する,という手順になるかと思います。
図示では「とお」と「とう」を類音として処理していますが,音声ベースで考える際にこの二者はもはや区別されませんから,図よりも考察ステップは1つ少なくなることが予想されます。
また構成要素が2つしかなくパターンを色々試すような状況でもない,といった点も難易度を下げるでしょう。
くBC010-F(参加・AC)
今いる場所が地の底だと教えてくれる、お菓子の飾り付けってなーんだ?
答:ココアビス/ここアビス
同様の典型構造ながら,本番での正解率がかなり低かった問題。原因は「ココアビス」の低い知名度と「アビス」の要求語彙にあるかもしれません。
私の場合は,「今いる場所」を「ここ」に言い換えたと仮定するとお菓子の飾り付けとして「ココア」を prefix に持つものが考えられるため,ココアを用いたお菓子の飾り付けを探索することでココアビスケット,さらにその略称としてのココアビスにたどり着きました。
ここで重要なのは,ACするために,アビスやココアビスなどの難単語を自ら導き出す必要はないということです。検索の過程で文字列を適当にスライスしてそこにアビスを見出す,あるいは単語の存在を仮定して「ココアビス」で検索をかける*2,といった行動でACの可能性を高めることができます。
くBC007-F(参加・AC)
足取りを誇大にアピールする虫ってなーんだ?
答:盛る歩調(モルフォ蝶)
ここまでにはない要素が2つあります。
- もじる
「もるほちょう」と「もるふぉちょう」は発音がやや異なります。この程度の違いは多々含まれるので,考察ステップとみなさない方がよいとすら言えます。
- 俗語に言い換える
「誇大にアピール」を言い換えようとしても検索のみで「盛る」にたどり着くことは難しく,自力で思いつくことが要求されるでしょう。しかしこの手のパターンがあることを知っておけば,パターンの選択(いわゆる「解法ガチャ」)の段階で言い換え先の俗語を挙げておくことで,ACの可能性を高めることができます。
実際私も本番では「盛る」を頭の片隅に置いた上で虫の種類を探索し,蝶に行き当たった際に「もる」を prefix とするモルフォ蝶の存在に至りました。
くBC009-F(参加・AC)
多くの財産を残して死んだソフトウェアの種類ってなーんだ?
答:ようけ遺産ソフト(表計算ソフト)
前問とかなり類似した構造であることがわかりますね。
こちらは「ようけ」への言い換えが俗語かつ方言ということでより難しい一方で,ソフトウェアの種類が虫に比べかなり限られ探索がしやすいため,本問と前問のどちらを難しく感じるかは人によってかなり異なるでしょう。
特に言い換え先として「遺産」を固定した上でソフトウェアを探索すると「表計算ソフト」は容易に見つけられるため,残りの「ひょうけ」が「多く」を意味する何らかの単語をもじった結果ではないか,と半ば決め打ちにより答えを探すことが可能です(本番の私のパターン)。
くBC005-F(参加・WA)
まさに国家がやることってなーんだ?
答:ドネーション/どネーション
構造としてはこれまでと共通で単純ですが,言い換え先として「ど」を自発的に思いつくことが難しいことと,「やること」の集合からドネーションを思いつくことはもはや不可能であることから,難易度はかなり高いと考えられます。
ACまでの思考過程としては,国家を言い換えた「ネーション」が動詞の名詞化を表す英語の suffix である -nation に通ずることからあとは「まさに」の言い換えの試行を繰り返す,といったものになるでしょう。前問でも述べましたが,ひとまず一部分を固定することは案外効果的です。
くBC008-F(参加・WA)
霧を敬遠する職業ってなーんだ?
答:アルケミスト/歩けミスト
「敬遠」→「歩け」の言い換えがすこぶる特殊です。ここまでくると該当部分は後から当てはめて納得するよりほかなく,前問と同様に,霧を言い換えた「ミスト」が人を表す英語の suffix である -ist に通ずることから,「ミスト」で終わる職業を探索することで答えにたどり着くという過程が現実的でしょう。*3
なお,このような prefix や suffix を固定した探索にはgoo辞書が有用です。
くBC006-F(参加・AC)
蚤の市の様子を尋ねる主役の女性ってなーんだ?
答:フリマどんな(プリマドンナ)
「主役の女性」と「プリマドンナ」はほぼ同義とみなして図示したためやや特殊ということで後半の位置としました。語彙力によってはプリマドンナを陽に導くことが可能であり,蚤の市→フリマとこれが容易に重なることから,瞬殺も可能です。かなり個人差のつく問題と言えるでしょう。
非典型パターン:全要素を言い換える
くBC004-F(参加・WA)
3級の童謡ってなーんだ?
答:ターシャリーライム(ナーサリーライム)
2要素しかない問題ですが,この両者を言い換えそれらを組み合わせるという構成になっています。
このような特殊な構造ながら「3級→ tertiary」「童謡→ nursery rhyme」どちらの英訳も一般的な語彙とは言い難く,こと tertiary については他の英訳も考えられる中で理系色の強い*4語であり,言い換えをターシャリーに固定するのは難しかったかもしれません。
なお,このような全要素を言い換える問題は現在600点問題では1問しか見られないものの,500点なども含めると複数回の出題があります。稀な出題であることそれ自体により難易度が上昇するという面もありますので,このパターンを知っておくだけでもいくばくかは有利です。
ごく稀なパターン:言い換えをしない
くBC001-F(不参加)
ニッチな法ってなーんだ?
答:二進法
初回ながら非常に特殊な構造で,最後に紹介することとしました。用いられているテクニックが同音異義語・同形異音語のみであり,類義語が用いられていません。以降のくBCではこれまでご覧いただいたように言い換え/類義語がかなりの主要テクニックとなります。よって本問は黎明期の味わいと言える一方で,この傾向の出題が今後新たになされる可能性も十分に考えられます。パターンとして押さえておくと役に立つ……かもしれません。
おわりに
以上に10問の600点問題の構造を図示し,ACを得るための思考過程の言語化を試みました。
くそなぞなぞはしばしば「語彙力ゲー」と評されます。もちろん語彙力は主要な武器ですが,それ以外にも一要素を決め打ってからの探索,俗語への言い換え,英語の prefix/suffix への接続など,テクニックによってもACへと近づくことができることがおわかりいただけたのではないでしょうか。
本記事が皆さんの快適なくそなぞなぞライフの手助けとなれば幸いです。お読みいただきありがとうございました。
*1:より高難易度のくそなぞなぞ Regular Contest(くRC)や,より低難易度のくそなぞなぞ Short Contest(くSC)なども低頻度ながら開催されますが,それらを含めた広義の概念もまた「くBC」と呼称されることが多いです。
*2:このような思いついた語が実在する概念かを調べるための検索の場合には,画像検索も有効です。例:「ココアビス」での Google 画像検索結果 商品名に「ココアビス」の文字列があることが確認できます。
*3:霧の英語には mist のほかに fog などもありますが,「フォグ」よりは「ミスト」の方が文字列としての応用性が高いと見て,まずは「ミスト」に決め打って探索することが望ましいでしょう。
*4:有機化合物である第3級アルコール tertiary alcoholや 1-ブタノールの構造異性体であるtert-ブチルアルコールなどからこの語を確認することができます。