第6回 基礎プログラミング I レポート課題 XXXXXXXX C109XXXX 英語3 政策マネジメント 1-A 私の誕生日は1990年 7月11日である。暦の仕組み上、月日は 711 ではなく7と11とする。 まず2進数に変換する。10進数を2進数に変換するには、前回のレポートで 述べたように、変換したい10進数を答えが0になるまで2で割っていき、 生じた余りを最後から並べるという方法がある。 1990 / 2 = 995 余り 0 995 / 2 = 497 1 497 / 2 = 248 1 248 / 2 = 124 0 124 / 2 = 62 0 62 / 2 = 31 0 31 / 2 = 15 1 15 / 2 = 7 1 7 / 2 = 3 1 3 / 2 = 1 1 1 / 2 = 0 1 下から読むと 11111000110 よって 0d1990 = 0b11111000110 7 / 2 = 3 余り 1 3 / 2 = 1 1 1 / 2 = 0 1 下から読むと 111 よって 0d7 = 0b111 11 / 2 = 5 余り 1 5 / 2 = 2 1 2 / 2 = 1 0 1 / 2 = 0 1 下から読むと 1011 よって 0d11 = 0b1011 まとめると、私の生年月日を2進法表示にすると、 「11111000110 年 111 月 1011 日生まれ」となる。 次に16進数へ変換する。上で2進数に変換したものを使い、2進数から16進数への 変換を行なう。2進数を4桁ずつに区切り、16進数の変換表に当てはめる。 まず 11111000110 は、0111 1100 0110 に区切られる。 0111 = 7 1100 = c 0110 = 6 よって 0d1990 = 0x7c6 0111 = 7 よって 0d7 = 0x7 1011 = b よって 0d11 = 0xb 16進法表示では、「私は 7c6 年 7 月 b 日生まれ」となる。 参考文献 『生活と情報(2009)』講義レジュメ 「第2回 情報のデジタル化[1] 2進数」 神田直弥 p4 「2進数によるデータ表現」、「10進数から2進数へ」、 「2進数←→16進数の相互変換」 --------------------------------------------------- 1-B 私の名前をアルファベット表記にすると、[Kaneta Asami] である。 これを参考文献の、ASCII コード表をもとに変換する。 K = 0x4b A = 0x41 a = 0x61 s = 0x73 n = 0x6e a = 0x61 e = 0x65 m = 0x6d t = 0x74 i = 0x69 a = 0x61 となる。ASCIIコードの仕組み上、アルファベットの大文字は 4x, 5x のどちらかで、小文字は 6x, 7x のどちらかになることがわかった。 参考文献 基礎プログラミング I 第5回 配列の構造 「ASCII コード表」 西村まどか http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html ----------------------------------------------------- 2-A 日本で国家として承認されている、アフリカの53ヶ国について、 日本での略称と英語表記での略称、独立した年と、国旗の特長をまとめたデータ date06.dat を作成した。 B アルジェリア Algeria 1962 moon star アンゴラ Angola 1975 star ウガンダ Uganda 1962 bird stripe エジプト Egypyt 1922 emblem tricolor エチオピア Ethiopia BC1000 emblem tricolor エリトリア Eritrea 1993 olive tricolor ガーナ Ghana 1957 star tricolor カーボベルデ Gape Verde 1975 star ガボン Gabon 1960 tricolor カメルーン Cameroon 1960 star tricolor ガンビア Gambia 1965 stripe ギニア Guinea 1958 tricolor ギニアビサウ Guinea Bissau 1973 star ケニア Kenya 1963 lance shield コートジボワール Cote d' Ivoire 1960 tricolor コモロ Comoros 1975 star moon コンゴ共和国 Congo 1960 tricolor コンゴ民主共和国 Democratic Republic of Congo 1960 star サントメ・プリンシペ Sao Tome and Principe 1975 star ザンビア Zambia 1964 eagle シエラレオネ Sierra Leone 1961 tricolor ジブチ Djibouti 1977 star tricolor ジンバブエ Zimbabwe 1980 stripe bird スーダン Sudan 1956 stripe スワジランド Swaziland 1968 lance shield stick 赤道ギニア Equatorial Guinea 1968 emblem セーシェル Seychelles 1976 radial セネガル Senegal 1960 star tricolor ソマリア Somalia 1960 star タンザニア Tanzania 1961 stripe チャド Chad 1960 tricolor 中央アフリカ Central African Republic 1960 star チュニジア Tunisia 1956 star moon トーゴ Togo 1960 star ナイジェリア Nigeria 1960 stripe ナミビア Namibia 1960 sun ニジェール Niger 1960 star ブルキナファソ Burkina Faso 1960 star ブルンジ Burundi 1962 star ベナン Benin 1960 tricolor ボツワナ Botswana 1966 stripe マダガスカル Madagascar 1960 tricolor マラウイ Malawi 1964 tricolor sunrise マリ Mali 1960 tricolor 南アフリカ South Africa 1910 Y-shaped モザンビーク Mozambique 1975 emblem モーリシャス Mauritius 1968 stripe モーリタニア Maurinania 1960 moon star モロッコ Morocco 1956 star リビア Libya 1951 homochrome リベリア Liberia 1847 stripe like-Stars and Stripes ルワンダ Rwanda 1962 tricolor sun レソト Lesotho 1966 tricolor hat ---------------------------------------------------------- データの参考文献 『なるほど知図帳 世界2009』の付録「世界の国 データブック」 著者: 黒田茂夫 旺文社 アフリカの国々一覧 @ 教えていろんな国 著者: 株式会社ファーストビット http://bizhome.org/area/africa.html 国名及び地域名表記記載例一覧 著者: 東京商工会議所 証明センター http://www.tokyo-cci.or.jp/shomei/names_of_countries.htm#africa C 日本語と英語の略称を載せることによって、どちらの言語を勉強している人にも わかりやすくしたかった。また、独立年はいつごろに集中しているのか、 なかなか見分けられない国旗を見比べるときのヒントなどになればよいと思い、 作成した。 D a. egrep "Af[rl]ica" data06.dat 英語名にアフリカと付く国を探したいが、 Africa か Aflica か はたまた Afeica か忘れてしまった。 egrep "Af[rle]ica" data06.dat を実行する。 rかlかeか どれかが付いていれば検出されるので、Africa でも Aflicaでも Africa でも検索にひっかかるはずである。 b. egrep "tricolou?re?" data06.dat 国旗がトリコロールの国を探したい。トリコロールはtricoloreと表記するが、 フランス語である。さらに、イギリス英語では tricolour, アメリカ英語では tricolor である。データでどれが使われていてもいいように egrep "tricolou?re?" data06.dat を実行する。 uとe は、付いても付いていなくても検出されるので、仏・英・米のどれが 使用されていてもトリコロールの国を探すことができるはずである。 c. egrep "19[6-9][0-9]" data06.dat 1960年は「アフリカの年」といわれ、アフリカ大陸において多くの独立国が 誕生した。では1960年から1999年までの間に独立した国はどれくらいあるのか。 egrep "19[6-9][0-9]" data06.dat を実行する。 予想では、1960-1999 の範囲内の数字を含んでいれば検出されるはずである。 d. egrep "リア+" data06.dat アフリカの国名はリア が付くものが多い気がする。そこで、 egrep "リア+" data06.dat を実行する。 リアが付く国名が検出されるはずである。 e. egrep -i "bi?s*au" data06.dat ギニアビサウを検索したいが、ビサウの部分しかわからず、スペルもbissau だったか bisau だったか曖昧で、もしかしたら i は要らないかもしれない上に、 大文字・小文字のどちらで始まるかすらわからない。そこで、 egrep -i "bi?s*au" data06.dat を実行する。 Bsau,Bssau,Bisau,Bissau,bsau,bssau,bisau,bissau どれだったとしてもギニア・ビサウが検出されるはずである。 E. a pan{c109046}% egrep "Af[rle]ica" data06.dat [~/Ruby] 中央アフリカ Central African Republic 1960 star 南アフリカ South Africa 1910 Y-shaped b pan{c109046}% egrep "tricolou?re?" data06.dat [~/Ruby] エジプト Egypt 1922 emblem tricolor エチオピア Ethiopia BC1000 emblem tricolor エリトリア Eritrea 1993 olive tricolor ガーナ Ghana 1957 star tricolor ガボン Gabon 1960 tricolor カメルーン Cameroon 1960 star tricolor ギニア Guinea 1958 tricolor コートジボワール Cote d' Ivoire 1960 tricolor コンゴ共和国 Congo 1960 tricolor シエラレオネ Sierra Leone 1961 tricolor ジブチ Djibouti 1977 star tricolor セネガル Senegal 1960 star tricolor チャド Chad 1960 tricolor ベナン Benin 1960 tricolor マダガスカル Madagascar 1960 tricolor マラウイ Malawi 1964 tricolor sunrise マリ Mali 1960 tricolor ルワンダ Rwanda 1962 tricolor sun レソト Lesotho 1966 tricolor hat c pan{c109046}% egrep "19[6-9][0-9]" data06.dat [~/Ruby] アルジェリア Algeria 1962 moon star アンゴラ Angola 1975 star ウガンダ Uganda 1962 bird stripe エリトリア Eritrea 1993 olive tricolor カーボベルデ Gape Verde 1975 star ガボン Gabon 1960 tricolor カメルーン Cameroon 1960 star tricolor ガンビア Gambia 1965 stripe ギニアビサウ Guinea Bissau 1973 star ケニア Kenya 1963 lance shield コートジボワール Cote d' Ivoire 1960 tricolor コモロ Comoros 1975 star moon コンゴ共和国 Congo 1960 tricolor コンゴ民主共和国 Democratic Republic of Congo 1960 star サントメ・プリンシペ Sao Tome and Principe 1975 star ザンビア Zambia 1964 eagle シエラレオネ Sierra Leone 1961 tricolor ジブチ Djibouti 1977 star tricolor ジンバブエ Zimbabwe 1980 stripe bird スワジランド Swaziland 1968 lance shield stick 赤道ギニア Equatorial Guinea 1968 emblem セーシェル Seychelles 1976 radial セネガル Senegal 1960 star tricolor ソマリア Somalia 1960 star タンザニア Tanzania 1961 stripe チャド Chad 1960 tricolor 中央アフリカ Central African Republic 1960 star トーゴ Togo 1960 star ナイジェリア Nigeria 1960 stripe ナミビア Namibia 1960 sun ニジェール Niger 1960 star ブルキナファソ Burkina Faso 1960 star ブルンジ Burundi 1962 star ベナン Benin 1960 tricolor ボツワナ Botswana 1966 stripe マダガスカル Madagascar 1960 tricolor マラウイ Malawi 1964 tricolor sunrise マリ Mali 1960 tricolor モザンビーク Mozambique 1975 emblem モーリシャス Mauritius 1968 stripe モーリタニア Maurinania 1960 moon star ルワンダ Rwanda 1962 tricolor sun レソト Lesotho 1966 tricolor hat d pan{c109046}% egrep "リア+" data06.dat [~/Ruby] アルジェリア Algeria 1962 moon star エリトリア Eritrea 1993 olive tricolor ソマリア Somalia 1960 star ナイジェリア Nigeria 1960 stripe リベリア Liberia 1847 stripe like-Stars and Stripes e pan{c109046}% egrep -i "bi?s*au" data06.dat [~/Ruby] ギニアビサウ Guinea Bissau 1973 star すべて条件の通りに検出されたので、妥当な meta characters の利用が できたといえるだろう。 F a は実際のスペルは Africa だったが検出することができた。 []の中の文字は2つ以上でも正常に働くということがわかった。 また、中央アフリカは Central African Republic だが、 Africa を含んでいるので検出された。Africa が付く国を探したかったので 正しい結果ではあるが、スペースの間に "Africa" しか入っていない国を 探したいというときのためのmeta charactersはあるのだろうかという 疑問が生じた。 b は実際にデータに使用されているのはアメリカ英語の tricolor だったが、 条件付けによって取り出すことが出来た。 c は条件付けによって 1960-1999 までを取り出すことになっているが、 そのとおり検出された。 d は + によって "リア" が含まれる行はすべて取り出されている。 この場合は一回だけ リア が含まれる行が取り出されているが、 何回も含まれる行も取り出すことが出来る。 e は -i, ?, * の複数の meta characters を使用したが、エラーが出ることも なく、全ての meta characters が正常に働き、結果が出た。 G 今回使用した正規表現 [] 間に挟んだ文字のうち、どれかが一致すれば検出する。 挟む文字は2つ以上でも大丈夫。 ? ?の直前の文字があってもなくても検出する。 coffee など文字が続く単語があやふやなときに便利だと思った。 [x-x] xからxの間の文字、数字を含んでいる行を検出する。 [a-z]で小文字アルファベット、[0-9]で数字、[ぁ-ん]でひらがな、 [亜-腕]で常用漢字、というように 「ここからここまで、1文字でも入っていれば」検出する。 [2-7]など中途半端な範囲でも検出する。 + +の直前までの文字、または文字列が、どこかに含まれる行を検出する。 何回含まれていても検出する。 * *の直前の文字が何個含まれていてもいい。 0個でもいいので ? と同じ使い方もできる。 これもスペルがあやふやな場合に便利である。 -i 先頭が大文字でも小文字でも検出する。 人名や地名など、固有名詞を検索する際に便利である。 使い方は上記の正規表現とは違い "" の前に付ける。 egrep と "" の間に挟むようにする。スペースを忘れやすいので注意。 今回正規表現を使う上で、上手くいかなかったのは [x-x] 使いたかったが使えなかったのは $ だった。 $ については、なぜ上手くいかなかったのかは明確である。 d は "リア+" としているが、本当はアフリカの国は イ段+a が多いので、 "ia$" と検索したかった。しかし $ は行の末尾を検索する正規表現であり、 行の末尾は国名の英語表記ではなく、国旗の特長なので、何も検出されない。 そこで "ia\s" "ia\S" としてみたり、$と組み合わせて位置も変えてみたが 解決されなかった。そこで "ia+" にするかと考えたが、ia をどこかに含むだと 国旗の特長でひっかかる国がありそうなので、"リア+" とした。 また、cでは最初、"19[60-99]" としたのだが何も検出されなかった。 私の予想では、2桁から2桁の間、というのは処理できないのではないかと思う。 数字を分解し、2回に分ければ問題なかったので、そのようにした。 3 今回はプログラムではなくデータを作成したので新鮮だった。 Ktermでは、ファイルはプログラムしか動かせないと勘違いしていたが データから検索も出来るということで、便利だと思う。 正規表現は授業にも出てきたように、google等の検索サイトに利用されている。 ただ、利用者が meta characters を指定しなくでも google で 勝手に色々付けて検索してくれているのだと思う。 今回、原始的に自分で色々 meta characters を指定して検出してみて、 1秒もかからずに検出してしまうgoogleの技術力に改めて驚いた。 他にも携帯メールの予測変換は、元々登録されている単語に加えて、 以前入力した文字を記憶していて、^ で検出しているのだと思う。 それに加えて、使用頻度が高い順でランク付けしていて、 表示する順番が決まるのだろうと思う。ただ、高性能だと思う携帯でも 予測がユーザーとずれていることは多々あるので、 完璧なプログラムはないのだと感じる。むしろあった方が怖いと思う。 もっと単純な ^ を使った製品は電子辞書だろう。 しかし英語の例文検索は + のようにどこにその単語が含まれていても検出する。 &でつなぐことで複数の単語も指定できる。 もっと単純なものでは、人間が辞書を引くときに使っているのは ^ だし、 人名の漢字が思い出せない時は[香佳花…]と頭の中でしっくりくるものを 探している。 個人的に一番条件付けを活用していると思うのは、テストで詰まったときだ。 穴埋め問題は 「19xx に 起きたのは ○○事件だ」だったら "19xx 事件$" と記憶を検索するだろう。 ただ、人間の記憶はコンピュータのように正確には検出できない。 しかし正確でないゆえに検出できたり、思わぬ答えが得られる場合があると思う。 また、そこまできっちりとしたと条件付けをしなくても検出できたりするなど、 柔軟性があると思う。 参考文献 基礎プログラミング I 第6回 正規表現と検索 「うろ覚えの検索」 http://roy/~madoka/2010/r1/06/06_03_theme_01_patternmatching.html 基礎プログラミング I 第6回 正規表現と検索 「何回か繰り返されている文字 を探したい」 http://roy/~madoka/2010/r1/06/06_04_theme_02_repetation.html 基礎プログラミング I 第6回 正規表現と検索 「いくつかある候補を探したい 場合」 http://roy/~madoka/2010/r1/06/06_05_theme_03_or.html 基礎プログラミング I 第6回 正規表現と検索 「1 文字違い」 http://roy/~madoka/2010/r1/06/06_06_theme_04_onecharacter.html 基礎プログラミング I 第6回 正規表現と検索 「文字の種類を判別して探す」 http://roy/~madoka/2010/r1/06/06_07_theme_05_kind.html 正規表現のレポートの体裁について http://roy/~madoka/2010/rpt/egrep.html 以上すべて、著者: 西村まどか 共同学習者: 笹原千珠子