/ 最近 .rdf 追記 設定 本棚

脳log[2011-04-05~]



2011年04月05日 (火) Firefox4. なくなったステータスバーの代わりにリンク先を表示する左下の領域。ウィンドウに対してスペースが余ってるのにほとんど全ての URLで真ん中が省略されてしまって使えない。なんで左半分しか使わない。飾りじゃないんだよ。


2011年04月04日 (月) ショートボブの女の子って可愛いよな しまぱん」。保存したくなる画像が一枚もなくて新発見。ショートボブはそれだけで*ナシ*だということがわかった。たぶんこういった偏見に基づいてる。アクティブで自分を主張する空気を読まない。男友達のような気安さがないのはもちろん、女性に対して期待してしまう要素もない。手に負えない存在。/// 性格診断「ISTJ型:やらなければならないことはする」 たしかに義務感で動いてるし、こうと決めたこと決まったことに従うのが好きだ(納得できる理由がある限り)。ただ、スペックが低いので「おかれた立場によっては社交的に振舞う」ことはできないし、「級長やプロジェクトの責任者や地域社会のリーダーに祭り上げられること」もない。荷が重すぎる。質問の「この世には論理的なもの、科学的なものでは割り切れない物事があると信じている。」にはメタ質問の前振りなのかと勘ぐるほど違和感を覚えた。もので割り切れるものって何?すいかと棍棒?


2011年04月02日 (土) MSI Global – Mainboard - 790FX-GD70」使用中の PCの M/Bのページ。サイトのリニューアルでドライバなんかの更新が見つけにくくなった。でも深刻なのはそれよりも前。画像のギャラリーと拡大機能が jQueryを使ったスクリプトとともに埋め込まれたこと。画像以外のメインコンテンツが下に押しやられたり、PageDown, PageUp, Home, Endといったページナビゲーションキーを乗っ取られるのは不便の一言で済むが、←, →, Home, Endキーを押し続けると簡単にブラウザ(Fx3.6, Fx4)が DoS状態になる。Logicoolのマウスユーティリティ SetPointの機能 UniversalScrollを使ってると一層効果的に Firefoxをハングさせられる。リークしてるのかメモリの使用量も増加の一途。これはブラクラだよ。とっととギャラリーのキーボードインターフェイスを捨てたほうがいい。それが原因だし、どうせ不便を生んでただけなので。結局、作成者側が誰も使ってないからこの Webページとしての致命的な欠陥に気付かないんでしょ。


2011年04月01日 (金) 々。以前はできなかった気がしたが、今の ATOKだと「おどりじ」で変換できる。小学校の漢字ドリルにそう出てたからね。実際は小さい文字の入力に使う Lや Xと同じで、きぎ、ひび、ひとびと、ささき、たた、みたいに語の一部として変換するので使わないけど。


2011年03月30日 (水) Project Euler Problem 85。1999998だと思ったが incorrectだと蹴られる。9が並んでるので慎重に桁を数えたが、そういうミスではなかった。もう解らない。

最終更新: 2011-08-20T02:12+0900

[ProjectEuler] Problem 85

 Problem 85

incorrect

Target = 2_000_000
Size = Math.sqrt(Target*2).floor+1
a = (1..Size).map{|i| i*(i+1)/2 }
answer = 0
until a.empty?
	jv = a.last
	answer = [a.map{|iv| iv*jv }.min_by{|v| (v-Target).abs }, answer].min_by{|v| (v-Target).abs }
	a.pop
end
p answer

 @2011-04-14

まったく恥ずかしい。答えが合わないとなって当然問題を読み直してはいたんだけど、日を置いて改めて読んでみたら問題が何を求めてるのかが見えてきた。"nearest solution" ではなく "area" だったとさ。

Target = 2_000_000
Size = Math.sqrt(Target*2).floor+1
a = (1..Size).to_a
answer = [0,0]
until a.empty?
	j = a.last
	answer = ([answer] + a.map{|i| [i,j] }).min_by{|i,j| (i*(i+1)/2*j*(j+1)/2 - Target).abs }
	a.pop
end
puts "#{answer[0]} * #{answer[1]} = #{answer[0]*answer[1]}"

2011年03月28日 (月) 20110321に追記した。並記したかったので追記。


2011年03月27日 (日) Firefox4. 閲覧履歴の保存期間の設定がなくなってる。5年分くらいは保存するように設定してたんだから、間違っても勝手に消してくれるなよ。ディスクキャッシュと一緒に削除するのもなしだ。/// Firefoxボタンの階層メニュー。ポップアップがメニュー項目の左右ではなく、▶の左右に表示される。左に表示されると親メニューが隠れてしまうことを考えてない。ボタンが常にウィンドウの左上にあるという想定もあるだろうが。


2011年03月26日 (土) Firefox4. Ctrl+Eで検索バーフォーカスはどうした。タイトルバーダブルクリックで最大化解除はどうした。タイトルバー左端ダブルクリックで終了はどうした。Mozilla流をやめて Windowsアプリに同化することでシェアを伸ばしたのではなかったのか。タイトルバーはメニューバーを表示すれば表示されるんだけど、メニューはいらない。メニューのほとんどをシェブロンにしてしまえたらメニューバーの使い道が広がるのに。///追加。ちまちまちまちまタブの横幅を変更されるとマウスで連続して閉じるのが大変。target="_blank"が機能しない。機能することもある。Add-onの可能性もあるが、互換性のないアドオンはFxのアップデートにつきもののひどいUX。責任転嫁はできない。///「Aero Window Title :: Add-ons for Firefox」最高。///「Tabs Open Relative (Modified) 1.2」が原因だった。///順番にキーを押していって発見。Ctrl+Kで検索バーにフォーカス。Windows Explorerがもう Ctrl+Eを採用してんだから Ctrl+Kはない。Ctrl+Lと並べたかったのかしらんけど。///「Change Search Shortcut :: Add-ons for Firefox」"Allows to change the search shortcut. After the comedy with Panorama taking over CTRL+E, then switching to CTRL+SHIFT+E, without restoring CTRL+E," comedyに同意する。どうしてリリース前に復帰させられなかった。


2011年03月25日 (金) 見えないところでの思いやりが、本当の思いやりなのだと思う。「誰にでも見える思いやり」なんてのは、思いやりではないのではないだろうか。」 たぶん最近多い ACの CMについて。この CM、いいと思うけどなあ。行動を促してるんだと思う。思うだけではダメで行動に移さなければいけない。思いは見えないけど行動すればそれは誰にでも見える。それを思いやりと(そのCMでは)呼ぶんだと。見せる必要はないけど、見えても嘘にはならないんじゃない。(こういうことは書いてもわかり合えるとは思わないのでコメントしないでここに書いてる)。目立つのを嫌って行動できない日本人は多そう。考えすぎ。それも言い訳を。子供の時にたたき込まれてたら照れもなくできるんだろうとも思う。レディファーストとか。

最終更新: 2014-04-25T14:53+0900

[ProjectEuler] Problem 81, 82, 83

 Problem 81

迷路より簡単。右下から左上に向かって、右の要素と下の要素を参照しながら順番に処理するだけ。

matrix = DATA.lines.map{|ln| ln.chomp.split(",").map(&:to_i) }
raise "正方行列でない!" if matrix.size != matrix[0].size
(matrix.size-1).downto(0){|i|
	(matrix[i].size-1).downto(0){|j|
		incr = nil
		incr = matrix[i][j+1] if j+1 < matrix[i].size
		incr = matrix[i+1][j] if i+1 < matrix.size && (!incr || matrix[i+1][j] < incr)
		matrix[i][j] += incr if incr
	}
}
p matrix[0][0]
__END__
content of matrix.txt here.

 Problem 82

まだまだ簡単。最下段から、行を右へ左へ処理しながら上へ向かうだけ。こういう、問題・入力に依存して可変長のメモリを確保したりしない、そのうえ問題を単純に走査するだけの解法は安心できる。

Matrix = DATA.lines.map{|ln| ln.chomp.split(",").map(&:to_i) }.transpose # transpose:問いの右から左が、下から上への処理になる。
Order = Matrix.size
raise "正方行列でない!" if Matrix.size != Matrix[0].size

row = Matrix[0].dup # 1-line memo. row is now at the first(top) line of Matrix.
1.upto(Order-1){|i|
	# move from up ↓↓↓↓↓↓↓↓↓↓
	0.upto(Order-1){|j|
		row[j] += Matrix[i][j]
	}

	next if i == Order-1 # 最後の行は横移動不要(※禁止ではない)。最小値だけを選び取って答えにするから。

	# move right →→→→→→→→→→
	0.upto(Order-2){|j|
		src, dst, move_cost = row[j], row[j+1], Matrix[i][j+1]
		row[j+1] = src + move_cost if src + move_cost < dst
	}

	# move left ←←←←←←←←←←
	(Order-1).downto(1){|j|
		src, dst, move_cost = row[j], row[j-1], Matrix[i][j-1]
		row[j-1] = src + move_cost if src + move_cost < dst
	}
}
p row.min
__END__
content of matrix.txt here.

Array#transposeを使う機会があるなんて思わなかった!好きなメソッドは transpose(今日だけ)。ま、使わなくてもいいんだけど線形にアクセスするために。ま、メモリ構造からは遠く離れた Rubyなんだけど。


 @2013-05-11 アップデート

N×N確保していた作業メモを 1行分だけで済ませるようにスクリプトを修正。

コメントに「transpose:問いの右から左が、下から上への処理になる。」ってあるけど、今問題文を見ると左から右になってる。まあ、どっちからどっちでも変わらないからね。問題文が左から右になったからってわけではないけど、アップデート後は上から下の処理に変えてる。下から上だと、どうしてもその必然性を探してしまうから。

 Problem 83

シリーズの締め。迷路のときとは違って 80×80ともなると手当たりしだいに探索の手を伸ばしていくと 10分以上の時間がかかる。優先度を付けると insertのコストが加わったにもかかわらず、笑っちゃうぐらい一瞬で終わった。

C++だったら queueの実装として std::multimapを使うところだけど配列をヒープ構造にするのもありだ。

Matrix = DATA.lines.map{|ln| ln.chomp.split(",").map(&:to_i).freeze }.freeze
raise "正方行列でない!" if Matrix.size != Matrix[0].size
matrix = Matrix.map{|ln| Array.new(ln.size) }
size = matrix.size
moved = lambda{|i,j, l,m|
	return false if not (0...size).include?(l) or not (0...size).include?(m)
	src, dst, move_cost = matrix[i][j], matrix[l][m], Matrix[l][m]
	return false if dst && dst < src + move_cost

	matrix[l][m] = src + move_cost
	return true
}
matrix[0][0] = Matrix[0][0]
queue = [[0,0]]
insert = lambda{|l,m|
	val = matrix[l][m]
	queue.insert(queue.index{|i,j| val <= matrix[i][j] }||queue.size, [l,m])
}
until queue.empty?
	i,j = *(queue.shift)
	break if matrix.last.last and matrix.last.last <= matrix[i][j]
	[[i-1,j],[i+1,j],[i, j-1],[i,j+1]].each{|l,m|
		if moved[i,j, l,m]
			insert[l,m]
		end
	}
end
p matrix.last.last
__END__
content of matrix.txt here.

<queue>ヘッダには priority_queueクラスがあるし、<algorithm>には make_heap, pop_heap, push_heap といった、配列(RandomAccessIteratorをそなえたコンテナ)にかぶせて使うための関数があった。そりゃあるわなあ。ソートキーが要素のみから算出できない今回の場合に priority_queueを使う(外部キー)か、multimapを使う(内部キー)かはやっぱり決めかねるけど。


2011年03月24日 (木) デマ(=デマゴギー)。デマゴーグというのは聞いたことがあるな。すっかりデマカセのデマだと思ってた。


2011年03月23日 (水) アマゾンの(本屋として)ダメなところ。1.在庫が薄い。近くの本屋になくてもアマゾンなら、なんて今は昔。昔から「在庫あり」しか信用できないが今や在庫ありは珍しい。発売直後の本が特に弱い。2.発送が遅い。幅が広すぎるうえに信用ならない発送予定日と、発送(予定)日で並び替えできない注文管理画面。宙ぶらりんでほっとかれたりトラッキングしにくかったりするのが不満の素。すぐに発送されないからこれらがあらわになる。3.邪魔な段ボール。品によっては段ボールを買ったのかと錯覚する。4.配送コスト度外視。それは合理化による利得とは違うよね。運送会社の料金表をそのまま写したような配送料を設定する販売者もアホだが(「一定金額以上お買い物をすると代引き手数料があがります」<10万円の商品と500円の商品の利益が同じなわけじゃないでしょうに。商品にお金を出すのと手数料にお金を出すのでは意味が違うんよ。それは抵抗感の違いとなって買い物のハードルを上下すると思うんだけど)、1割引のマンガをただで送るというのもどうかしてる。


2011年03月21日 (月) セキュリティホールmemo 経由で、「原発がどんなものか知ってほしい(全)」。追記@2011-03-28:「怪文書「原発がどんなものか知ってほしい」の功罪|猫惑星日誌」俺は「原発がどんなものか知ってほしい」を今回の件で初めて読んだ。現場を知る人間の言葉として真実が含まれると思って大真面目に読んだから、それを 99.9%でたらめだと断じ、最後には人間の可能性や信念に訴える「原発がどんなものか知ってほしい(妖精現実 XMLアーカイブ)」が原発推進のために、踏み台になる(限られた、自分以外の)人々の境遇に目をつぶり便利な生活を捨てられない読者を誘導するプロパガンダにみえる。立場が違えば見えるものも言うことも違う。もう一つリンク。ファインマンさんの文章を孫引き「宇宙船の故障と、それによる人命の損失の確率については、 人々の間に大きな意見の隔たりがあるようである。この見積りは およそ100分の1というものから、10万分の1というものまであった。 高い確率は現場のエンジニアからきたものであり、いっぽう非常に低い確率は NASA上層部からきたものである。これほどの不一致がおこる原因と、 それがもたらす帰結はどういったものであろうか? 10万分の1の確率といえば、 これは300年のあいだ毎日スペースシャトルを打ち上げつづけても 1回しか失敗しないということを意味する。だから私たちは こう尋かなければならない。「この宇宙船に対して、 NASA上層部がこれほどまでに絶大な信頼をおいてしまった原因は何だろうか?」と。」電力会社の上層部ってのはこうですから「91年の関西電力・美浜原発2号機の蒸気発生器細管破断事故や、95年の「もんじゅ事故」、99年の茨城県東海村の臨界事故では、原発への不安が高まった。しかし、電力会社はいずれのケースも、部品の施工ミスや設計ミスなど「想定外の事象が原因」と強調。07年の新潟県中越沖地震で東電・柏崎刈羽原発が全機停止した時も「原因は変圧器の火災。原発の設計構造そのものに問題はない」と、深刻な事故につながるリスクを否定してきた。」想定外の、決して低くない確率で起こる「事象」にそなえる気があるのやらないのやら。そういうのが積み重なって大事故につながるんでしょ。電力会社と国は原発が(許容できる程度に)安全だ不可欠だとこれからも信じさせることができるんでしょうかっ。


2011年03月20日 (日)

最終更新: 2011-03-21T02:43+0900

[ProjectEuler] Problem 76, 77, 78

 Problem 76

Problem 31と同じ問題。その解答(20110125p01.03)。ただし、Problem 31には通用した俺の解法では全然終わらない。

Target = 100
a = [1] + [0]*Target
(Target-1).downto(1){|pick|
	0.upto(Target-pick){|i|
		a[i+pick] += a[i]
	}
}
p a[Target]

 Problem 77

素数ごとに一から再試行してるけど計算量はたかがしれてた。

require 'mathn'
prime_gen = Prime.new
primes = []
prime_gen.each{|prime|
	primes.push prime

	a = [1] + [0]*prime
	primes.each{|pr|
		0.upto(prime-pr){|i|
			a[i+pr] += a[i]
		}
	}

	answer = a.index{|x| 5000 < x }
	if answer
		p answer
		exit
	end
}

 Problem 78

まったくひどい解答。76から続くシリーズの締めらしく、何も考えないと計算量が膨大になる。手続き的な解法から一歩進む必要がある。それか一分ルールを無視して何時間もかけて良しとするか。

Target = 100000
a = [1] + [0]*Target
(Target-1).downto(1){|pick|
	0.upto(Target-pick){|i|
		a[i+pick] += a[i]
	}
}
p a.index{|x| x%1_000_000 == 0}