回答編集履歴
2
small fix
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
|
22
22
|
offset = 0
|
23
23
|
if not '0' in a:
|
24
|
-
# offset =
|
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
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:
|