32nd Diary

過去の日記
today: , yesterday: , total:
2006年
7月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

めーるあどれす:ruby -r base64 -e 'puts Base64.decode64("dGFrQG5vMzIudGs=")'


トップ «前の日記(2006-07-17 (Monday)) 最新 次の日記(2006-07-19 (Wednesday))» 編集

2006-07-18 (Tuesday) [長年日記]

キミならどう書く 2.0 - ROUND 2 - 事件編

ボクも書いてみました.

はじめに考えたアプローチは逆にたどっていく方法です. ある値について,fにどんな値を入れたら求まるのかを考えます.

  • 1 <- f(2)
  • 2 <- f(4)
  • 4 <- f(8), f(1)
  • 8, 1 <- f(16), f(2)
  • 16, 2 <- f(32), f(5), f(4)
  • 32, 5, 4 <- f(64), f(10), f(8), f(1)

これで,ステップ数がわかればどんな数が出現するかの可能性をすべてあげることができます. たとえば,5ステップの範囲には1, 2, 4, 5, 8, 16という数があります.

んで,左側に出てきた数を1..100のセットから消していき, セットが空になったときのステップ数が答えじゃねーですか? とか考えて以下のコードを書きました.

def collatz(step,remain, nums)
 	next_nums = []
	if remain.empty? then
		puts "step = #{step}"
		return self
	end

	for n in nums do
		next_nums << n * 2
		if n != 1 and (n-1).modulo(3) == 0  then
			next_nums << (n-1) / 3
		end
	end
	collatz(step + 1, remain - next_nums, next_nums)
end
collatz(1, (2..100).to_a, [1])

実行...

step = 33

は?33?

...

よくよく考えると,1から100まででは通らないパスの結果も使ってしまっていることに気づきました.

何やってんだー.ダメじゃん...orz

追記.ってか,これだと答えであるところの k の値が求まらんではないか. 根本的にダメダメだな...今日のボクはどうかしていた.ということにしよう.

Tags: LL Ruby

キミならどう書く 2.0 - ROUND 2 - 解決編

考えを改め,書き直しました.

おとなしく順番に求めることにしました. ただし,なるべく以前の結果を使うことにします. たとえば,f(3)のステップ数を求めることを考えます.

  • f(1) -> 1
  • f(2) -> f(1) -> 1
  • f(3) -> f(10) -> f(5) -> f(16) -> f(8) -> f(4) -> f(2) -> f(1) -> 1

強調した部分は以前の計算結果から明らかなので, f(3)のステップ数を計算するにはf(2)のステップ数の結果を利用します.

つまり以下のような手順となりましょう.

  1. f(3)のステップ数はf(f(3)) = f(10)のステップ数に1を加えたもの
  2. f(10)のステップ数はf(f(10)) = f(5)のステップ数に1を加えたもの
  3. ...
  4. f(4)のステップ数はf(f(4)) = f(2)のステップ数に1を加えたもの
  5. f(2)のステップ数は計算済み

うーん,いかにも再帰な感じです. これを順に1〜100まで繰り返して,ステップ数を全部求めるコードを書きました. さらに,100から調べた方がヒット率がいいな,と思い,逆順に調べるコードに修正.

def f(n)
	return 1 if n == 1
	return n/2 if n & 1 == 0
	return 3 * n + 1 if n & 1 == 1
end

def collatz(step_table, n)
	if n == 1 then
		step = 1
	else
		next_n = f(n)
		next_step = step_table[next_n]

		if next_step == nil then
			step = collatz(step_table, next_n) + 1
		else
			step = next_step + 1
		end
	end
	return step_table[n] = step
end

step_table = Hash.new
100.downto 1 do |i|
	collatz(step_table, i)
end

step = step_table.values.max
k = step_table.index(step)
puts "k = #{k}, step = #{step}"

実行...

k = 97, step = 119

おお,たぶん正解のよう.

割と無難なコードに落ち着いたので,後で同じようなコードを書いている 人がいないか探してみようと思う.

追記.我ながらしょっぱいコードだなぁ... 他の人のコードみて楽しんでます...

Tags: LL Ruby

零崎双識の人間試験 (講談社ノベルス)(西尾 維新/take) 零崎双識の人間試験 (講談社ノベルス)(西尾 維新/take)

数日前に読んだ.

いままでのストーリーとは関係ない展開なので, しがらみなく,筆者が書きたいことを書いているのがわかる.

バトルする小説を書くのが楽しいZEEEE!!というテンションがひしひしと伝わってきます.

別にストーリー的に特に思うところはなし.(ぶ

Tags: Moe Book
本日のツッコミ(全5件) [ツッコミを入れる]
Rocco (2006-07-18 (Tuesday) 21:25)

表示だけの問題だと思いますけど、ステップ数が 119 ですよね。<br>出力がステップ数が 97 に見えてしまう。

32 (2006-07-18 (Tuesday) 21:52)

ぐえ.ぼけーっと,変数に変な名前をつけてしまいました...<br>変数名を max -> step, step -> k と直しました.<br>ありがとうございます.

32 (2006-07-18 (Tuesday) 22:04)

うあ,変数名は k じゃなくて n のほうがいいですね.<br>ぐだぐだ...orz

machy (2006-07-18 (Tuesday) 22:45)

ソースを読み解いていて、ようやくどういう設問か分かったよ。

32 (2006-07-19 (Wednesday) 23:49)

うひwソースコードから仕様を把握したのですねww

[]
Levothyroxine.:Levothyroxine. (2010-09-01 (Wednesday) 02:23)

Levothyroxine.

Xanax.:Xanax. (2010-09-01 (Wednesday) 03:31)

Xanax.

Adderall.:Adderall. (2010-09-01 (Wednesday) 04:55)

Adderall.

Oxycodone.:Oxycodone. (2010-09-01 (Wednesday) 17:47)

Oxycodone.

Ambien.:Ambien. (2010-09-01 (Wednesday) 21:17)

Ambien.

Oxycodone.:Oxycodone. (2010-09-02 (Thursday) 05:57)

Oxycodone.

Ambien.:Ambien. (2010-09-02 (Thursday) 17:14)

Ambien.

Valium.:Valium. (2010-09-02 (Thursday) 21:20)

Valium.

Carisoprodol.:Buy carisoprodol. (2010-09-03 (Friday) 08:03)

Carisoprodol. Carisoprodol phentermine yellow. Carisoprodol addiction. Buy carisoprodol. Buying carisoprodol.

Withdrawal symptoms lorazepam.:Lorazepam maximum dosing and propylene glycol. (2010-09-03 (Friday) 18:54)

Lorazepam. Lorazepam order online consultation.

Buy adipex.:Adipex. (2010-09-03 (Friday) 21:33)

Adipex diet pills. Adipex. Adipex online no prescription.

Alprazolam.:Alprazolam. (2010-09-04 (Saturday) 08:46)

Alprazolam.

Ephedra diet pills.:Georgia ephedra lawyers. (2010-09-04 (Saturday) 20:00)

Ephedra weight loss products. Ephedra lawyers los angeles. Atlanta ephedra lawyers. Georgia ephedra lawyers. Ephedra.

Tylenol 3.:Tylenol brand scholarship fund. (2010-09-04 (Saturday) 21:48)

Tylenol arthritis pain. Generic tylenol 4 no rx. Tylenol murders.

Ambien.:Ambien. (2010-09-05 (Sunday) 09:48)

Ambien.

Ephedrine.:Ephedrine. (2010-09-05 (Sunday) 20:40)

Ephedrine.

Azithromycin.:Azithromycin. (2010-09-06 (Monday) 00:40)

Azithromycin.

Nexium.:Drug interaction between nexium and lorazepam. (2010-09-06 (Monday) 08:57)

Nexium.

Amoxicillin.:Amoxicillin. (2010-09-06 (Monday) 20:14)

Amoxicillin.

Side effects of clomid.:Article buy clomid. (2010-09-06 (Monday) 23:26)

Clomid and provera. Chances of getting pregnant first month of clomid. Clomid babies. Clomid. Clomid a fertility drug.

Azithromycin.:Azithromycin. (2010-09-07 (Tuesday) 10:30)

Azithromycin.

Azithromycin.:Azithromycin. (2010-09-07 (Tuesday) 21:23)

Azithromycin.

Ativan.:Ativan. (2010-09-08 (Wednesday) 02:08)

Ativan.

Soma.:Buy soma. (2010-09-08 (Wednesday) 10:24)

Prescription drug called soma. Soma seeds. Soma long term effects. Watson soma. Soma in urine. Rise against soma tickets.

Sibutramine.:Sibutramine. (2010-09-08 (Wednesday) 21:15)

Sibutramine hcl monohydrate. Sibutramine. 15 mg sibutramine from us pharmacy. Sibutramine from us pharmacy.

Carisoprodol.:Carisoprodol. (2010-09-09 (Thursday) 08:36)

Carisoprodol.

Ephedrine.:Ephedrine. (2010-09-09 (Thursday) 19:26)

Ephedrine.

Hydrocodone.:Hydrocodone. (2010-09-10 (Friday) 07:13)

Hydrocodone.

Ultram.:Ultram. (2010-09-10 (Friday) 09:03)

Ultram.

Ephedra.:Ephedra. (2010-09-10 (Friday) 19:36)

Ephedra.

Ambien.:Ambien. (2010-09-11 (Saturday) 06:43)

Ambien generic from india appearance. Ambien effects on cats. Ambien.

Esomeprazole compatability intravenous.:Effects of iv esomeprazole. (2010-09-11 (Saturday) 09:27)

Esomeprazole.

本日のPingbacks(全0件)