ホームページ >バックエンド開発 >Python チュートリアル >ステップ 0、ステップ 1
Mohammad S. Anwar は毎週、毎週 2 つのタスクに対する解決策を全員が考え出すチャンスであるウィークリー チャレンジを送信します。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。
挑戦、私の解決策
バイナリ文字列の配列 @str と 2 つの整数 $x と $y が与えられます。
サブセット内に最大 $x 0 と $y 1 が存在するように、@str の最大サブセットのサイズを返すスクリプトを作成します。
m のすべての要素が n の要素でもある場合、集合 m は n の部分集合です。
変数 x と y を呼び出すのではなく、より意味のある max_zeros と max_ones という名前を付けました。コマンドラインでは、最後の 2 つの値を max_zeros と max_ones として取り、残りの値を s 配列に取り込みます。
このタスクでは、 s の項目数が 1 になるまでの可変長を使用しています。次に、各長さについて、itertool の結合関数を使用して長さ項目の一意の組み合わせをすべて計算し、これをサブセット変数に格納します。
各サブセットについて、すべての文字列を結合し、0 と 1 の数を数え、それらがそれぞれ max_zeros と max_ones 以下であるかどうかを確認します。そうであれば、長さ変数を返します。何も見つからない場合は、ゼロを返します。
def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int: for length in range(len(s), 0, -1): for subset in combinations(s, length): bits = ''.join(subset) if bits.count('0') <= max_zeros and bits.count('1') <= max_ones: return length return 0
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
整数の配列 @ints が与えられます。
ステップごとの合計が 1 を下回らないように、正の最小開始値を見つけるスクリプトを作成します。
非常に衒学的になりますが、正の整数のリストの「正の最小開始値」は 0.000...01 です。ただし、2 番目の例は、この数値が実際には整数であることを暗示しているようです。
このタスクでは、2 つの変数、ints リストの最初の値として設定される min_value とゼロの value から始めます。次に、int リストを反復処理し、その数値を value 変数に追加します。 value が min_value より小さい場合、min_value 変数を更新します。
min_value がゼロ以上の場合は 1 を返します。そうでない場合は 1 - min_value を返します。
def step_by_step(ints: list) -> int: min_value = ints[0] value = 0 for i in ints: value += i if min_value > value: min_value = value if min_value >= 0: return 1 return 1 - min_value
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2 $ ./ch-2.py -3 2 -3 4 2 5 $ ./ch-2.py 1 2 1 $ ./ch-2.py 1 -2 -3 5
以上がステップ 0、ステップ 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。