teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

small fix

2016/11/19 09:18

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  offset = 0
23
23
  if not '0' in a:
24
- # offset = Π_{i=0}^{i < n} (radix ^ i)
24
+ # offset = Σ_{i=0}^{i < n} (radix ^ i)
25
25
  offset = sum([radix ** i for i in range(n)])
26
26
  else:
27
27
  offset = 1

1

add comment

2016/11/19 09:18

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  アルゴリズムのプロトタイピングにPython言語を使ってみました。基本的な考え方は次の通りです。
2
2
 
3
- - 「使う数字の個数」を基数とみなす。つまり`n`桁の`radix`進数として中央値を考える。
3
+ - 「使う数字の個数」を基数(`raidx`)とみなす。つまり`n`桁の`radix`進数として中央値を考える。
4
4
  - 「使う数字」に`0`が含まれない場合、長さが`n`桁未満の組合せ総数をカウントし(`offset`)中央値計算時のオフセットとする。
5
5
  - 「使う数字」に`0`が含まれる場合、`n`桁の`radix`進数数え上げにて既に`n`桁未満の数を含むため、オフセットを調整する。(入力が`3 045`のとき、総数`radix ** n`には`004`, `005`, ...が計上されている)
6
6
 
@@ -9,6 +9,7 @@
9
9
  n = 15
10
10
  a = list("12345789")
11
11
 
12
+ # 10進数値valueを"使う数値からなるradix進数"で再構築
12
13
  def dump(value):
13
14
  result = ""
14
15
  while 0 < value:
@@ -16,14 +17,16 @@
16
17
  value = value // radix
17
18
  print(result)
18
19
 
19
- radix = len(a)
20
+ radix = len(a) # 基数
21
+
20
22
  offset = 0
21
-
22
23
  if not '0' in a:
24
+ # offset = Π_{i=0}^{i < n} (radix ^ i)
23
25
  offset = sum([radix ** i for i in range(n)])
24
26
  else:
25
27
  offset = 1
26
28
 
29
+ # 中央値を計算(10進数)
27
30
  median = (radix ** n - offset) // 2
28
31
 
29
32
  if radix % 2 == 0: