お馬の写真 別館

「お馬の写真」管理者による徒然なるブログ

言語処理100本ノック 2015 第1章 00〜04

   


言語処理100本ノック 2015」というのを知ったので、ちょっとpythonの勉強のつもりでチャレンジ開始。
まずは「第1章: 準備運動」の00から順に着手。

00. 文字列の逆順

文字列”stressed”の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

こんな関数で実現してみました。スライス使うだけですね。

 

01. 「パタトクカシーー」

「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.

同じくスライスを使うだけですね。

 

02. 「パトカー」+「タクシー」=「パタトクカシーー」

「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

zip関数使って[(‘パ’, ‘タ’),(‘ト’, ‘ク’),…]というタプルのシーケンスを作っておいて、x+yで[‘パタ’, ‘トク’,…]というシーケンスにした上で、joinを使って1つの文字列に…という作りです。

 

03. 円周率

“Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.”という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

いけているかどうかはわかりませんが、これもワンライナーで書いてみました。

まずsplitを使って文字列のリストに分割。それぞれの文字列に対してlenで文字列長を取得すれば簡単なのですが、例題には「,」「.」が含まれており、わざわざ「(アルファベットの)」という注記が入っていることから、アルファベットだけのリストに作り直してからlenで要素数を数えるようにしてみました。
ちなみに課題に書かれている”Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.”という文字列を入力すると

というリストが取得できます。

04. 元素記号

“Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.”という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

1行がちょっと長くなってきたので、2行に分割。

enumerateを使ってインデックスを付けることで「何番目」という要求に対応。
1,5,6,…はposで受け取るのですが、インデックスがposで指定された中に含まれていれば1文字、そうでなければ2文字、というのをスライスを使って実現してみました。
ちなみに、課題の”Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.”と[1, 5, 6, 7, 8, 9, 15, 16, 19]を引数で渡して実行することで、以下のような辞書を取得できます。

まず00〜04までの5題をやってみましたが、どこまで続けられるかな?

 - プログラミング