Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでデコードされたXOR順列を見つけるプログラム


配列encがあるとします。最初のn(odd)個の正の整数の順列である配列permがあります。このリストは、enc [i] =perm [i] XOR perm [i+1]のように長さn-1の配列encにエンコードされます。元の配列パーマを見つける必要があります。

したがって、入力がenc =[2,5,6,3]の場合、出力は[7、5、0、6、5]になります。ここでは、[7 XOR 5 XOR 0 XOR 6 XOR 5] =[ 2、5、6、3]

これを解決するには、次の手順に従います-

  • n:=encのサイズ
  • result:=サイズ(n + 1)の配列で、0で埋めます
  • x:=0
  • 1からn+1の範囲のiについては、
    • x:=x XOR i
  • result [0]:=x
  • 1からnの範囲のiの場合、2ずつ増やします。
    • result [0]:=result [0] XOR enc [i]
  • 1からnの範囲のiについては、
    • result [i]:=result [i-1] XOR enc [i-1]
  • 結果を返す

理解を深めるために、次の実装を見てみましょう-

def solve(enc):
   n = len(enc)
   result = [0] * (n+1)
   x = 0
   for i in range(1, n+2):
      x ^= i
   result[0] = x
   for i in range(1, n+1, 2):
      result[0] ^= enc[i]
   for i in range(1, n+1):
      result[i] = result[i-1] ^ enc[i-1]
   return result

enc = [2,5,6,3]
print(solve(enc))

入力

[2,5,6,3]

出力

[7, 5, 0, 6, 5]

  1. Pythonでポリゴンの領域を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir

  2. Pythonでポリゴンの周囲を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)