作詞支援ツールを作ろう
締め切りが 2017/11/04 10:00 AM なので,その 1 分後に投稿されるように予約
設問
あなたが所属しているプロジェクトでは、様々な楽曲を扱っていましたが、ある日作詞家から作詞支援ツールの開発を依頼されました。
それは、特定の言葉と同じ韻を踏む(母音が一致している)言葉を探すというもので、例えば「試合(SIAI)」と「気合(KIAI)」というように、 特にヒップホップでは欠かせない要素です。
もちろん、実際の曲作りはこんな定石に従うとは限りませんが、まずは「隗より始めよ」ということで、手始めとして入力された文から母音を抽出するプログラムを作ることになりました。
求められるプログラムの前提条件は、以下の通りとなります。
・ 標準入力から、ひらがなのみで構成された文が一行送られる
・ 文字コードとしてUTF-8を想定する
・ 入力文は、1文字以上32文字以下とし、後述する表に定める文字コードのひらがな以外は含まない
・ 入力文から促音である「っ」を取り除いたうえで、ローマ字(Wikipediaへのリンク)に変換し、母音のみを抽出する
・ 母音のみの抽出となるため、ローマ字の種類は訓令式かヘボン式か問わないものとする
・ 母音のみの抽出となるため、撥音「ん」は無視して構わない
・ “てぃ”など、ローマ字の種類によって未定義の文字は入力に含まれないものとする
・ 母音は小文字のアルファベット(a/i/u/e/o)として扱うこと
・ 抽出した母音を連結し、1つの文字列として標準出力に返すこと
ここで、入力として想定される文字コード(UTF-8)とひらがなの対応は以下になります
そして以下が、入力と出力例になります。
作詞支援というのは奥の深いテーマで、今回取り上げた語呂以外にも、”意味の近い単語を探したい”など実際のニーズは様々です。
ただ一方で、既存サービスはいくつかありながらも、決定版といえるようなものがまだ世の中に存在しないのも事実です。
特に、個人的には”新語の対応”が課題と感じています…
この問題をきっかけに、世の中にはこんなニーズがあるんだということを知ってもらい、挑戦者の皆様が今後何か新しいサービスを開発する上でのヒントになれば幸いです。
【問題】
標準入力から、ひらがなのみで構成された文が一行送られます。
この文から、促音を取り除いた上でローマ字に変換し、母音のみ(a/i/u/e/o)を抽出して、その結果を連続した文字列として標準出力に返してください。
================================================================================
f = function(s) {
boin = c("a", "a", "i", "i", "u", "u", "e", "e", "o", "o", "a", "a", "i", "i", "u", "u",
"e", "e", "o", "o", "a", "a", "i", "i", "u", "u", "e", "e", "o", "o", "a", "a", "i",
"i", "u", "u", "u", "e", "e", "o", "o", "a", "i", "u", "e", "o", "a", "a", "a", "i",
"i", "i", "u", "u", "u", "e", "e", "e", "o", "o", "o", "a", "i", "u", "e", "o", "a",
"a", "u", "u", "o", "o", "a", "i", "u", "e", "o", "a", "a", "o", "o", "o")
s = gsub(".([ゃゅょ])", "\\1", gsub("ん", "", gsub("っ", "", s)))
i = utf8ToInt(s) - 12352
cat(paste(boin[i], collapse = ""))
}
# f(readLines(file("stdin", "r")))
f("さとう")
f("しょうゆ")
f("にほんしゅ")
f("いんをふむ")