/ 最近 .rdf 追記 設定 本棚

log[2011-03-08]



20110308() 本の: グラックカドライバーをアップデトしない低能達ップデトしないよATI RADEON X1600 PROだもんいまさら関連のある変更があるとも思えないしって調べてみたら一年前にリリースされた最新の(そしてたぶん最後の)ージョンがイールされてたドを買い換えようにも最近の GPUはでかいしアドル時の消費電力がたぶん今のカドの消費電力と同じくらいだと思うんだよね無駄

最終更: 2011-03-12T03:46+0900

[ProjectEuler] Q62, Q63, Q64

 Q62

"exactly five" って書いてあるから同じ数字の並べ替えで作れる立方数が 6以上あってもダメだと思うんだ

memo = Hash.new{|h,k| h[k] = [] }
n = 0
k_length = 1
loop{
	n += 1
	cube = n*n*n
	k = cube.to_s.split(//).sort.join('')
	if k.length != k_length
		answer = memo.values.select{|cubes| cubes.size == 5 }
		if not answer.empty?
			answer.each{|cubes| p cubes }
			exit
		end
		memo.clear
		k_length = k.length
	end
	memo[k] << cube
}

 Q63

# (x-1)/x <= log10(n) < 1 (n = ?,?,...)
count = 0
x = 0
loop{
	x += 1
	boundary = (x-1.0)/x
	lower_bound = (1..9).to_a.reverse.find{|n| Math.log10(n) < boundary } || 0
	count += 9 - lower_bound
	break if lower_bound == 9
}
p count

またまDreamshire | Project Euler Problem 63 Solutionの解答を検討してみたい二重のループなんてないlogの計算だって 9回だどういうことだ?

  1. 10n乗は常に n+1桁になる
  2. 9n乗は 10n乗より小さいため n+1桁には絶対に届かずある程度までは n桁を保つがそのうち n-1桁に落ちる
  3. 8n乗は 9n乗より早く n-1桁に落ちる
  4. 以下 1n乗まで
  5. 「ある程度って具体的には?
  6. 10を約0.954乗すると 9になる910より 0.046(=1-0.954)程度小さい数だ
  7. この 0.046がいくつ集まると 10一個分小さい(=桁が落ちる)ことになるだろう21.7(=1÷0.046)
  8. 9の場合21乗までは n乗が n桁を保っているが 22乗は違う

というーリーをひねり出した910より 0.046(=1-0.954)程度小さい数だってくだりがいかにも苦しい小数だからごまかしがきいてるけどったり 10一個分小さくなる場合は nn-1っち? (たぶんまだ n桁だな11がそ)

ともあれ明かされてみればワンライナーの問題だったよ

p (1..9).inject(0){|sum,n| sum + (1/(1-Math.log10(n))).floor }

常用対数を直接求めるメソドが用意されてるあたりが Rubyだなとおもた

 Q64

連分数っていうらしいanの求め方、a += 1 while 0 <= r - (n - d*(a+1))**2 の条件部分が判然としないスクリト中のコメトにあるように対象としてるルトの係数が必ず約分されて 1になることも理解できてない

def next_frac(r, n, d) # (√r + n) / d = a + 1 / [(√r + n_) / d_]
	a = 0
	a += 1 while 0 <= r - (n - d*(a+1))**2
	d_ = (r - (n - d*a)**2) / d
	raise if (r - (n - d*a)**2) % d != 0 # why OK?
	n_ = -(n - d*a)
	return a, r, n_, d_
end

def period_of(r)
	rnd = [r, 0, 1]
	arr = []
	loop{
		a, *rnd = next_frac(*rnd)
		arr << rnd
		period = arr.size-1 - arr.index(rnd)
		return period if 0 != period
		return 0 if rnd[2] == 0 # √r is rational.
	}
end

count = 0
1.upto(10000){|n|
	count += 1 if period_of(n) % 2 == 1
}
p count

ところでこの問題を解くときに Math.sqrtを使うのってインチキくさくない?(だから使ってないんだけ)


20110307() 『コンクリト マテマクス googleコンクリトマテマクスを検索するとマテマクスとマテリアルが似た語にみなされるいきなり逸れたが高揚している表紙とかざりの紙をめくるとタトルととも「オイラーに捧げると書いてあったProject Eulerに必携の書なのは間違いない(表紙を開いてすらいないからそのことにすぐ気づけないんだ)学校の教科書ではついぞ覚えがないがこの感覚は J.P.ーガ『星を継ぐものを読んだときに似ている小説と違い演習問題の存在が憂鬱にさせるが楽し「読める本だ


20110306() フラクタル-FRACTALE-6「最果ての町は面白かったここからに期待


20110305() 携帯の個体識別番号「通信の秘密」や「個人情報に該当しない? - スラッシト・ャパンそれらに準じるものだと思うそしてそんなものを強制的に垂れ流すケータイブラウザに改善を要求したい


20110303() 電気カーペ左面と右面を別々に制御できるだけの変哲のないものそのコトローラオンオフの 2-stateスイッチと左面-全面-右面の 3-stateスイッチーペトの状態が 4しかないのにスイッチには 6複雑度が増しているここに両面にそれぞれ人がいてそれぞれ暑さ寒さの感じ方が違うとする左面の人がこまめにスイッチをオンオフしたがりその際にカーペトの現在の状態を確認するような慎重さを持ち合わせない粗忽者だったら()右面の人は不要なのにスイッチを入れられ必要なのにスイッチを切られたりということがしっちゅうだ明らかに2つのスイッチは左面のオンオフと右面のオンオフであるべきだった※目視するのが面倒でも手探りで二回操作するだけで自分の側だけをオンオフできるはずなのだこの話の趣旨はあくまでその二回の操作すら無駄であり無理な要求だったということだけど


20110302()

最終更: 2011-03-04T22:27+0900

20110223p01の続き

認証結果(GET/POSTータ)の再利用によるなりすましを防ぐために nonceを使うのが一般的でもそうするとコメトのプレビー時にはまだ認証ができないことになる事前に認証してしまったら自分自身がその結果を再利用するかたちになるからtDiaryはアカウトやログインって概念を管理してないから OpenIDによる認証結果をそれらと結びつけて持続させることができない認証とコメトの投稿が同時のぶっつけ本番書き込み前にどういう表示になるのかはやっぱり知りたいよ

Bloggerの解

表示名にはOpenID プロバイダから Google に送信されたあなたの名前が使用されます。表示名がない場合はOpenIDURL から表示名の取得を試みます。

BloggerOpenID を使用してコメトを書き込む - Blogger ヘルプ

こういう割り切りが必要なのかなでも Yahoo!!!なんかは味気ない URLしか返してこないよね(1)mixiしか聞かない表示名が取得できたってのはもちろんmyOpenIDもユーザーフレドリーな名前を返す。ペルソナをかぶることすらできるから選んだOpenID Providerとしての Googleはひと味違って claimed_idrealmごとに固有のものに変化するらしい(2)Webービスからするとーザーをリダイレトしたときと返ってきたときの claimed_idが変わったように見えるOpenIDをいろんなサービスへのログイン手段としてだけみるなら余分な情報を渡さないのはメリ自己紹介として URLを提示したときにはそれと違うものが claimed_idとして Webアプリに渡るのはデメリさてドメインの URLを提示しておいてドメインから Googleへ認証を delegateした場合の claimed_idはどうなる?

1 知らぬ間に AX(Attribute Exchange)に対応してたYahoo! JAPANOpenIDでプロール情報を提供 拡張仕AXUIに対応:CodeZineでもSREGには対応しないってどういうこと? AXの汎用性は却って対応が面倒なんだけどAttribute Exchange のメモ - Yet Another Hackadelic定義済みのシーマがあるらしいがすでに二つもある

2っともそのことを知ったのはこういうタトルの記事OpenIDGoogleからグローバルユニークなユーザー識別子を取得できるかもしれない方法 - r-webliferealm(Webービスドメイン)固有の claimed_id 「グローバルユニークなユーザー識別子

閑話休題nonceをワンタイムでなく時限式にするしかないのだろうタイムアって嫌いなんだけど


 @2011-03-04

OpenID Providerへコメトの全文ごとユーザーをリダイレトするのはまずいかなと思って通常通りコメトを保存した後でリダイレトし正しく認証されて返ってきたときにその印としてコメトに OP名を付与することを考えた問題はその認証がどのコメトに対するものなのかだーザーを送り出すとき「このパラメータと一緒に返ってきてねということはできるが……コメトを他者が推測できない UUIDみたいなものとともに保存しておいてユーザーにそれを運んでもらおう(もちろんどの日の日記に対するコメトなのかを表すパラメータもユーザーに運んでもら)


20110301()

最終更: 2011-03-02T05:24+0900

[ProjectEuler] Q61

 Q61

何も考えずにコングしただ一瞬 CPUが考え込みます。

generators = [
	lambda{ n = 0
		lambda{ n+=1; n*(n+1)/2 }
	}.call,
	lambda{ n = 0
		lambda{ n+=1; n*n }
	}.call,
	lambda{ n = 0
		lambda{ n+=1; n*(3*n-1)/2 }
	}.call,
	lambda{ n = 0
		lambda{ n+=1; n*(2*n-1) }
	}.call,
	lambda{ n = 0
		lambda{ n+=1; n*(5*n-3)/2 }
	}.call,
	lambda{ n = 0
		lambda{ n+=1; n*(3*n-2) }
	}.call,
]
# 数を準備
d4polynumbers = generators.map{|g|
	() while (p = g.call) < 1000
	a = [p]
	a.push(p) while (p = g.call) < 10000
	a
}
# 端緒(の集まり)
bunch_of_chain = d4polynumbers[d4polynumbers.size-1].map{|p|
	[[p, d4polynumbers.size-1]]
}
# 端緒を伸ばすもの
extender = lambda{|chain, pool|
	xx = chain.last.first.to_s[-2,2]
	( (0...(pool.size)).to_a - chain.map{|_| _.last } ).map{|i|
		[i, pool[i]]
	}.map{|i, nums|
		nums.find_all{|num|
			num.to_s[0,2] == xx
		}.map{|num|
			chain + [[num, i]]
		}
	}.inject(&:+)
}
# 伸ばしていく
(d4polynumbers.size-1).times{
	bunch_of_chain = bunch_of_chain.map{|chain|
		extender[chain, d4polynumbers]
	}.inject(&:+)
}
# 輪っか?
bunch_of_cyclic_chain = bunch_of_chain.reject{|chain|
	chain.first.first.to_s[0,2] != chain.last.first.to_s[-2,2]
}
# 出力
bunch_of_cyclic_chain.each{|chain|
	puts chain.map{|a,_| a }.join("\t")
	puts chain.map{|_,b| "P#{b+3}" }.join("\t")
	puts "sum: #{chain.map{|a,_| a }.inject(&:+)}"
}

先は長いのにもう失速してる良いもの悪いもの: Project Euler100問解いてみたトレーションとか聞いたこともない単語なんだけど……

中学生の時に 350 の一の位は何かという問題が出たでも Problem 188は何乗したらいいかもわからない下手の考え休むに似たりっていうけどどうしたもんかなあない知恵を絞るのも悪くないと思うんだけど


20110225() レベルE(アニメ)ャンプで読んでいて単行本も持ってるので話は知ってるんだけど面白いカラーレンジーの話をみてたらゲームがやりたくなってきてった末にうっかりロマンシング サ・2を選んでしまったSFC本体と一緒に買った一番最初のソトだ中古で 2000時間が過ぎていく~


20110224() まだ赤盤を再生していないドル上げすぎ


20110223() 周回遅れの「これ2007年頃の日記じゃないのですよ

最終更: 2011-08-08T21:28+0900

myOpenID (www.myopenid.com)に登録した

目当てはペルソナ機能OpenIDは自分が何者かを名乗るためのものでまた他人に自分の名を騙らせないためのものだと思っているだもんでIDとなる URLとは別に表示名としてどう名乗るのかを対象 Webアプリごとに選べるペルソナ機能は魅力

OpenIDについて認証結果(Webアプリに対する GET/POSTリクエ)の改ざんを防ぐ仕組みと再利用を防ぐ仕組みを勉強した再利用が悪なのかはわからないけど

日記データとしては openid.claimed_idopenid.sreg.email, openid.sreg.nicknameを保存するとするemail, nicknameは従来の自由入力欄と同じ扱いオプションだし自由に書き換えられる認証と同時に取得できたらそれをデフト値にするってだURLの形をした openid.claimed_idはこれまでなかったものでーザーの識別情報として使いなりすましを排除すると同時にユーザーのホームページであることが期待されるFacebookやはてなダイアリーなど人となりがわかる主たる活動場の URL俺だったhttp://vvvvvv.sakura.ne.jp/ds14050/ (identified by www.myopenid.com)となる本当はアイコンも取得してそのリンク先を claimed_idとしたいURLは表示するには長すぎる

Cookieには openid.claimed_idを保存しておいてダメ元で JavaScriptimmediateドで認証を行わせると二回目から便利かもどういうフローだと迷わず最小の手間でコメトを投稿できるだろうWebービスを利用した経験が皆無で模範が思い浮かばない


20110222() 客の意識『半額を買って悪いから<言い換えはナイスだけど俺の意識は違うワゴンセールに限らずーパーやコンビニのすかすかの棚って残飯あさりしてるみたいで購入意欲が減退するそれ「他の客が買わなかったものなわけだししかも後者は半額でもないっして半額の商品を買うことがうしろめたいなんてことはないそれからそれから古い商品を寄せ集めるのはうまくないそれは安いものを探してる人には役立つけどその商品を必要としていてなおかつすぐに消費することがわかってる人(俺だ)にとっては見つけにくくなってる


20110220() tDiaryrecent_listが特定の条件で動かない話>[tDiary-devel] SAFE=1recent_list が動かない そういえば昔recent_list.rbを書き直したことがあった>20090114p01 多分に実験的な方法でだけど……自分で書いたものながらいま読むh.fetch(k){loaded_months[k]}の行の意図が不可解だったよく読むとこれは diariesに新しいアクセサを追加しているわかりやすく書き直すとこういうこと>h.fetch("yyyymmdd"){loaded_months["yyyymm"]} うまくないなあ


20110217() 「ロジクール ワイヤスマウス M515を発売< ポイM515の底面にあトラッキングセンサー部分は…(中略)…マウスの動作不良の原因になりがちな繊維やホコリトの毛などがセンサー部分に入り込むのを防ぎます「マウスを握る手を検知した時にだけ駆動させる省エネセンサーが内蔵されておりソファの上などで起こりうる意図しないマウスの動きを防ぐとともに…(後略)どちらも MX610に対して持っていた不満点だ良い