問題
拡張子と拡張子の簡易説明を取得して、ファイル名をいくつか受け取って分類する問題に挑戦。ファイル名の拡張子と拡張子は大文字、
小文字が混在しています。ファイル名もaとか"."だけとか悩ましいものもあります。ラスボスとして9999件対9999件のミサイル何発打っても
倒せないようなのが存在しています。(時間制限があります。感覚的に100msぐらいか?)
ラスボスに対して3つぐらい作戦を練って玉砕しただけの話です。Haskellに付き合うのもいいかげん疲れました。モナドという者も登場!
作ったソース
ラスボスに会合するまで
拡張子と拡張子の説明をタプルのリストにする。12〜17行
ファイル名から拡張子を取って、先程のリストを再帰関数で突き合わせ答えを返す。30〜33行
2つのタプルの先頭を返す fst (1,2)
2つのタプルの後ろを返す snd (1,2)
文字列を大文字化する map toUpper "abaB"
ライブラリどれか必要かも。
ややこしいデータもあってここまででも疲れてます。そこに9999x9999のラスボス
旅をする夢を見た後
リストなら普通に検索すれば速くなる。検索ぐらいあるだろうとelemIndexを使う。するとMaybeが登場発見できなければNothingを返し
見つかったらJust 1とか返します。古きよきアメリカっぽい感じが言語からも漂ってきます。実際はNull混在のややこしい数値。言語世界の
悩ませどころでいろいろな言語で困った。Just 1を1にする方法がよくわからない。調べてみるとMaybeはモナドの入り口っぽい。モナド
で検索するさらに迷宮にはまりそうな感じがする。なぜかみんな宗教家になっている気もする。それだけ難しい。
そこで検索結果のインデックスをリストにする関数に着目する。これならNothingもJust 1とかも返さない [] と [1]なら対処できるはず。
検索結果のインデックスをリストにする elemIndices "a" ["1","2","3","a"] 少しは速くなった気もする。でもラスボスには勝てない。
タプルのリストを2つのリストにするのが39〜41行目divide リスト順は逆になってしまってます。
ハッシュテーブルも発見したのですが使い勝手がよくないとの記事を最初にみかけます。まだ開拓中のようです。
Haskellを語る
この言語を勉強すると普段ある機能のありがたみが増します。問題を解いている時、変数束縛とか使い勝手が悪い所を回避するための
工夫が必要で脳内の活性化に繋がります。(最近ブログを書きまくっているのもそれが原因)極限まで活性化されると、たぶん神を語り
だします。瞑想のようなものかもしれません。瞑想しすぎの副作用と同じでやりすぎると帰ってこれなくなるかもしれません。