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

Pythonで指定されたボールを占めるボックスの位置を見つけます


2つの配列AとBがあるとします。Aのサイズは行の数であり、A[i]はi番目の行のボックスの数です。また、Bはボールの配列であり、B[i]はボール上の数字を示します。ボールi(値B [i])は、開始からの位置がB[i]であるボックスに配置されます。各B[i]に対応するボックスの行と列を見つける必要があります。

したがって、入力がA =[3、4、5、6]、B =[1、3、5、2]の場合、出力は[(1、1)、(1、3)、( 2、2)、(1、2)] B [0] =1の場合、ボックスの位置は1行目、1列目B [1] =3になり、ボックス位置は1行目、3列目、Bになります。 [2] =5の場合、ボックスの位置は2行、2列、B [3] =2になり、ボックスの位置は1行、2列になります

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

  • len_a:=Aのサイズ

  • len_b:=Bのサイズ

  • 範囲1からlen_aのiの場合、実行します

    • A [i]:=A [i] + A [i-1]

  • 0からlen_bの範囲のiの場合、実行

    • row:=Aをソートして維持するためにB[i]を挿入できるインデックス

    • 行>=1の場合、

      • box_num:=B [i] --A [row-1]

    • それ以外の場合

      • box_num:=B [i]

    • ペアを表示する(row + 1、box_num)

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

import bisect
def get_position(A, B):
   len_a = len(A)
   len_b = len(B)
   for i in range(1, len_a):
      A[i] += A[i - 1]
   for i in range(len_b):
      row = bisect.bisect_left(A, B[i])
      if row >= 1:
         box_num = B[i] - A[row - 1]
      else:
         box_num = B[i]
      print ((row + 1, box_num))
A = [3, 4, 5, 6]
B = [1, 3, 5, 2]
get_position(A, B)

入力

[3, 4, 5, 6], [1, 3, 5, 2]

出力

(1, 1)
(1, 3)
(2, 2)
(1, 2)

  1. Pythonで指定されたポイントを介して、現在の位置からポイントに到達できることを確認するプログラム

    2D空間で、座標(px、py)を持つ点pにポインターが配置されているとします。ここで、ポインタは座標(qx、qy)を持つ別の点qに移動する必要があります。ポインタは自由に動くことができず、間にいくつかの点がある場合はqに移動できます。さまざまな座標点を含む点「パス」の配列が与えられます。ポインターは、ポインターの現在の位置から(x + 1、y)または(x、y + 1)または(x-1、y)または(x、y-1)にある場合、その点に移動できます。 。配列の「パス」内の指定されたポイントは、順番に処理する必要があります。つまり、移動できない場合でも、配列内の各ポイントを合計パスに加算する必要があります

  2. Pythonのグリッドボックスのどこにボールが着地するかを見つけるプログラム

    m x nグリッドボックスが与えられたとします。各セルには、右上から左下、または左上から右下のいずれかに配置されたボードがあります。上のセルからボールがボックスに入れられ、そのボールがボックスの下部に到達するかどうかを確認する必要があります。グリッドはマトリックスとして与えられます。セルに1のマークが付いている場合、対角線上のボードは左上から右下に広がります。 -1とマークされている場合は、右上隅から左下隅にまたがっています。 n個のボールが箱に入れられた場合、底に到達するボールの数を調べる必要があります。 3x3グリッドボックスの例。 したがって、入力がmat =のような場合