[1][2][3][10239]_10240
「 例えば 10240進数は こんなノッテイションでいいだろうか☆?」
1*10240^3 + 2*10240^2 + 3*10240^1 + 10239*10240^0 = 1073951580159
digits = []
digits.append("1")
digits.append("2")
digits.append("3")
s = "[{}]_10239".format("][".join(digits))
print("Answer: {}.".format(s))
Answer: [1][2][3]_10239.
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
「 オブジェクト指向を使って 複数のプロパティーをメソッドを通して1つにして出力すれば すっきり☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.base = int(arr[1])
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
Answer: [1][2][3]_10240.
Answer: [1][2][3]_16.
「 そういうときは 1度に全部作ろうとせず、
部分に分け、できる部分から作る☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = arr[0].split("][")
self.base = int(arr[1])
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
Answer: [1][2][3]_10240.
Answer: [[2][5][6]]_16.
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = arr[0][1:-1].split("][")
self.base = int(arr[1])
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
Answer: [1][2][3]_10240.
Answer: [2][5][6]_16.
「 どこを いじったのか、何をしたのか 解説が欲しいんだけど」
「 じゃあ 多進数を 数値型に落とし込んでほしいが、そうか、int 型は10進整数なんだな☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = arr[0][1:-1].split("][")
self.base = int(arr[1])
def to_decimal(self):
"""
10進整数
"""
return 0
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
print("Answer: {}.".format(x.to_decimal()))
Answer: [1][2][3]_10240.
Answer: [2][5][6]_16.
Answer: 0.
「 そこも 漸進 して作る☆ 部分から作って全体へ至れだぜ☆ まずは 0 を出せだぜ☆」
「 print文を使ったデバッグライトや ブレークポイントを置いてステップインするのとか 誰でもやってるだろ☆
説明不要だよな☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def to_decimal(self):
"""
10進整数
"""
sum = 0
for dig in self.digits:
sum += dig
return sum
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
print("Answer: {}.".format(x.to_decimal()))
Answer: [1][2][3]_10240.
Answer: [2][5][6]_16.
Answer: 13.
「 まず 総和 を出すプログラムを作れだぜ☆ 基本をルーチンするだけで だいたいのものは作れる☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits, base):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def to_decimal(self):
"""
10進整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic([1, 2, 3], 10240)
print("Answer: {}.".format(x.get_value()))
x.parse_value("[2][5][6]_16")
print("Answer: {}.".format(x.get_value()))
print("Answer: {}.".format(x.to_decimal()))
Answer: [1][2][3]_10240.
Answer: [2][5][6]_16.
Answer: 598.
「 筆算のリクツを そのままコードにしたら こうだが……☆ 1秒未満で結果出るし、これで十分だろ☆」
Answer: [1][2][3][10239]_10240.
Answer: 1073951580159.
123
[1][2][3]_10
「 10進で どうやってセットするんだぜ☆?
1桁ずつ いちいち へんちくりん な箱で囲むのか☆?」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits=[], base=10):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def set_by_decimal(self, dec):
self.digits = [dec]
self.base = 10
def to_decimal(self):
"""
10進整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic()
x.set_by_decimal(123)
print("Answer: {}.".format(x.get_value()))
print("Answer: {}.".format(x.to_decimal()))
Answer: [123]_10.
Answer: 123.
「 まず 入れた数 を そのまま返すメソッドを作るんだぜ☆ ここから 完成に向けて 漸近していく☆」
「 その途中の工程の 完成に少しずつ寄せていくための 頭の中にある考え方に プログラミングのテクニックがあるんじゃないのか☆?」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits=[], base=10):
self.digits = digits
self.base = base
def get_value(self):
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_value(self, val):
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def set_by_decimal(self, sum):
self.digits.clear()
self.base = 10
while 0 < sum:
digit = sum % self.base
sum -= digit
sum //= self.base
self.digits.append(digit)
self.digits = [int(i) for i in reversed(self.digits)]
def to_decimal(self):
"""
10進整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic()
x.set_by_decimal(123)
print("Answer: {}.".format(x.get_value()))
print("Answer: {}.".format(x.to_decimal()))
Answer: [1][2][3]_10.
Answer: 123.
「 int型は decimal(10進数)というわけでは ないんじゃないの?」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits=[], base=10):
self.digits = digits
self.base = base
def get_string(self):
"""
多進数ブラケット書式
"""
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_string(self, val):
"""
多進数ブラケット書式のパース
"""
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def set_by_int(self, sum):
self.digits.clear()
while 0 < sum:
digit = sum % self.base
sum -= digit
sum //= self.base
self.digits.append(digit)
self.digits = [int(i) for i in reversed(self.digits)]
def set_base(self, base):
"""
基数変換
"""
sum = self.to_int()
self.base = base
self.set_by_int(sum)
def to_int(self):
"""
整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic()
x.set_by_int(123)
print("Info : x.set_by_int(123)")
print("String : {}.".format(x.get_string()))
print("Int : {}.".format(x.to_int()))
x.set_base(2)
print("Info : x.set_base(2)")
print("String : {}.".format(x.get_string()))
print("Int : {}.".format(x.to_int()))
Info : x.set_by_int(123)
String : [1][2][3]_10.
Int : 123.
Info : x.set_base(2)
String : [1][1][1][1][0][1][1]_2.
Int : 123.
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits=[], base=10):
self.digits = digits
self.base = base
def get_string(self):
"""
多進数ブラケット書式
"""
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_string(self, val):
"""
多進数ブラケット書式のパース
"""
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def set_int(self, sum):
self.digits.clear()
while 0 < sum:
digit = sum % self.base
sum -= digit
sum //= self.base
self.digits.append(digit)
self.digits = [int(i) for i in reversed(self.digits)]
def set_base(self, base):
"""
基数変換
"""
sum = self.to_int()
self.base = base
self.set_int(sum)
def to_int(self):
"""
整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic()
x.set_base(10240)
# n^16 で 0<=n<=20。
for n in range(0, 21):
x.set_int(n**16)
print("{:>2}: {:>24}.".format(n, x.get_string()))
0: []_10240.
1: [1]_10240.
2: [6][4096]_10240.
3: [4203][8001]_10240.
4: [40][9830][4096]_10240.
5: [1455][1961][1985]_10240.
6: [2][6424][2054][4096]_10240.
7: [30][9733][9455][9601]_10240.
8: [262][1474][5734][4096]_10240.
9: [1725][7777][6337][5761]_10240.
10: [9313][2311][6560][0]_10240.
11: [4][1834][212][1709][4801]_10240.
12: [16][8346][9052][1638][4096]_10240.
13: [60][5317][5218][9024][9281]_10240.
14: [198][857][1126][6][4096]_10240.
15: [597][4026][10045][1186][9985]_10240.
16: [1677][7389][1884][1638][4096]_10240.
17: [4425][7266][5135][4092][6401]_10240.
18: [1][804][8816][7792][4102][4096]_10240.
19: [2][5753][6079][9313][5484][6721]_10240.
20: [5][8404][6602][5120][0][0]_10240.
「 これで nの16乗を 10240進数で見る、ということも でけるようになったぜ☆」
class MultiAdic(object):
"""
多進数
"""
def __init__(self, digits=[], base=10):
self.digits = digits
self.base = base
def get_string(self):
"""
多進数ブラケット書式
"""
return "[{}]_{}".format("][".join(map(str, self.digits)), self.base)
def parse_string(self, val):
"""
多進数ブラケット書式のパース
"""
arr = val.split("_")
self.digits = [int(i) for i in arr[0][1:-1].split("][")]
self.base = int(arr[1])
def set_int(self, sum):
self.digits.clear()
while 0 < sum:
digit = sum % self.base
sum -= digit
sum //= self.base
self.digits.append(digit)
self.digits = [int(i) for i in reversed(self.digits)]
def get_base(self):
return self.base
def set_base(self, base):
"""
基数変換
"""
sum = self.to_int()
self.base = base
self.set_int(sum)
def to_int(self):
"""
整数
"""
sum = 0
for dig in self.digits:
sum *= self.base
sum += dig
return sum
x = MultiAdic()
# x = MultiAdic([1, 2, 3], 2)
# Example.
x.set_int(123)
print("Info : x.set_by_int(123)")
print("String : {}.".format(x.get_string()))
print("Int : {}.".format(x.to_int()))
x.set_base(2)
print("Info : x.set_base(2)")
print("String : {}.".format(x.get_string()))
print("Int : {}.".format(x.to_int()))
"""
# Show list.
power = 2
# 2乗と、5のn乗は合う☆
print("||10 adic|1000 adic|25 adic|125 adic|625 adic|")
print("|--:|--:|--:|--:|--:|--:|")
x.set_base(1000)
y = MultiAdic()
y.set_base(25)
z = MultiAdic()
z.set_base(125)
w = MultiAdic()
w.set_base(625)
for n in range(0, 1001):
dec = n**power
x.set_int(dec)
y.set_int(dec)
z.set_int(dec)
w.set_int(dec)
print("|{:>4}^{}|{:>8}_10|{:>20}|{:>25}|{:>20}|{:>20}|".format(
n, power, dec, x.get_string(), y.get_string(), z.get_string(), w.get_string()))
"""
# Show list.
power = 6
# 6乗と、度数法は合う☆
print("||10 adic|96 adic|120 adic|240 adic|360 adic|")
print("|--:|--:|--:|--:|--:|--:|")
x.set_base(96)
y = MultiAdic()
y.set_base(120)
z = MultiAdic()
z.set_base(240)
w = MultiAdic()
w.set_base(360)
for n in range(0, 1001):
dec = n**power
x.set_int(dec)
y.set_int(dec)
z.set_int(dec)
w.set_int(dec)
print("|{:>4}^{}|{:>25}_10|{:>45}|{:>65}|{:>50}|{:>50}|".format(
n, power, dec, x.get_string(), y.get_string(), z.get_string(), w.get_string()))
「 とりあえず 適当に書いてしまった 表を作るスクリプトを貼っておくぜ☆」
<書きかけ>
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント