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

リストされているすべての配信操作がPythonで有効かどうかを確認するプログラム


注文と呼ばれる文字列のリストがあるとします。注文リストの各要素は、「P」または「D」で始まります。 「P」はそれが拾われたことを示し、「D」は「配達」を意味します。そして、これらの文字の後に注文ID番号が続きます。たとえば、「P6」は集荷注文6を示します。これらのルールに基づいて、注文リストが有効かどうかを確認する必要があります-

  • 集荷前に注文を配達することはできません
  • すべての集荷を配達する必要があります
  • すでに集荷され、配達された注文は、再度集荷または配達することはできません

したがって、入力がorders =["P1"、 "D1"、 "P2"、 "P3"、 "D3"、 "D2"]の場合、最初の注文は集荷後に配信されるため、出力はTrueになります。 、および2番目と3番目の注文の場合、それらは一度にピックアップされ、最終的に配信されます。

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

  • a:=新しい地図
  • 注文に重複するエントリがある場合は、
    • Falseを返す
  • 注文のiごとに、
    • 「P」で始まる場合は、
      • a[注文番号の受け取り]=1
    • それ以外の場合、「D」で始まると、
      • 注文番号がにない場合は、
        • Falseを返す
      • それ以外の場合、
        • a[配達注文番号]が1つ減少します
  • aのすべての値のリストに存在するすべての要素の合計が0と同じ場合はtrueを返し、それ以外の場合はfalseを返します

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

def solve(orders):
   a = {}
   if len(set(orders)) != len(orders):
      return False
   for i in orders:
      if i[0] == "P":
         a[i[1:]] = 1
      elif i[0] == "D":
         if i[1:] not in a:
            return False
         else:
            a[i[1:]] -= 1
   return sum(a.values()) == 0

orders = ["P1", "D1", "P2", "P3", "D3", "D2"]
print(solve(orders))

入力

["P1", "D1", "P2", "P3", "D3", "D2"]

出力

True

  1. ポイントをチェックするプログラムがPythonで凸包を形成しているかどうか

    ポリゴンの外側の点が時計回りにあるとします。これらの点が凸包を形成しているかどうかを確認する必要があります。 この図から、3つの連続するポイントごとに内角が180°以下であることが明らかです。したがって、すべての角度が180°以下の場合、ポリゴンは凸包になります。 したがって、入力がpoints =[(3,4)、(4,7)、(7,8)、(11,6)、(12,3)、(10,1)、(5,2 )]の場合、出力はTrueになります。 これを解決するには、次の手順に従います- n:=ポイントのサイズ 0からポイントのサイズまでの範囲のiについては、 1の場合はpoints[i-2]、

  2. ツリー内のすべての値がPythonで同じかどうかをチェックするプログラム

    二分木があるとすると、ツリー内のすべてのノードが同じ値であるかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります これを解決するには、次の手順に従います- 関数solve()を定義します。これはルートになり、val ルートがnullの場合、 Trueを返す valが定義されていない場合、 val:=ルートの値 ルートの値がvalと同じで、solve(ルートの左側、val)およびsolve(ルートの右側、val)もtrueの場合、trueを返します 理解を深めるために、次の実装を見