Wednesday, September 20, 2017

Moto G5

長い話なのでつづめて言うと、少し前に旧willcom のPHSを解約して電話ナシになりました。上の子と親子プランだったので同時に。

子供の方はiPod touchにNECのルーターとMineoの格安SIMを与えました。電話は要らないと。

私も電話は要らなかったのだけど、ポケットに入るやつがあると便利だなあと思うようになって、Androidを買ってみることにしました。Motorola Moto G5。今この会社Lenovo傘下なのね。SIMは通話なしの月500M。

Android初めて。iOSも全体としてまとまりがない感じのところがあるけど、Androidもそう言うところがある。大体ok googleの窓はあれchrome とは違うの?なんで1つじゃないの?とかいうところ。

Mozilla Focusってブラウザが良いと言う話を聞いたので使ってみています。iPad miniのiOSとMoto両方。browse.erase.repeatってのがカッコいい。それにしても、ブックマークも履歴も何にもないところに価値があるって一体なんなんだ。iOSでは、safariの設定でアドッブロッカーにMozilla Focusが指定できるんです。

まあ今の所androidのアプリで一番役に立ってるのはバッテリーセーバーかな。フル充電で4日くらい持ちますね。

Friday, March 03, 2017

Haskellのプログラミングで感心した話

プログラミングの演習みたいなものです。以下のような数字の山があると思ってください。一番上の3からスタートして、一個下の段の二つの数字(7,4)をたどり、さらに7からは(2,4)のいずれか、4からは(4,6)のいずれかを通り、一番下の段にたどり着いた時、その経路のうち数字の和が最大となるものを求めよ。


この図は4段のものですが、段数Nに対して、経路の選択は$2^N$あるので、総当たりするのは大変だね、ということで、以下のような作戦で解きましょうと教わります。


右の山は3段目までをやったところですが、2段目は(7+3, 4+3)が(10,7)と計算してあり、3段目にきたところで、真ん中で選択肢があって$4+10, 4+7$のうち、結果の$14, 11$の大きい方を選んで14と決めてしまう。両端の12,13に選択肢はないので足した結果を書くのみです。このようにして順々に計算してゆけば、各点の値を決めてゆくだけなのでオーダとしては$N^2$となって、$2^N$に比べて大きく改善、というわけです。

というのがこの話の前提なのですが、私が自分はダメだなあと思うのは、このことをこんな風に書いてしまうのですね。



sが結果が入るところで、xに数字の山が入っています。間違ってはいないのですが、何が格好悪いかと言って、配列脳なんですよね。インデックスk,jで山の数字の場所を指定してるところです。C言語のプログラムではないので、リストが使えるわけで、もっとリストを使おうよ。

改善の方法として、リストであることを利用して以下のように計算します。2段目から3段目に行くところで、2段目の(10,7)に仮の0を前後に加え(10,7,0)あるいは(0,10,7)と、3段目の(2,4,6)の和を計算します。

その結果が(12,11,6), (2,14,13)となり、項ごとの最大値を計算すると(12,14,13)となる。前の結果と同じです。

Pythonのままやってもいいのですが、この辺からHaskellでやってみましょう。数字の山は[[3],[7,4],[2,4,6],[8,5,9,3]]で与えられているとします。


これがプログラムの全体です。うん。一行。簡潔。

++はリストの連結で、zipWithは二つのリストを並べて頭から順々に関数に食わせる(この場合は+なので足し算)。\はラムダ式の開始で、この場合は引数a, bに対する処理。foldl1はリストの左から順にやって行くpythonでのreduce処理に相当するものです。結果は一番下の数字それぞれに相当する値が出てくるので、そのうち一番大きいものを選ベば答えになります。



これで終わり、と言いたいところですが、まだもうちょっとあります。上のやり方で、0を足したりしているところが格好悪かった。

そこで今度は数字の山を下から見てみようというわけです。

左の図のように、一番下の(8,5,9,3)の尻尾と頭をそれぞれ一個削った(8,5,9), (5,9,3)の項ごとの最大値を(8,9,9)と計算し、これを一段上の(2,4,6)に足す。その結果が(10,13,15)、同じことを繰り返して一番上までたどり着いたらおしまいです。

この方針で書いたのが以下です。



[0]を足すところがなくなり、さらにスッキリしたというわけです。initは尻尾を一個切るもの。tailは頭を一個切る処理です。foldr1はリストの右から(つまり山の下の方から)やるという意味です。

この簡潔さがすごいと思った次第。





Saturday, January 07, 2017

「豊穣の海」の「昴」の黒子について

学生の頃、三島由紀夫の豊穣の海4部作を読んで、内容以前に気になったことがありました。この物語は主人公の松枝清顕の転生が主題になっていますが、転生した人物の脇腹にある「昴(スバル)のような3つの黒子(ホクロ)」がカギとなっています。

気になったのは「スバル」で、スバルってのはこれです。プレアデス星団です。


3つではないのです。ちょうど今の季節、夜中に天頂付近に見えていると思いますが、もやっとした塊に見えます。

3つの星、ということだと、オリオン座の三つ星のことじゃないかなあと思うのですね。オリオンのベルトの位置の3つの星です。


スバルの場所はオリオンの右斜め上あたり。

無粋なことのようですが、物語の中で「昴」は何度も出てくる大事なことで、学生時分の私はこのことが非常に気になっていました。

その後、もう25年も前のことですがアメリカにいた頃、地元の日本語誌に、日本文学を英語で紹介されている翻訳家の方が、日米の編集者のチェックの仕方の違いを書かれていました。アメリカの編集者の権限は大きく、誤りやわかりづらい点を作家に指摘してくる、翻訳についても例外でなく、翻訳のみならず原作にさかのぼる指摘があって翻訳者としては困ることがある、とのことでした。例として三島由紀夫の小説(どの本だったかは失念)が挙がっていました。一方、日本では大作家の作品に編集者が口を挟むことはないので、結果として全責任は作家にあることになる、という話です。

この記事を読んでこの翻訳家の方に、スバルについて御存知ですか、という内容の手紙を書いたところ丁寧な返事を貰いました。翻訳家の方から別の文学者の方に照会してくださり、その方の手紙のコピーが同封されていました。それによると「土屋氏が指摘の箇所は、私も前々から気になっていたところです。.... 編集者がチェックし、勇気をもって作家に注意を促すべき事柄だったのではないでしょうか」とのことでした。ということで私の気は済んだのです。

実家で片付けをしていたら、この手紙が出てきたので、ブログを書きました。

最近この翻訳家の方がJapan Timesに記事を書かれているのを見つけました。御健在なようですね。