ウィークリーチャレンジ

WBOY
WBOYオリジナル
2024-08-27 06:05:32865ブラウズ

Weekly Challenge

毎週、モハマド S. アンワルはウィークリー チャレンジを送信します。これは、私たち全員が 2 つの週次タスクの解決策を考え出す機会です。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。

挑戦、私の解決策

タスク 1: 固有の番号

タスク

整数の配列 @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

タスク 2: 桁数の値

タスク

正の整数の配列 @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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。