私がやろうとしていること:
関数を呼び出すときにユーザーが指定
return_length=True
した場合、回文数に到達するためにアルゴリズムが必要とするステップ数に 1 を加えた値を返す必要があります。たとえば、5280 と を入力するとreturn_length=True
、関数は 4 を返す必要があります (これは、シーケンス [5280、6105、11121、23232] のエントリの総数であることに注意してください)。たとえば、入力が 11 の場合、関数は 1 を返す必要があります。これは、既に回文数であるためです。ユーザーが を指定しなかった場合、
return_length
または を指定した場合return_length=False
、関数はアルゴリズムが終了する回文数を返す必要があります。たとえば、入力が 5280 の場合、アルゴリズムは 23232 (文字列ではなく整数) を返す必要があります。同様に、89 を入力すると、整数 8813200023188 が返されます。
196 アルゴリズムの背景:
2 桁以上の任意の正の整数を取り、桁を逆にして、元の数に加算します。これは、反転してから追加するシーケンスの操作です。回文数が得られるまで、得られた合計で手順を繰り返します。この手順により、ほとんどの整数に対して回文数がすばやく生成されます。たとえば、数値 5280 で開始すると、5280、6105、11121、23232 のシーケンスが生成されます。アルゴリズムを 1、2、3、... に適用すると、最終結果は 1、2、3、4、5、6、7 になります。 、8、9、11、11、33、44、55、66、77、88、99、121、... (スローンの A033865)。89 の値は特に大きく、8813200023188 です。 ( http://mathworld.wolfram.com/196-Algorithm.htmlより)
私がこれまでに持っているもの:
def alg196(x, y = false):
if y==False:
while x == x[::-1]:
x==x+x[::-1]
return x
else:
seq = [x]
while x == x[::-1]:
x==x+x[::-1]
seq.append(x)
return seq
エラーが発生します:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "_sage_input_36.py", line 10, in <module>
exec compile(u"print _support_.syseval(python, u'alg196(34)', __SAGE_TMP_DIR__)" + '\n', '', 'single')
File "", line 1, in <module>
File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py", line 487, in syseval
return system.eval(cmd, sage_globals, locals = sage_globals)
File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py", line 56, in eval
eval(z, globals)
File "", line 1, in <module>
File "", line 3, in alg196
TypeError: 'int' object has no attribute '__getitem__'
この問題またはエラーを正確に修正する方法がわかりません。
回答の情報をいくつか取得すると、次の新しいコードがあります。
def alg196(x, y = false):
if y==False:
while str(x) == str(x)[::-1]:
x=str(x)+str(x)[::-1]
return x
else:
seq = [x]
while str(x) == str(x)[::-1]:
x = str(x)+str(x)[::-1]
seq.append(x)
return seq
しかし、まだ回文数の回文数または回文数へのシーケンスを取得していません..