ホームページ >バックエンド開発 >Python チュートリアル >入れ子の美しさ
Mohammad S. Anwar は毎週、毎週 2 つのタスクに対する解決策を全員が考え出すチャンスであるウィークリー チャレンジを送信します。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。
挑戦、私の解決策
これが 300 回目のチャレンジとなるので、チーム PWC の全員を代表して毎週行っているすべての仕事に対して、モハマドに個人的に感謝したいと思います。
正の整数 $int が与えられます。
構築できる美しいアレンジメントの数を返すスクリプトを作成します。
すべての i (1
このタスクでは、itertool モジュールの順列関数を使用して、すべての順列を処理します。
あとは、この順列が指定された基準を満たしているかどうかを判断するだけです。そうでない場合は、次の順列に進みます。そうであれば、count 変数に 1 を追加します。
def beautiful_arrangement(n: list) -> str: count = 0 for p in permutations(range(1, n+1)): for i in range(n): if p[i] % (i+1) != 0 and (i+1) % p[i] != 0: break else: count += 1 return count
総当たりを使わずに結果を計算するより効率的な方法があるかもしれません。私のコードは、数値が大きくなると非常に非効率になります。私はこれを調査するのに少しも時間を費やしませんでした。
$ ./ch-1.py 1 1 $ ./ch-1.py 2 2 $ ./ch-1.py 10 700
[0, n - 1] の範囲内の数値の順列を含む長さ n の整数の配列 @int が与えられます。
次のルールに従って、セット set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ... を構築するスクリプトを作成します。
これは比較的簡単です。まず、longest_set という変数を 0 に設定します。次に、各開始位置を反復処理して、this_set リストをセットの最初の項目 (つまり ints[i]) に設定します。 ints[this_set[-1]] が this_set リストに表示されない間、このセットに追加し続けます。これが完了したら、this_set リストの長さをlongest_set 値と比較します。それが大きい場合は、longest_set 値を更新します。
def nested_array(ints: list) -> int: longest_set = 0 for start in range(len(ints)): this_set = [ints[start]] while ints[this_set[-1]] not in this_set: this_set.append(ints[this_set[-1]]) if longest_set < len(this_set): longest_set = len(this_set) return longest_set
$ ./ch-2.py 5 4 0 3 1 6 2 4 $ ./ch-2.py 0 1 2 1 $ ./ch-2.py 1 2 0 4 5 2 5
以上が入れ子の美しさの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。