タスクは、数字のシーケンスを見つけることです。これは、ある数字で転置するか、反転してから転置することができ、別の等しいまたはより大きな数字のセット内にネストされます。入力はテキストファイルからです。数値がそのまままたは転置されている場合は、見つかった場所の開始インデックスを出力し、反転または反転して転置されている場合は、インデックスに続いて反転を出力します。
例 - 検索する数値が 67654 の場合、45432 (2 だけ転置) または 32345 (反転) または 54567 (反転して 2 だけ転置) として見つかります。
Input
67654
14676545
43234545679
905
#
最初の行は検索対象 (67654) で、残りの行は検索対象です。
Output
3
7
10 inverted
14 inverted
私の考えは、探す数字とその数字が反転した場合の各数字の違いである数字のリストを作成することでした。たとえば、67654 はリスト [-1, 1, 1, 1] を作成します。次に、文字列の各桁をループして検索しますが、スライディング ウィンドウを使用して表示されるかどうかを確認します。逆立ちも同じようにしました。
diffs = [int(name[x]) - int(name[x + 1]) for x in range(0, len(name) - 1)] #name stores the fist line of input
invertedName = ''.join([str(9-int(x)) for x in name])
currDiffs = []
for i in range(len(name)-1):
currDiffs.append(int(piece[i]) - int(piece[i+1])) #piece is the string being searched
for i in range(len(name)- 1, len(piece) - 1):
currDiffs.pop(0)
currDiffs.append(int(piece[i]) - int(piece[i+1]))
Compare(diffs,currDiffs) # check if theyre the same
このように答えていると、ほとんどすべての答えが間違っていることに気づきます。私のアプローチを修正する方法、または何か問題があるかどうかについての提案をいただければ幸いです。