[[HOJ講座]] 長文問題の考察 今回は長文(ここでは規則が定まっていない問題のことを簡略のため長文と定義します)について触れようと思います. 長文問題をしっかりと圧縮しているプレイヤーはここ最近まで一人しかおらず,他のプレイヤーは大きく引き離されていました. 殆ど全ての長文問題でその一人がbestを取り続けていたために人々は何時しかそういう規則のない問題を敬遠するように成って行きました. 自分自身その一人が圧倒的な技術を持っているがために頑張っても追いつけないと思い込んでいましたが,改めて眺めてみるとそうではない事が分かりました. 長文問題の解き方と言うのは完全に決まっている訳ではありませんが基本的なメソッドはやはりこのタイプの問題の 先駆者であるmasさんの書いたhttp://mashojer.web.fc2.com/spring_festival_2012_solutions.htmlの最初の問題の解説を追うのが最も良いでしょう. とは言ってもやはり問題に対してアプローチは大きく異なってきます.と言う事で"こうやれば絶対いい感じに圧縮出来る!!"なんてものは無い訳です. と言う事で各問題に対する自分の考察を書いて行きます.ヒント,と言うタイトルにしようかとも思いましたが,それほどの自信は無いので考察で, §0 経験則 いくつか長文を解いていて得た経験則 -a(X):pa(X-1)などの任意のnに対してpをn回やる と言う関数は使わない方が良い 関数定義に6Bもかかる割にpを繰り返すしか出来ず,さらに分割ができない 一見小回りが利くように見えてa(X):pXqとの相性がかなり悪いので小回りは寧ろ聞かない -単純なn倍関数は使わない方が良い 同じパーツが明らかに多い場合を除き単純なn倍はa(X):pXqよりやや弱いイメージがあります. 一度a(...)でかこってしまうとたとえばb(X):pXq -置換した文字の使用回数が少ない場合は関数を考察しよう 例えば a:10文字 ssrsrrsssaa のような状況の時は,二倍関数や,f(X):sXXとかf(X):ssXXとかf(X):rsssXXとかを作るとすごく有用だったりします -同じ文字を生成するようにしよう a(X):ssssXsssといったような関数を使っていると使える事があります たとえば -違う方針に行く前に一度作った答えもちゃんと見直す 方針がどれくらい思いついているかにもよります.