第 6 回 正規表現と検索 レポート課題 氏名: 松本 洋輔 学籍番号: C111133A 語学クラス:英語1 コース: 環境サイエンス 1.筆記問題 A. 私の誕生日:1991年4月24日 10進数だと0d1991 0d4 0d24 2進数表示に変換 1991/2 余り 1 995/2 余り 1 497/2 余り 1 284/2 余り 0 124/2 余り 0 62/2 余り 0 31/2 余り 1 15/2 余り 1 7/2 余り 1 3/2 余り 1 1/2 余り 1 これを下から読むと 11111000111 よって2進数表示の 1991は 0b11111000111 となる。 4/2 余り 0 24/2 余り 0 2/2 余り 0 12/2 余り 0 1/2 余り 1 6/2 余り 0 3/2 余り 1 1/2 余り 1 これらをしたから読むと 100、11000 よって2進数表示の 4は 0b100 24は 0b11000 となる。 上記で2進数表示に変換した数値を利用し、16進数表示にする。 まずは、1991の2進数 11111000111を右から4桁ずつに区切る。 そうすると 0011 1100 0111 となる。これを16進数に変換すると 0111 = 7 1100 = C 0111 = 7 となる。 これを左から読み、答えは 0d1991 = 0x7C7 となる。 同様に 4は 0b0100→0x4 24は 0b0001、0b1000→0x18 となる。 2進数の誕生日 0b11111000111(1991年) 0b100(4月) 0b11000(24日) 16進数の誕生日 0x7C7(1991年) 0x4(4月) 0x18(24日) B. 10進数では 1991 + 4 + 24 = 2019 を16進数にする。 まず0x7C7の右側の7と0x4を足す。 7C7 + 4 = 7C(7 + 4) =11→B = 7CB 次に上記の計算結果0x7CBと0x18を足す。 まず B(11)+8 を足し算する。 7CB + 18 = 7C(B→11 + 8)= 19 - 16 = 3 繰り上がり 1 上の計算で繰り上がった分を加え C(12)+1 を計算する。 =7(C→12 + 1 + 1 )=14→E 3 よって16進数では 7C7 + 4 + 18 = 7E3 となる。 C. STDERRはprint(f)文の実行時にメッセージやエラーメッセージをktermに 表示させる役割がある。 2.プログラム問題 A.20種の星座の名前、見れる季節、見れる月、主な恒星、恒星の数、星座の英名を 表示する。 B.作成したデータファイル 蟹座 春 3月 アルタルフ 5 Cancer 獅子座 春 4月 レグルス 15 Leo 乙女座 春 5月 スピカ 15 Virgo 天秤座 夏 6月 ズベン・エス・カマリ 6 Libla 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 魚座 秋 11月 うお座イータ星 21 Pisces 牡羊座 冬 12月 ハマル 10 Aries 牡牛座 冬 1月 アルデバラン 7 Taurus 双子座 冬 2月 ポルックス 17 Gemini 小犬座 春 3月 プロキオン 2 Canis Minor 蛇遣座 夏 7月 ラス・アルハゲ 10 Ophiuchus 琴座 夏 8月 ベガ 5 Lyra 鷲座 夏 8月 アルタイル 8 Aquila 白鳥座 秋 9月 デネブ 9 Cygnus アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda ペルセウス座 冬 12月 ミルファク 22 Perseus オリオン座 冬 1月 リゲル 7 Orion C.見たい星座の見れる季節や、星座の特長を調べる。 D.検索パターン [パターンA] egrep "夏" date_c111133.dat 夏に見ることのできる星座を調べたい。 [パターンB] egrep "3月" date_c111133.dat 3月に見ることのできる星座を調べたい。 [パターンC] egrep "1[0-9]" date_c111133.dat 恒星の数が10個以上の星座を探したい。 [パターンD] egrep "[ァ-ン]座" date_c111133.dat 名前がカタカナの星座を探したい。 [パターンE] egrep "[1-6]月" date_c111133.dat 1月から6月までの間に見ることのできる星座を調べたい。 [パターンF] egrep "春|秋" date_c111133.dat 春と秋に見ることのできる星座を調べたい。 [パターンG] egrep "us$" date_c111133.dat 英名の末尾が us で終わる星座を探したい。 [パターンH] egrep "[^アル]" date_c111133.dat 恒星名が アル で始まる恒星を探したい。 [パターンI] egrep "ア?イル" date_c111133.dat うろ覚えの鷲座の恒星の名前を調べたい。 [パターンJ] egrep "デネブ+" date_c111133.dat 「デネブ」と名の付く恒星を調べたい。 E.実行結果 [パターンA] pan{c111133}% egrep "夏" date_c111133.dat [~/Ruby] 天秤座 夏 6月 ズベン・エス・カマリ 6 Libla 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 蛇遣座 夏 7月 ラス・アルハゲ 10 Ophiuchus 琴座 夏 8月 ベガ 5 Lyra 鷲座 夏 8月 アルタイル 8 Aquila 予想どうり、夏の星座のみ表示された。 [パターンB] pan{c111133}% egrep "3月" date_c111133.dat [~/Ruby] 蟹座 春 3月 アルタルフ 5 Cancer 小犬座 春 3月 プロキオン 2 Canis Minor 予想どうり、3月の星座のみ表示された。 [パターンC] pan{c111133}% egrep "1[0-9]" date_c111133.dat [~/Ruby] 獅子座 春 4月 レグルス 15 Leo 乙女座 春 5月 スピカ 15 Virgo 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 魚座 秋 11月 うお座イータ星 21 Pisces 牡羊座 冬 12月 ハマル 10 Aries 双子座 冬 2月 ポルックス 17 Gemini 蛇遣座 夏 7月 ラス・アルハゲ 10 Ophiuchus アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda ペルセウス座 冬 12月 ミルファク 22 Perseus 予想どうり、恒星数10以上の星座が表示された。 [パターンD] pan{c111133}% egrep "[ァ-ン]座" date_c111133.dat [~/Ruby] アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda ペルセウス座 冬 12月 ミルファク 22 Perseus オリオン座 冬 1月 リゲル 7 Orion 予想どうり、名前がカタカナの星座のみ表示された。 [パターンE] pan{c111133}% egrep "[1-6]月" date_c111133.dat [~/Ruby] 蟹座 春 3月 アルタルフ 5 Cancer 獅子座 春 4月 レグルス 15 Leo 乙女座 春 5月 スピカ 15 Virgo 天秤座 夏 6月 ズベン・エス・カマリ 6 Libla 魚座 秋 11月 うお座イータ星 21 Pisces 牡羊座 冬 12月 ハマル 10 Aries 牡牛座 冬 1月 アルデバラン 7 Taurus 双子座 冬 2月 ポルックス 17 Gemini 小犬座 春 3月 プロキオン 2 Canis Minor アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda ペルセウス座 冬 12月 ミルファク 22 Perseus オリオン座 冬 1月 リゲル 7 Orion 予想と違い1月〜6月以外の月も表示された。 [パターンF] pan{c111133}% egrep "春|秋" date_c111133.dat [~/Ruby] 蟹座 春 3月 アルタルフ 5 Cancer 獅子座 春 4月 レグルス 15 Leo 乙女座 春 5月 スピカ 15 Virgo 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 魚座 秋 11月 うお座イータ星 21 Pisces 小犬座 春 3月 プロキオン 2 Canis Minor 白鳥座 秋 9月 デネブ 9 Cygnus アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda 予想どうり、春と秋の星座のみ表示された。 [パターンG] pan{c111133}% egrep "us$" date_c111133.dat [~/Ruby] 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 牡牛座 冬 1月 アルデバラン 7 Taurus 白鳥座 秋 9月 デネブ 9 Cygnus ペルセウス座 冬 12月 ミルファク 22 Perseus 予想と違い全8種の内、7種しか表示されず蛇遣座(Ophiuchus)のみ表示されなかった。 [パターンH] pan{c111133}% egrep "[^アル]" date_c111133.dat [~/Ruby] 蟹座 春 3月 アルタルフ 5 Cancer 獅子座 春 4月 レグルス 15 Leo 乙女座 春 5月 スピカ 15 Virgo 天秤座 夏 6月 ズベン・エス・カマリ 6 Libla 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 魚座 秋 11月 うお座イータ星 21 Pisces 牡羊座 冬 12月 ハマル 10 Aries 牡牛座 冬 1月 アルデバラン 7 Taurus 双子座 冬 2月 ポルックス 17 Gemini 小犬座 春 3月 プロキオン 2 Canis Minor 蛇遣座 夏 7月 ラス・アルハゲ 10 Ophiuchus 琴座 夏 8月 ベガ 5 Lyra 鷲座 夏 8月 アルタイル 8 Aquila 白鳥座 秋 9月 デネブ 9 Cygnus アンドロメダ座 秋 11月 アルフェラッツ 18 Andromeda ペルセウス座 冬 12月 ミルファク 22 Perseus オリオン座 冬 1月 リゲル 7 Orion 予想と違い始めにアルが付く恒星以外も表示された。 [パターンI] pan{c111133}% egrep "ア?イル" date_c111133.dat [~/Ruby] 鷲座 夏 8月 アルタイル 8 Aquila 予想どうり鷲座の「アルタイル」が表示された。 [パターンJ] pan{c111133}% egrep "デネブ+" date_c111133.dat [~/Ruby] 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 白鳥座 秋 9月 デネブ 9 Cygnus 予想どうり恒星名に「デネブ」を含む山羊座と白鳥座が表示された。 F.結果の考察 [パターンA]は予想どうり夏の星座のみ表示された。"夏"で検索することで季節 が夏の星座が選ばれた。 [パターンB]は予想どうり3月の星座のみ表示された。"3月"で検索することで3月 に見ることの出来る星座が選ばれた。 [パターンC]は予想どうり恒星数が10個以上もののみ表示された。"1[0-9]"と入 力することで恒星数が10個以上のものが表示された。 [パターンD]は予想どうり名前がカタカナの星座のみ表示された。"[ァ-ン]座"と 入力することでカナ文字「ァ〜ン座」というものが選ばれた。 [パターンE]は予想と違い11月と12月の分も表示された。これは"[1-6]月"が1と2 を含むもの全てを選択してしまったためだと思われる。 [パターンF]は予想どうり春と秋の星座のみ表示された。"春|秋" と入力するこ とで春又は秋の星座が選ばれた。 [パターンG]予想と違い、蛇遣座(Ophiuchus)のみ表示されなかった。作成したデー タファイルを見直したところ(Ophiuchus)のsの後に空白があった"〜$"は末尾の 文字から調べるので末尾が空白になっていた蛇遣座は表示されなかった。 修正後の結果 pan{c111133}% egrep "us$" date_c111133.dat [~/Ruby] 蠍座 夏 7月 アンタレス 15 Scorpius 射手座 夏 8月 カウス・アウストラリス 12 Sagittarius 山羊座 秋 9月 デネブ・アルゲディ 13 Capricomus 水瓶座 秋 10月 サダルスウド 22 Aquarius 牡牛座 冬 1月 アルデバラン 7 Taurus 蛇遣座 夏 7月 ラス・アルハゲ 10 Ophiuchus 白鳥座 秋 9月 デネブ 9 Cygnus ペルセウス座 冬 12月 ミルファク 22 Perseus 8種、全て表示された。 [パターンH]は予想と違い正しく表示されなかった。"^〜"は文章の先頭を読み取 るので、文章の先頭に書かれいない恒星名はこの設定では検索できなかった。 [パターンI]は予想どうり鷲座のアルタイルが表示された。"ア?イル"と入力した ことでデータに該当するアルタイルが選ばれた。 [パターンJ]は予想どうり山羊座と白鳥座が表示された。"デネブ+"と入力したこ とで恒星名にデネブと付く星座が選ばれた。 G.利用した正規表現 egrep "夏" date_c111133.dat ダブルコーテーション内の文字を含むもの全てを検索 egrep "1[0-9]" date_c111133.dat 範囲内の数値文字列を含むものを検索 egrep "[ァ-ン]座" date_c111133.dat 全カナ文字の中から該当するものを検索 egrep "春|秋" date_c111133.dat 区切られた要素のうち該当するもの全てを検索 egrep "us$" date_c111133.dat 末尾の文字列のみ探して検索 egrep "^〜" date_c111133.dat 先頭の文字列のみ探して検索 egrep "ア?イル" date_c111133.dat 直前の文字が0または1回出現しするものから検索 egrep "デネブ+" date_c111133.dat 直前の文字が出現しなければならい状態で検索 3.感想 携帯電話などの入力された文字の後に続く単語を勝手に表示してくれ る予測変換は"^〜"の仕組みに似ていると思った。 [パターンG]の結果は最初は何故上手くいかないのか理解できなかった が、原因を見つけることが出来て良かった。 参考文献 基礎プログラミング I 第 6 回 「正規表現と検索」 http://roy/~madoka/2012/r1/06/ 制作者 西村 まどか Cielo Stellato 88星座完全ガイド http://stella.toxsoft.com/