読者です 読者をやめる 読者になる 読者になる

語句の真相とあやまち

なにもないことにまつわるあれこれとか関係のないこととか

問題21-24

問題21は友愛数の問題

プログラム自体に難しいところはないが、定義をちゃんと理解していなくて、一度間違える

 

問題22 

問題の意図は、ソートなのかな??

いまさらソートを作りたくはないので、名前のスコア計算だけ実装する。

 

問題23

素直に実装したところ、すぐには終わらない様子。

とりあえずabundant(x)の計算を、二度目はやらないようにしてみた。

次に、2つのabundantの和とできるかどうかの計算で二度目はやらないようにした。

さっきよりはまし。

正解だった。

実行時間は 

759.380158 seconds

12分30秒

 

問題24

いろいろ考えたけれど、答えにたどりつけず、問題をそのまま書いたら、それほど時間がかからないで終わった。

とくに工夫なし

 

 

 

問題16-20

問題16

これは、無限長の整数を実装しろといっているのだろうか。

ここまでは迂回したりJulia頼みでやってきたけれど、もうそれは無理なのか。

少し間があいたけれど、解は思ったよりも単純だった。コードを書く時間がなかった。

 

問題17は、英語の話なので、ちょっとやめておく

 

問題18は少し考える。

アイディアはすぐに浮かんだ。実装も30分もかからない。

まだまだ易しい問題。

 

問題19は、常識問題のような気がするが違うのだろうか。

詩のような問題文が意味不明。

あらためてみてみると、

the monthの最初の週といわれても、定義が不明だ。

日曜はじまりか月曜はじまりか、それとも1日からの一週間なのか・・・

この問題はスキップ

 

問題20

2のベキ乗の問題は、単純だったが、階乗はすこしややこしい。

面倒臭いのでBigIntを使って見たけれど、答えが合わない・・・

 

すべての桁を合計する関数を間違えていた。

10の余りを計算し、10で割り続ける・・・どこで間違えたのだろう。

小さい数では間違いはなかった。floorとかceilとかの使い方か・・・

文字列から計算すると正解になった。

 

 

問題15

格子状の道を数え上げる問題。

そのままコードにする方法がややこしくて分からず、別の問題に変換して解くことにする。

組合せの問題であることには変わらず、結果が出るまで待てなかった。

もう一度見直して、組合せをしない関数に変換して実行してみたが、やはり遅い。

 

そこで、Dictを使い、計算結果を使い回すようにしたら、瞬間0.012秒程度で終わってしまった。

問題14も終わらなかったものが、Dictを使って0.83秒で終わっている。

Dictを使ってもいいけれど、記述のレイヤーをちゃんとわけなくてはいけないと思いながらそんなことはしていない。

 

Project EulerをJuliaでやる

Projct EulerをJuliaで解いてみる。

以前は、RubyかRかで20個くらい解いたあと、問題が面倒臭いのばかりで放棄していたのだけれど、途中で言語を変えるのもおもしろくないから、改めてJuliaで解くためにアカウントを新調してみた。

 

解法をブログに書くのは問題があるのでしないけれど、思ったことなどをここに書くことにしよう。

 

問題1を解いて思ったのは、私にとってプログラムまたはプログラミングとは、問題あるいは解法を明瞭に記述することのようで、手順で書くよりも関係で書くほうを好んでいるらしい。ちがうかもしれない。

 

問題11までは、すぐに答えがでたのだけれど問題12は時間がかかっている。これはプログラムの実行時間のこと。

 49.8分かかった。

 

プログラムを書くまでにかかる時間は、問題にもよるわけで、もしもJuliaやそのパッケージで使えるものがあれば使っているので、ときどき、問題の意図と違う解法をしているのかと思わなくもないけれど、違う言語を使うと言うことはそういうことだと思う。細かいアルゴリズムで解きたくなることもあるので、そういうときはそうするかもしれない。

 

 

Julia save&loadはJLD

packageがある。

HDF5も使うようだ。

 

HDF5は、MochaでMNISTのデータを保存するために使っていた。

これはOSによるファイルシステムの違いを吸収する仕組みのようにみえる。一般的な仕様。

 

CouseraでJuliaのコース

CourseraからのアナウンスでJuliaのコースがあったので、受講した。

いままで動かなくて往生していたことも、解決せざるをえず、うまくいくようになったと思う。

 

・演習はIJuliaのnotebookで提出するので、使えるようになった。

 JuliaBoxが簡単に使える。しかし、notebookをCouseraにアップロードすると、読み込めなかったりしていろいろトラブルがあった。JuliaBox自体は問題ないし、どこでも同じ環境が支えて便利。

 JuliaBoxは、今は無料だが、いずれ有料コースもできるみたい。無料では使用時間が3時間に限定されている。たぶん、一回のセッションが3時間なのではないだろうか。そんなに使わないので、わからない。残り時間が3時間からカウントダウンされているのでそう思った。

 ローカルのJuliaでもnotebookを動かすためにはIJuliaが必要だが、これがなかなかうまくいかなかった。IJuliaのgithubのドキュメントをみると、minicondaをインストールせよとあって、指定のURLにはminicondaがみあたらなかったが、anacondaをインストールして解決した。

 Anacondaににあるnotebookだったかな、それを使っているらしい。Python使う場合は、これも便利そう。(僕はPythonを使っていない。Rは使っている)

 

 コースでは、pyplot(だったかな)やGadflyを使ってグラフを書いた。DataFramesも使った。散布図の放物線によるフィッティングなど面白かった。型のあたりも一人でやっていると退屈だが、講義だと聞ける。

 

 今回受講してみて、思ったのは、Juliaのパッケージの使い方に関する情報がなかなかみつからないので、こういう機会があるとありがたいなということ。

 

 ちなみに、Couseraのコースは無料だが、その場合はアクセスできるリソースに制限があるので、5000円くらい出して全部できるようにした。5000円なら1.5冊くらい本が買えるので、ちょっと高い気もするが、まずまず満足。

 

僕の環境はMacOS。会社ではWindowsLinuxだが、Proxy経由の場合の使い方がうまくわからず、ローカル環境では使えない。そんなときは、JuliaBoxがいいかなと思う。秘密情報は置けないけれど。

 

 

 

 

The Little Prover

これは、LISPSchemeに対する、The Little LisperやThe Little Schemerのような関係にある Coqに対するThe Little Proferらしい。

 

まだ最初の方しか読めていない。ややこしい。

focusをあてている部分にルールを適用するその仕方を繰り返し説明しているのだけれど、なんだかよくわからない。英語の読解力がないからだろう。

 

もう少し読み続けてみよう。

 とはいえ、Juliaが優先だと思う。