- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
616 :デフォルトの名無しさん[sage]:2016/08/03(水) 15:17:25.06 ID:B5cRJMaS - sを列の文字列とする
A-Zを A=0, Z=25 の26進数とみなして s + B..B(Bがsの桁数個) - B が列の番号 だから>>603の下の式のようになる これの逆変換が求めるものだけど素直にやると桁の左にあるAがなくなってしまうので 一旦 BA..A(Aはsの桁数個)を足しておいて最後にBを削れば良い それが>>603の上の式
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
618 :デフォルトの名無しさん[sage]:2016/08/03(水) 15:31:21.63 ID:B5cRJMaS - じゃあFixnum#bit_lengthでも使おう
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
619 :デフォルトの名無しさん[sage]:2016/08/03(水) 15:43:49.69 ID:B5cRJMaS - つまりこういうことね
(n + 2 + 24*26**((25*n + 26).bit_length/4.7).to_i/25).to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
625 :デフォルトの名無しさん[sage]:2016/08/03(水) 17:02:40.83 ID:B5cRJMaS - まだ行けるのかな
n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+'Z'}.delete('@') # 75 B (n+2+24*26**Math.log(25*n+26,26).to_i/25).to_s(26).tr('0-9a-p','A-Z')[1..-1] # 77 B
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
629 :デフォルトの名無しさん[sage]:2016/08/03(水) 18:09:55.37 ID:B5cRJMaS - >>628
Math.logを使うのはいつでも正しいよ >>626が言ってるのは>>623のこと bit_lengthを使う方も10**20000くらいまでは正しい
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
630 :デフォルトの名無しさん[sage]:2016/08/03(水) 18:17:06.18 ID:B5cRJMaS - 「いつでも」は言いすぎだった
logも9.603431447*10**18989までは正しく動作するよ
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
634 :デフォルトの名無しさん[sage]:2016/08/03(水) 18:39:46.41 ID:B5cRJMaS - >>633
なんかキレてんの? システムに依存しない、アホみたいにでかい数値に対してすらいつでも正しいコードなんて存在するわけないだろ
|
- Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net
636 :デフォルトの名無しさん[sage]:2016/08/03(水) 19:14:20.38 ID:B5cRJMaS - そうか、なんかすまんかった
いい加減黙ります ゴルフスレとかあったら面白いかもね
|