松下昇への接近

 旧 湾曲していく日常

結城先生のサルベジオン問題

numdot問題をやったのはすでに1年以上前か。(西暦の引き算を間違えて(平成26の6から3引いて3年前と勘違い)3年前と書いていた。

http://d.hatena.ne.jp/noharra/20130925
あのときはもう、寝ても覚めてもくらいの勢いで、熱中できた!


今回はサルベジオン問題をやってみた。
https://codeiq.jp/ace/yuki_hiroshi/q1215


答え1)V406435859539156181269150751031
答え2)V1101943557675920722238136981003
使用した環境: Ruby,LibreOffice Calc

POINT: 1問目:最初と最後の幾つかを調べると
Kは単調増加で、前後差の平均は約8×10の25乗とわかる。
それを使って答えを求めた。下記プログラムは出来てから整理したもの。
2問目:最初の幾つかのKの値の比を取ると、
1,0.5,1.5,0.25,0.75,1.25,1.75,0.125,0.375、といった規則で並んでいることが分かる。
与えられたKは奇数なので最後のブロックに属する。
基準になる数字は
633825300114114700748351602688(2の99乗)だ。
与えられたK(2023636070998557444542586045)に1を足し2で割った値と、2の99乗の和マイナス1
がインデクス番号。
任意のKに対して、idを求めるプログラム書けた!

1)

require 'net/http'
require 'uri'
dot=""
dt= Array.new
num=""
num0=208050656559285601386927895421059705239114932023754
suu=0
sa0=80166809078684100000000000
ll=100
	while ll**2 >0
	rrll='http://salvageon.textfile.org/?db=1&index='+suu.to_s
	uri = URI.parse(rrll)
	dot= Net::HTTP.get(uri)
	dt=dot.split
	dt[2].slice!(0,1)
	num=dt[2]
	chigai=-(num.to_i-num0)
	ll=chigai/sa0
	suu=suu+ll
	p ll
	p suu
	sleep 1
	end

2)

NN=99
K=2023636070998557444542586045
K2=K.to_s(2)
i=0
while i<100
	if K2.slice(-1)=="1" then
	break
	end	
K2.slice!(-1)
i=i+1
end
li=2**(NN-i)
JJ =("0b" + K2).oct
id=(JJ.to_i+1)/2 +li -1
p id

バッジ

結城 浩さん「サルベジオン社で宇宙船のデータを救え」問題の特典バッジ
と評価5、いただけましたあ〜!! 嬉しい

今回はかなり易しかったとのことだが、わたしには丁度よかった。


CodeIQサルベジオン問題、解答コードまとめ、の諸兄のコードを見て勉強しよう。
http://togetter.com/li/758302