編集:うえだはじめにこの連載ではゴルフについて扱います。ゴルフと言っても本当のゴルフではなく、コードを短く書くことを競うコードゴルフです。ゴルフについて詳しくは以下をご参照下さい。簡単な問題を出題して、次回でその解答を解説しつつまた出題、というサイクルで進めて行きます。解けた人はこのページの下部にあるコメント欄でブログのURLを書いていただければ存在がアピールできるかもしれません。コードを縮めても特にいいことはありませんが、ちょっとしたパズルとして楽しんでいただけたら良いなと思います。hogeに対してegeogehogeを出力する、という問題でした。さんは解答例をゴルフして、文字列のインデックスを使った方法でパーを越えておられました。(34B)というようなものでした。二人ともこのコードは末尾に改行が無いことを前提にしていることに気付いておられました。さんには改行がある場合の解答も提示していただきました。(34B)正規表現を使う方法ゴルフでは、素直に配列や文字列のインデックスを使うと長くなってしまうケースが多いようです。今回もまさにそういった問題で、文字列のインデックスを離れて正規表現を使うと劇的に短くすることができます。文の方を少し細かく見ていきましょう。表記を用いると文字列リテラルの中で変数を参照することができます。前回マッチした文字列が入っている特殊変数です。マッチすることになります。いう文字列になります。これによって末尾二文字をマッチさせることになり、条件式の評価を繰り返すことで文字列を末尾から一文字ずつ足していくことができます。有用なものが多いので把握しておくと良いと思います。特殊変数を覚えるのは大変ですが、このあたりのものは日常的なワンライナーでも便利に使用できたりするので、意外と覚えておいて損は無いのではないかと思います。方がゴルフ的に覚えないといけない特殊変数が多くて大変だったりします。省略可能であるという点は、条件式に正規表現が出てくるとその正規表現を実行してマッチしたかどうかによって分岐する機能を使ったものです。出たりもするのですが、ゴルフでは時々出現する手法だったりします。今回のまとめ今回は、「文字列を一文字ずつ末尾から取っていく」という処理が正規表現によって短くなるという例を紹介しました。正規表現は使えることに気づくかどうかが勝負の分かれ目になるため、ゴルファーは文字列が絡む問題を見るとすぐに「これは正規表現を使えないだろうか......」と考えるように思います。正規表現は通常のプログラミングでも重要ですが、ゴルフではその記述力や特殊変数への副作用の多さから特に重要です。複雑な問題で正規表現を使っていると毎回新しい発見があり、その奥の深さを実感します。反面、なかなか体系立てて正規表現の利用法を解説するのは難しいのではないかと思うのですが、今回の例でその力の一端をご紹介できたのではないかと思います。よる解答)が見当たりました。興味があれば、実際にどう動いてるか調べてみるのも面白いんじゃないかと思います。いうわけで今回の出題はありません。続きを楽しんでみて下さい。言語でゴルフを楽しめるサイトで、ネタバレなどが無く、個人のランキングなどが出るので真剣な勝負が楽しめます。週間ほど勝負した後でコードが公開される仕様になっています。公開されたコードを解析してテクニックを盗んだり、なんとなくヘンな言語でのゴルフに挑戦したり、問題を投稿してみたり、色んな楽しみ方ができると思います。この連載を一通り読んだら上記のサイトで好成績が収められるかというと、実はなかなか厳しいのではないかなと思っています。この点について、るびまゴルフを始めた動機と絡めて、少し書かせてもらいたいと思います。ゴルフの基本テクニックと論理的思考や発想の転換ゴルフの話をしていて私がよく聞くのは、「ゴルフはちょっと挑戦してみたけど基本的なテクニックがわからなくてお話にならなかった」というようなものです。これはこれで素直な感想なのでしょうが、私は「ちょっと違うぞ」と思うのです。言え、そういった部分を伝えるのはなかなか難しいようで、普通に書いたコードを空白を削るなどして少し縮めてはみたものの、後で我々の書く異様な見てくれのコードと比べて、「ああ、やっぱり何か俺の知らないテクニックがあるんだな」とだけ思ってしまう人が多いように思います。本当に違う部分は往々にしてアルゴリズムの部分だったりするので、そういった定石レベルの差異だと思われてしまうのはゴルファーとしてはちょっと残念なことだったりします。発想の転換こそが重要だった例そういった発想レベルの差がとても判りやすく出た例を一つ紹介したいと思います。コードを定石的な手法で書きました。