憂鬱な午後のひととき
ubuntuの入ったノートパソコンがハングアップ. 電源長押しでも切れない. しかたがないのでバッテリーを抜いて強制切断.
ハードの不調かな.
Project Euler 146
結構悩んだ. 結局素数判定の前にできるだけ不要なnを振るい落とすことを考えた. Haskellで10秒(Core2Duo 1.8GHz).
Project Euler 154
情けないことに3項展開の係数の式を失念してた.
Haskellで最初7分. ちょっといじって120秒. C++で10秒.
会社のサーバの引っ越し作業. 人数が少なくても意外に多いケーブルと重たいサーバ. 明日は筋肉痛かも.
で, お腹も減ったし西尾さんが「坦々麺フェアやってますけどどう?」というので会社出てすぐの店に行ってみた. これがまた恐ろしく辛い.
二人とも涙目に凄い汗. 半ば後悔しつつ, 少なくとも今まで食べた中で一番辛いことで合意(というほど坦々麺を食べたことないけど).
ただ食べ終わってみると不思議なことにスープを飲んでみたくなる. ということはおいしいのかな.
健康診断で胃の検査をしてからおなかが痛いので眠れない. しかたがないのでProject Eulerをしてる.
近くで
お昼の無料コンサートやってるというので同僚達と行ってみた.
パイプオルガンって(電気の無い)昔はふいごみたいに踏んでたんだろうかという話になった. そういや小学校の音楽の教室にあったオルガンって足で踏まないと音でなかったよねと言うと西尾さんがそんなの見たことないというので意外だった.
n_shuyoさんに
Project Euler 126の問題をどう解いた?と聞かれて,
面倒だったのでC++で解いたと答えたら「駄目やん」と言われたのでHaskellで解き直した.
最初listやarrayを使ったら話にならないぐらい遅かったので(C++で解いてしまった)しかたなくSTArrayを使った.
そうなるとCの方が読みやすいやんと思うのは私だけ? Cの方が10倍ぐらい速いし.
もっと簡単に(そして速い)かける方法あればどなたか教えてください.
# maxN = 100000にするとHaskellはメモリ不足で落ちる. なぜだろう.
追記
eagletmtさんにwriteArray ary pos $! (v+1)したらと教えていただいた.
maxNでも落ちなくなりました. ありがとうございます. $!は何カ所にはつけてみたのだけど駄目だった.
前回のときもそうだけど, どうもどこにつけていいのかよく分からない.
うまく行ってもちょっとコード変えたら挙動が変わるし, 基本的な関数も自分で再定義しないといけなくなるし(適当につけてるからや>自分). うーん.
ちなみにmaxN = 100000にしたときの速度はHaskellがCの57倍ぐらい遅い.
中で何やってるのかな. またGC系?
// C++版
#include <stdio.h>
#include <algorithm>
const int N = 50000;
const int limit = 1000;
static int countTbl[N];
int main()
{
for (int a = 1; a <= (N - 2)/4; a++) {
for (int b = 1; b <= std::min(a, (N/2 - a)/(a+1)); b++) {
for (int c = 1; c <= std::min(b, (N/2 - a*b)/(a+b)); c++) {
int p = a + b + c;
int q = a * b + (a + b) * c;
int n = 1;
for (;;) {
int s = 2 * q + 4 * (n-1) * (p + n - 2);
if (s >= N) break;
countTbl[s]++;
n++;
}
}
}
}
const int *pos = std::find(countTbl, countTbl + N, limit);
if (pos != countTbl + N) {
printf("found %d\n", (int)(pos - countTbl));
} else {
puts("none");
}
}
// 0.41秒
Haskell版
import Control.Monad.ST
import Data.Array.ST
import Data.List
maxN::Int
maxN = 50000
limit = 1000
ls = [(a,b,c)|a<-[1..quot (maxN-2) 4],
let maxN2 = quot maxN 2, b<-[1..min a (quot (maxN2 - a) (a+1))],
c<-[1..min b (quot (maxN2 - a * b) (a+b))]]
genPos (a,b,c) = takeWhile (<maxN) [2 * q + 4 * (n-1) * (p + n - 2)|n<-[1..]]
where p = a + b + c
q = a * b + (a + b) * c
inc ary pos = do v <- readArray ary pos
writeArray ary pos (v+1)
count = do
ary <- newArray (0,maxN-1) 0 :: ST s (STArray s Int Int)
mapM_ (inc ary) $ concatMap genPos ls
getElems ary
main = print.findIndex (==limit).runST $ count
// 15.97秒
pclmulqdqってどれくらい
instruction_tablesを見るとlatencyが12とありますね.
自分でも試そうかと思ったが, その前に
Xbyakを対応させる必要があった.
pclmulqdqやaesの説明は
carry-less multiplicationや
advanced encryption standard new instructionsを来週読んでみる.
#しかしなんだよaeskeygenassistって. とてもCPU命令の名前とは思えないな. pclmulqdqも説明にGF(p
k)とか出てるし.
同僚と, 彼と大学の同期だった方(というか私の先輩でもある)の3人で食事. 私は先輩には研究集会とかでちょくちょく会ってたけど,
同僚は15年振りぐらいだそうな. こういう普通の飲み会(と言っても飲んでないけど)はあんまししないので逆に新鮮でとても楽しかった.
魚を食べたくなって, ちょっと遠いけど
ぎょれん市場というのに行ってみた.
11時ちょっと前に着いたらまだ空いてなくて, 待ってたらどんどん人が並んでくる. お店はプレハブな割に綺麗で(あとで見たらまだ開店して数か月だった),
お店も騒々しくなくてよい. 毎日変わるメニューの中でてんぷら定食にした. 最初だったので料理もすぐ.
お刺身があまくて, てんぷらもからっとしておいしかった.
また行きたい. ただ, 周囲に観光できるところが全く無い. 道路際で車も多いので散歩する気にもなれず, そのまま帰って来てしまった.
食べるだけにいくのはちょっと辛いな.
有界の会
目的が
kikxさんにCoqの話を聞くことで, それができたので満足である.
楕円曲線のミーハー勉強会ってあったらうれしい人いるのかな.
あとProject Eulerのためにx^2 = a mod pを解く関数をHaskellで書いたけど, 結局C++(というかXbyak)を使ってしまった.
『日本人はなぜ無宗教なのか』(阿満利麿)
目茶目茶おもろかった. つい言ってしまう「私は無宗教です」の意味を考える.
著者によると「無宗教」とは「無神論者」ではなく「特定の宗派の信者ではない」という意味にすぎないという.
なるほど, 特定の既成宗教の枠にはめられるのが嫌だからそう言ってるというのは当たってる気がする.
私は初詣も墓参りもお盆も葬式も普通にするしね.
まず著者は「創唱宗教」と「自然宗教」という言葉を定義し区別する.
前者はいわゆるキリスト教やイスラム教を指し, 教祖, 教典, 教団などで成り立っているもの.
後者は特定の教祖によるものではなく, 自然発生的に現れ, 無意識のうちに受け継がれてきたものとする.
そして, 日本人の大多数は「自然宗教」の「信者」であると主張する.
では何故, 普通「自然宗教」, つまり神前結婚式や地鎮祭, 葬式仏教などの風俗や習慣を「宗教」とみなさないのか, それがどういう問題を起こすかという議論に移る.
中世に遡り, 当時の考え方を考察する.
死んだらホトケの「ホトケ」の意味, 死者の霊魂はカミサマなのか.
本来の仏教と日本に元々あったケガレの概念, 中国の「考」やインドのしきたりなどがごちゃまぜ(?)になっていくところなどのトピックも興味深い.
三章では, 脈絡と受け継がれてきたその「自然宗教」が, 明治以降どのようにおとしめられたかを考える.
明治時代は天皇を中心とする中央集権的国民国家を作る必要があった.
そのため本音はキリスト教を禁止し, 「神道」を国教にしたかった(このあたりはこないだ読んだ『武士道の逆襲』の話と関連するなあ).
だが, 欧米の手前もあるし「信教の自由」を認めるも必要もあるのでそれができない.
そこで「(キリスト教などを)信じることは許す」が「布教や礼拝などの社会的行為を禁止」し, 「神道」を「宗教」とみなさないことにした(これは物凄い論理だな).
「政教分離」が難しいわけだ.
ちなみに「宗教」という用語はキリスト教などのものを扱う概念としてこのとき作られたそうな. 最初から「自然宗教」は考慮外だった.
さて古来の日本の伝統的な信仰は, 身の回りのものそれぞれにカミがいて, 仏壇もあって, その外側により強いカミ(神社)がいるという構造だった.
そこに「天皇崇拝」が降りてきた上, 神道の儀礼が「宗教でない」となったのでワケワカメになってしまった.
そんな中では「無宗教」は身の安全を保証する方便だった. うむ, 恐ろしい.
後半は「平凡指向」, ムラの知恵, 沖縄の大神島の祭りの話になる. 最後の方はいまいち散漫でよく分からないところもあった.
でもまあ, 「自分は無宗教」と言ったことがある人, 読んでみたらいいと思う.
カップリング
炭素をつなぐ最良の方法・鈴木カップリングの説明が分かりやすかった.
10/5の朝日新聞の「異議あり」で坂本龍馬の人気に関して野田正彰さんへのインタビュー.
なかなか辛辣なことが書いてあった. 経営者が青春象にしがみつくのは「人格的に未熟だから.」
龍馬に憧れるのは「幼稚さの現れ.」 あと史実に基づかない「勝手な使い方はいいかげんにしてくれと」とのこと.
暗号検定の答え
>百人一首は「定家の暗号」という「歌織物」説に基づき、その配列の横に「漢数字」、縦に「いろは」を振る。
なんだよその
歌織物って.
合わせ言葉表の右上, 「古き軒ば」の「のき」と, 「ひさかたの光
のどけ
き」の「のき」を関連づけてるのか?
他にも"みかきもり"と"短き"を隣に置いてるし.
そんなトンデモっぽいのを符号表に使うなよ. 知的財産教育協会は誰も反対しなかったのか.
まあ, 「この説の主張が正しいか正しくないかはこの「暗号」を解く上では検討の必要がない」て書いてるので仕方ないか. いずれにせよつまらない問題だったと思う
肩こりのせいか, (比喩ではなく)首が回らなくなったので, ちょうど初めてキャンペーンをやってた整体院に行くことにした.
中国の人で, 日本語が苦手らしく電話予約してもそっけない. 予約で名前を聞かれなかったのは初めてだ.
行ったら, 女の人が(名前も聞かず)まず寝てと言うなり, いきなり肩とか腰を揉み始めた.
とてもしっかりとしたマッサージで上手なんだけど飛び交ってることばがずっと中国語なのが若干不安だ.
全然言葉は分からないなりにも, なんとなく聞いてると同じく隣の中国人のマッサージしてる人に日本語の数字の読み方を教えてもらいながら揉んでるんじゃないかと.
本当にきっちり1時間してもらった. ただ言葉が通じないと細かい場所の指定ができないなあ. 揉み返しが不安である. 首を曲げられないのはあんまし変わらなかった.
空飛ぶ人間 | NHK ワンダー×ワンダー
番組予告見て思わず録画してしまった. あまりの凄さに笑ってしまう.
ガッチャマン(ふっ古い…)みたいなひらひらしたスーツを着て1000m級の崖から飛び下りて空を飛ぶ人たち.
上級者は200km/hの速度で崖すれすれに飛ぶらしい. 他には飛行機と一緒に並走(?)する人もいた.
昔
御意見は光成滋生<herumi@nifty.com>までお願いします