ただのつぶやき

FMSに関する情報を発信していこうかなと思います。

第8.5問 ソートの話(なんかおまけ的な話)

Java(Processing)における辞書的な順番はUnicodeであると

前回(第8問 ソートの話 - ただのつぶやき)、調べたところ分かったのだが、

じゃあ、「Unicodeは何を基準にして並べているのだろう?」と思ったので調べてみた。

 

普通数字は当然ながら

0<1<2<3<4<5<6<7<8<9

であることは、小学校から知っている。

 

では、漢数字はどうだろうか?

実は、Unicode上では

一 七 三 九 二 五 八 六 四 零

となる。

 

なぜこうなるのだろう?

読み方か?訓読み?音読み?それとも画数?

どれも当てはまらない。

 

あと他に、漢字の構成する要素として何があるか?

 

 

 

 

 

…部首があった。

それぞれの漢字の部首はこうだ。

部首「一」
一 七 三
部首「乙」

部首「二」
二 五
部首「八」
八 六
部首「口(くにがまえ)」

部首「雨(あめかんむり)」

 

 

お。これはいけそうだ。

 

それじゃあ、同じ部首内での順番どうだろう?

同じ部首の「一」で並べてみると、


上 一 丑 三 丁 並 世 七 丘 両

一 丁 七 三 上 丑 世 丘 両 並

となった。

どうやら、順番は、部首以外の画数の小さい順のようだ。

部首以外の画数が同じ字同士だと音読みもしくは訓読みにおける50音順みたいだ。

丁「ちょう・てい」→七「なな・しち」

三「さん・み」→上「うえ・じょう」

丘「おか・きゅう」→世「よ・せい」

音読みか訓読みかどっちにするのかそこの基準はなさそうだ。

 

同じ画数の違う部首になると、

一 了 中 久 丸 乱 乾

一 中 丸 久 乱 乾 了

のようだ。

法則性はなさそうで、決まりみたいなものだろう。

 

 

 

結論として。

Unicodeにおける漢字の細かな順番は、

部首の画数で決まっていくということだろう。

同じ画数の部首では、何かしらの決まりのもとに順番が決まっているみたい。

同じ部首内では、部首外の画数で順番が決まり、

同じ部首外の画数では、決められた漢字の読み方で50音順といったところだろうか。

 

以上おまけ的な話でした。

 

 

第8問 ソートの話

ファイルを探す時に便利なのがソート機能。

れいに整理してくれるので目的のファイルを探しやすくなる。

ソートの仕方はいくつかあり、ファイルの名前順や最終更新日時など色々ある。

今回はファイル名順で並び替えるときについてどの順序になるのか細かく考える。

 

整数のソート

例えば、次のような方法で10個の整数を整列させてみる。

今回行うのはバブルソート

詳しくはここでは説明はしないので、各自調べてほしい。

何でバブルソートなのと思うかもしれないけど、白羽の矢が立っただけと思ってくれればいい。

以下のコードを使ってProcessingで動かしてみる。

f:id:quohHapSnow0320:20170324040251p:plain

(図1 コード)

コンソールの出力結果を見ると

[0] 51
[1] 29
[2] 16
[3] 66
[4] 18
[5] 46
[6] 31
[7] 12
[8] 6
[9] 1
-------
[0] 66
[1] 51
[2] 46
[3] 31
[4] 29
[5] 18
[6] 16
[7] 12
[8] 6
[9] 1

となった。

確かに数字が大きい順に並べられた。

これはもちろん予想通りだ。

じゃあ次。

 

文字列のソート

では、「あ」や「プ」、「猫」などといった文字列はどうなるのだろうか?

ソート方法としては、図1の9行目のif文の条件をword[i].compareTo(word[i+1])>=0に変える。

 

まずはひらがなの比較だ。

あ は お を な さ つ る ん め

と定められた文字列の配列10個を先ほどと同様にバブルソートで並び替えると、

あ お さ つ な は め る を ん

となった。

これは明らかに50音順のように思える。

 

では次に、濁音、半濁音、小文字を含んだ場合どうなるか?

ぱ は っ ば わ ぁ つ づ ゐ あ

を今までと同様にバブルソートで並び替えると、

ぁ あ っ つ づ は ば ぱ わ ゐ

となった。

どうやら同じ文字では、優先度としては小文字>大文字>濁音>半濁音の順のようだ。

 

カタカナにも同じことが言えるみたいだ。

パ ハ ッ バ ン ァ ツ ワ ヅ ア

ァ ア ッ ツ ヅ ハ バ パ ワ ン

と言う結果になった。

 

では、ひらがな、カタカナ、漢字が混じってしまった場合はどうだろう?

刃 ハ パ ば バ 葉 ぁ ァ あ 亜

ぁ あ ば ァ ハ バ パ 亜 刃 葉

という結果になった。

 

優先度としてはひらがな>カタカナ>漢字の順みたいだ。

同じ「は」と読む漢字でも優先度は「刃」>「葉」のようだ。

これは、もしかすると辞書順かもしれない。

手元にあった新明解国語辞典第7版の「は」のページを開いてみると、確かに「刃」の次に「葉」が来ていた。

 

 

試しに以下の方もやってみた。

下 化 火 加 可 仮 何 花 価 佳

下 仮 何 佳 価 加 化 可 火 花

 

 

…あれ?これ違うぞ…?

 

 

元の配列は、新明解国語辞典では順番通りになっているはずだ。

なのに、ソートすると順番が入れ替わってしまった。

 

 

なんでだろう?

 

 

色々調べてたら、上の順番にあてはまりそうなのが見つかった。

それはShift-JISUnicodeだ。

WindowsではShift-JISというものが使われているらしく、ファイル名をソートするときは、これが基準になるみたいだ。

以下の画像がShift-JISにおける先ほどの配列の漢字の順番だ。

f:id:quohHapSnow0320:20170324030156p:plain

(図2 Shift-JIS表)

これは、先ほどのソート結果とは異なる。

試しに、Windowsでソートしてみると、

f:id:quohHapSnow0320:20170324041425p:plain

(図3 テキストファイル名で試した)

確かに、図2の通りの順番になった。

 

ではUnicodeはどうだろう?

Java内部つまり、Processing内部ではUnicodeが使われているようだ。

探すのが大変だったが、正しいか確かめるため一つ一つ検索してみた。

下:4E0B

仮:4EEE

何:4F55

佳:4F73

価:4FA1

加:52A0

化:5316

可:53EF

火:706B

花:82B1

という検索結果が得られた。

確かに、先ほどのソート結果はUnicodeにおける順番に相当することがわかった。

 

漢字は確かであることが分かった。

では、先ほどまで確定していたのひらがなやカタカナの優先順序はどうなのだろうか?

Unicode表を確認してすると、先ほどの順序で間違いは無いようだ。

つまり、

ひらがな(50音順)>カタカナ(50音順)>漢字

であり、

小文字>大文字>濁音>半濁音

であるということだ。

 

そういえば、調べてて見つけたのだが、

数値的な大小つまり、

"1"<"2"<"11"<"12"<"112"

という大小関係のことを位取式順序といい、

辞書で出てくる順番のように、

"1"<"11"<"112"<"12"<"2"

という大小関係のことを辞書式順序というらしい。(ものすごくどうでもいい)

 

じゃあ最後に。

半角数字、半角英字、全角数字、全角英字、ひらがな、半角カタカナ、カタカナ、漢字の優先順序はどうなっているだろうか?

 

Unicode表一覧を見てみると、

半角数字(0030~0039)>半角英大字(0041~005A)>半角英小字(0061~007A)>ひらがな(3041~3096)>カタカナ(30A1~30FA)>漢字(4E00~9FCC)>全角数字(FF10~FF19)>全角英大字(FF21~FF2A)>全角英小字(FF41~FF5A)>半角カタカナ(FF66~FF9C)

みたいだ。

 

実際にソートさせてみると、

プ サ 2 1 b 猫 あ c A P

1 A b あ プ 猫 2 P c サ

確かに、上の順番だったようだ。

 

 

ある程度満足したところで、ここで終わり。

それでは。

 

参考

Unicode一覧 0000-0FFF - Wikipedia

《Unicode/CJK統合漢字》漢字検索

Processingでバブルソート - matablo

 

第7問 コマンドプロンプト(超初級編)

これくらいは知っておけば何とかなるであろう、コマンドプロンプトのコマンドについて簡単に説明していきましょう。

 

突然だけど、プログラミングを始めたばっかりの人って、

cd js

とか

mkdir bot

とか書かれても

これは何?ってなると思います。

 

これは簡単に言えばコマンドプロンプトのコマンドなのです。

コマンドプロンプトって何?ってなるかもだけど、

まずはとりあえず、スタートメニュー開いて"cmd"って打ってみよう。

 

するとコマンドプロンプト(デスクトップアプリ)って出てくると思う。

これがコマンドプロンプトである。

 

では。

 

さっそくこれぐらい知っておけば何とかなるコマンドプロンプトのコマンドを紹介していこう。

 

 

cd js

これはjsディレクトリに移動するということを指すよ。

 

cd ..

これは1個前のディレクトリに戻るということを指すよ。

 

mkdir bot

これはbotというディレクトリを作るということを指すよ。

 

ちなみにディレクトリとはフォルダのことを指すよ。

 

とまあ、雑な説明だったけど

これくらい知っておけば何とかなると思うよ。

 

それじゃ!

第5問 菅平セミナーハウスについて

簡単ではありますが明治大学のセミナーハウスの一つである

菅平セミナーハウスについて書いていこうと思います。

メモ的な感じになるので箇条書きです。

 

菅平は関東に比べて涼しい。

 夏場はパーカーなど寒さを調節できるものはあるといい

 立地から最寄りのコンビニまで徒歩30分(らしい)

飯が多い。

 朝食は8時、昼食は12時、夕食は18時

 朝食はバイキング形式

 昼食は日替わりかカレーの二択形式

 夕食は全員同じメニュー

 夕食は特に、少食の人は食べきれない可能性大

館内には自動販売機が2つ。

 値段はごく一般的な外にあるような自動販売機と変わらない

お風呂あり。

 ドライヤー、シャンプー、ボディソープは常備

 バスタオル、ひげそり等は各自持参

宿泊学生の部屋は1部屋8人泊まれる。(A棟)

 2段ベッド4つ

 各ベッドに明かり、コンセント1つ、カーテンがある

 延長コードを持っていくと便利

 夏場、部屋に虫が入ってくる可能性あり

 消灯は23時

 洗濯機、乾燥機あり

 洗剤は受付に申し出ればもらえる(はず)

 B棟もおそらく似たような設備になっているはず

Wi-fiは常設されている。

 部屋によっては電波すら届かないので注意。

 通信速度は普通。

第4問 作成中のアイワナのテストプレイに関するお知らせ。 (更新あり)

(8/16 21:12修正)

予期せぬ問題が発生により

イワナ制作自体を断念することにしました。

復元も不可であるため、テストプレイ版もただいまをもって公開を終了します。

 

一から制作し直す可能性がありますが、今のところは考えてないです。

申し訳ないです。

**********************************

 

それでは。

第2問 P(プログラミング)演習Ⅰに関するメモ

※あくまでも個人のコメントなので、参考程度に読んでください。

P演習Ⅰに対するメモを置いておきます。

 

1.使用する言語はProcessing

EP演習が終わるとすぐさま新しい言語を習い始める。

視覚的にプログラミングができる言語だ。

HSPとは違う点がいろいろあり、最初は慣れずにつまずいてしまう点が多い。

しかし、使いこなせば後にいろんな面で役に立つプログラミング言語になりうる。

しっかりと習得してしまおう。

 

2.予習必須

何よりもこの授業は予習が必要。

サイトにある講義資料はしっかりと理解しておくこと。

なるべく、1年前の課題資料くらいは一通りやっておきたい。

後半になってくると授業中に提出課題が終わらない可能性がある。

過去の提出課題を参照しておくと早く終わるかも?

早く終われば授業中でもすぐ帰れるかも?

提出課題はほとんどが過去の提出課題から引っ張り出した問題か、それを改変したものが使われる。(新しい内容の課題も当然出てくることがある。)

課題の出題の難易度は基本的には受けている学生の出来具合で変化する。

 

3.小テストはドリルでOK

2回目から冒頭に10分間使って小テストが行われる。

ドリルをやっておけば満点はほぼ確実と思われる。

ちなみに、ドリルからそのままということはほぼない。

 

4.発表

春学期末つまり、7月末にP演習Ⅰの発表会がある。

毎回テーマが決まっている。

時間制限があり、時間切れすると強制的に発表を終了させられる。

テーマや制限時間、その他レギュレーションは事前に発表されるのでそれをしっかり確認しておくこと。

注意する点があり、発表する時期が期末テストに近い。テスト勉強がおろそかになりがちなので、要注意。発表して燃え尽きないように!

 

5.その他

前述に出てきた講義資料や過去の提出課題、そして、ドリルに関しては以下のページを参照すること。

http://nkmr.io/lecture/

授業は週に4限分。超速い。

授業期間は6月から7月末まで 

 

 

とまあこんな感じ。

再履修は面倒くさいので確実に単位を獲得しておこう。

質問などあったらコメントからどうぞ。

 

それでは

第1問 EP(エンターテインメントプログラミング)演習に関するメモ

※こういった授業に関するメモはあくまでも個人の意見なので、参考程度に読んでください。

 

FMS特有であり最初の大きな授業であるEP演習について、書いていこうかと思います。

 

1.使う言語はHSPという言語

FMSのプログラミングの授業で最初に習うプログラミング言語HSPです。

ものすごく簡単。

プログラミングやったことないよ!って人でもすぐに使いこなせるようになるかも。

入学してすぐに教科書や参考書を買う機会があり、EP演習での参考書が紹介されると思うが、人によっては買ったけれども一切使わずに授業が終わってしまうという人がいるかもしれない。それくらい簡単。物怖じせずに正面からぶつかってみよう。

 

 

2.発表

この授業のメインとなるのが授業の最後のほうの発表。

課題は、HSPをつかって何か面白いのを作れというアバウトなもの。

何を作ればいいか困ったときは過去の先輩たちの動画を見てみるといい。

YouTubeで探すと出てくる。参考にしつつ自分なりに色々考えて面白いものを作ってみよう。

初めてのプログラミングなので、いろいろとつまずくと思う。

こういう時は先輩に聞くといい。インターネットで検索すれば情報として出てくるかもしれないが、これといった情報にはなかなか出にくいし、あったとしても曖昧か、わかりにくいことが大半。先輩に聞くことが一番だ。思いがけない発見や進歩があるかも。

発表本番はかなり盛り上がる楽しいイベントとなる。

発表会は、一種のみんなに対する自己紹介だと思っていい。発表内容で自分自身を覚えてもらえる可能性が相当高い。自分のイメージが固まりやすいのでそこは気を付けて。

 

3.その他

HSPは検索すればすぐに見つかる。

サイトにHSPを扱うために必要なソフトが公開されていので、そこからダウンロードして早いうちから慣れておくといいかも?

授業の回数は週に2限分。速いスピードで進んでいく。

授業期間は4月から5月末まで。

 

質問等ありましたらコメントからどうぞ。