CodeIQ × はてな エンジニア夏祭り2013 第1夜 はてなの挑戦状 に参加した。「ワンライナーで書けるっしょ!」と思って pry 立ち上げて粘ったものの、全然そんなことない回答に仕上がりました。
設問は次の通りでした。
■ 課題 以下のようにスパゲティ(spagetti)という文字 50 個分をバラバラにしてランダムに配置した文字列があります。この中に前から順番に「n」「e」「a」「p」「o」「l」「i」「t」「a」「n」という順番でナポリタン(neapolitan)という文字が隠れています。その該当文字を抜き出し、前後に [ ] を付け加えてください。 ------- gtgtsgipgttptinggipsppaigsesgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieataatppiitgiapsteitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaetottissgggtttaipappgstsptttgtpispattgegstltiappseisapgistaiagteeiptptpisaieisagstapeteietgteiisgtiptstgtstasspeatspptitttatteastsgtptgtasggpniaaeteaisett ------- 例として、以下の様な状態に文字列を変換できれば正解です。 ------- gtgtsgipgttpti[n]ggipsppaigs[e]sgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieata[a]tppiitgia[p]steitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaet[o]ttissgggtttaipappgstsptttgtpispattgegst[l]tiappse[i]sapgis[t]aiagteeiptptpisaieisagstapeteietgteiisgtiptstgtst[a]sspeatspptitttatteastsgtptgtasggp[n]iaaeteaisett ------- ■ 注意事項 - 必ず文字の先頭から [n][e][a][p][o][l][i][t][a][n] という並びになるようにしてください - 例えば「i」など複数回出現するような文字の場合は [l] と [t] の間にあれば、どの i に [] がついても問題ありません ※ 解答は作成したプログラムのソースコードをtxtファイルに貼り付けていただき、そのファイルのみをアップロードしてください。
噴飯コードですね、はい。特に each_with_index がだめだと反省しています。設問には想定時間10分って書いてありますが、全然10分で終わっていません。優秀な解答がブログで示されるようなので楽しみにしています。
【追記】
PHP でも書いたので貼っておきます。そもそも正規表現にする必要なかった^^;