英語(語学)はやらなくてよい(2)2017年11月09日 20時21分17秒

6年前、「いずれ外国語は機械が自動翻訳する時代が来る」と書いたが、
http://takamura.asablo.jp/blog/2011/06/13/5909797
最近展示会では自動翻訳が熱く、本当に時代はそうなりつつあると感じる。
電波環境や電源、会話時タイムラグの問題はあるが、小さなガジェット一つで簡単に外国人と意思疎通ができてしまう。いずれ同時通訳も可能になりそうである。

cygwin便利メモ2017年08月24日 09時17分43秒

ご存知の方も多いでしょうが・・・
DOS窓でもcygwinのターミナルでも、コマンドプロンプトで
explorer .
とすると、カレントディレクトリを開いたエクスプローラーが立ち上がる。

エクスプローラーからファイルやフォルダをDOS窓やcygwinのターミナルにドラッグアンドドロップすると、そのフルパスがコマンドラインに入る。

逆さまになったりならなかったり2017年07月27日 01時32分16秒

iPadやiPhoneなどで、ホームボタン(〇)を左側にして写真を撮影すると、
画素の並び的には逆さまになり、かつ逆さまなことをセンサが感知して
JPEGファイル中にOrientation=Bottom-rightというExif情報を埋め込む。
賢いビューワであれば、この情報を手掛かりに画素を正しく並べ替えて表示できるのだが、何が困るかというと、この画像をWeb素材として使った場合、ブラウザにより逆さまに表示されてしまうこと(逆さまにならないブラウザもある)。

最も良い解決方法は、JPEGファイルの画素の並びを逆さまにし、Orientationタグを除くことだと思われる。修正したい画像がfoo.jpgであるとすると、cygwinの場合exifとImageMagickをインストールし、
% mogrify -rotate 180 foo.jpg
によりfoo.jpgに回転が施され(て上書きされ)、
% exif -t Orientation --remove foo.jpg
によりfoo.jpgのOrientationタグが除かれ、foo.jpg.modified.jpegという長いファイル名のファイルができる。これをfoo.jpg代わりに使う。Orientation以外のExif情報はそのまま残る。

Project Euler 1252016年04月28日 00時24分42秒

https://projecteuler.net/problem=125
画像処理で使うインテグラルヒストグラムアルゴリズムを使うと、非常に高速に解ける。0.04秒。
但し出力に2個重複があるので注意。

Project Euler 662016年04月26日 08時46分10秒

x^2 - Dy^2 = 1, (x,y,Dは整数)を解くもの。
https://projecteuler.net/problem=66
Diophantine方程式の一種Pell方程式というものらしい。
naiveな方法でやっても全然計算が終わらず、解法を理解するのをさぼってずっとほったらかしていたのだが、最近腰をあげてやってみた。ただ、解けるまでに3回はまった。

1) √D≒x/y なので√Dを連分数近似するのはよいが、安直な、分子が1でなく、循環もしないd+e/(2d+e/(2d+...という連分数展開(d=floor(√D), e=D-d^2)では、解が得られない場合がある。ただこの場合も、x/yはちゃんと√Dに収束はするのだが。

2) 一般的な、分子が1で循環する連分数に展開すると解が求まる。ただ、√Dを含む分数を有理化するところで約分を随時入れないと分子分母が発散する(後述の多倍長整数を使えば大丈夫ではあるが)。

3) 64bit整数で解けるものと思い込んでいたのだが、全然違った。64bit整数でも解けたように見えてしまう(x^2-Dy^2=1になる)のでたちが悪い。
http://tieba.baidu.com/p/2972456090 (中国語読めないけど)
にあるのは、私と同じく64bitでやった、誤った結果である。

というわけで、GMPによる多倍長演算を使ってようやく正解にたどり着きました。やっとレベル5。とほほ。