毎週、モハマド S. アンワルはウィークリー チャレンジを送信します。これは、私たち全員が 2 つの週次タスクの解決策を考え出す機会です。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。
挑戦、私の解決策
整数の配列 @ints が与えられます。ここでは、1 つの要素を除いてすべての要素が複数回出現します。
一度だけ出現する 1 つの要素を見つけるスクリプトを作成します。
今週の課題は両方とも、整数の頻度に関係します。 Python には、もののリストを頻度の辞書に自動的に変換する Counter 関数 (コレクション モジュールから) があります。 Perl ソリューションの場合は、これを手動で行います。
freq dict を設定したら、リスト内包表記を使用して 1 回のみ出現するすべての整数を検索します。これは変数 Once_only に保存されます。リストに値が 1 つある場合は、それを返します。それ以外の場合は、適切なエラー メッセージが表示されます。
def unique_number(ints: list) -> int: freq = Counter(ints) only_once = [i for i in freq if freq[i] == 1] if len(only_once) == 1: return only_once[0] if len(only_once) == 0: raise ValueError('No values only appear once') raise ValueError('More than one value appears once')
$ ./ch-1.py 3 3 1 1 $ ./ch-1.py 3 2 4 2 4 3 $ ./ch-1.py 1 1 $ ./ch-1.py 4 3 1 1 1 4 3
正の整数の配列 @ints が与えられます。
すべてのインデックス i が 0
最後のタスクと同様に、freq という名前の dict (Perl のハッシュ) を作成して、各整数の頻度を保存します。次に、リストを調べて、各値が条件を満たしていることを確認します。
def digit_count_value(ints: list) -> bool: freq = Counter(ints) for idx, value in enumerate(ints): if freq[idx] != value: return False return True
$ ./ch-2.py 1 2 1 0 true $ ./ch-2.py 0 3 0 false
以上がウィークリーチャレンジの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。