2015年4月12日日曜日

150412

Ruby


Schizophrenic number(連続する個数 1.0)

0.
11111111111111111111111111111111111111111111111
0860
555555555555555555555555555555555555555555555
2730541
66666666666666666666666666666666666666666
0296260347
2222222222222222222222222222222222222
0426563940928819
4444444444444444444444444444444
38775551250401171874
9999999999999999999999999999
808249687711486305338541
66666666666666666666666
5987185738621440638655598958
33333333333333333333
0843460407627608206940277099609374
99999999999999
0642227587555983066639430321587456597
222222222
186349201679118083308184478360027737E25
の場合、
47, 45, 41, 37, 31, 28, 23, 20, 14, 9連続同じ数字が並んでいる。

n(>6)連続する個数を表示してみる。

require 'bigdecimal'
M = 700
N = 51
a = 0
(1..N).each{|i| a = 10 * a + i
  if i % 2 == 1
    str = BigDecimal.new(a).sqrt(M * 2).to_s
    ary1 = str.split('')
    cnt = -2
    cnt0 = -2
    cnt1 = 0
    # 変わり目の番号を収納
    ary2 = []
    # 7連続以上同じ数字ならtrue
    d = false
    b0, b1, b2, b3, b4, b5, f = -7, -6, -5, -4, -3, -2, -1
    ary1.each{|i|
      # 数字以外が出てきたら停止
      break if i == 'E'
      # M桁まで
      break if cnt > M - 1
      cnt += 1
      b0, b1, b2, b3, b4, b5, f = b1, b2, b3, b4, b5, f, i
      if [b0, b1, b2, b3, b4, b5, f].uniq.size == 1
        if !d
          cnt0 -= 6
          cnt1 += 7
          ary2 << cnt - 6
        else
          cnt1 += 1
        end
        d = true
      else
        cnt0 += 1
        ary2 << cnt if d
        d = false
      end
    }
    ary3 = []
    (0..ary2.size - 2).each{|i| ary3 << ary2[i + 1] - ary2[i] if i % 2 == 0}
    p [i, cnt, cnt0, cnt1, ary3.inject(:+), ary3]
  end
}

出力結果
[1, 1, 1, 0, nil, []]
[3, 700, 700, 0, nil, []]
[5, 700, 700, 0, nil, []]
[7, 700, 700, 0, nil, []]
[9, 700, 692, 8, 8, [8]]
[11, 700, 682, 18, 18, [10, 8]]
[13, 700, 678, 22, 22, [12, 10]]
[15, 700, 666, 34, 34, [14, 12, 8]]
[17, 700, 660, 40, 40, [16, 14, 10]]
[19, 700, 646, 54, 54, [18, 16, 12, 8]]
[21, 700, 638, 62, 62, [20, 18, 14, 10]]
[23, 700, 626, 74, 74, [21, 19, 15, 12, 7]]
[25, 700, 616, 84, 84, [23, 21, 17, 14, 9]]
[27, 700, 598, 102, 102, [25, 23, 19, 16, 11, 8]]
[29, 700, 587, 113, 113, [27, 25, 21, 17, 13, 10]]
[31, 700, 570, 130, 130, [29, 27, 23, 19, 14, 11, 7]]
[33, 700, 556, 144, 144, [31, 29, 25, 21, 16, 13, 9]]
[35, 700, 536, 164, 164, [33, 31, 27, 23, 18, 15, 10, 7]]
[37, 700, 520, 180, 180, [35, 33, 29, 25, 20, 17, 12, 9]]
[39, 700, 505, 195, 195, [37, 35, 31, 27, 22, 19, 14, 10]]
[41, 700, 489, 211, 211, [39, 37, 33, 29, 24, 21, 16, 12]]
[43, 700, 465, 235, 235, [41, 39, 35, 31, 26, 23, 18, 14, 8]]
[45, 700, 448, 252, 252, [43, 41, 37, 33, 28, 24, 20, 16, 10]]
[47, 700, 424, 276, 276, [45, 43, 39, 35, 29, 26, 22, 18, 12, 7]]
[49, 700, 405, 295, 295, [47, 45, 41, 37, 31, 28, 23, 20, 14, 9]]
[51, 700, 388, 312, 312, [49, 47, 42, 39, 33, 30, 25, 21, 15, 11]]

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。