ホームページ  >  記事  >  バックエンド開発  >  幸運な種類

幸運な種類

王林
王林オリジナル
2024-09-03 15:08:151145ブラウズ

The lucky sort

ウィークリーチャレンジ 284

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

挑戦、私の解決策

タスク 1: ラッキー整数

タスク

整数の配列 @ints が与えられます。

ラッキーな整数を見つけるスクリプトを作成します。見つからない場合は -1 を返します。複数ある場合は、最大のものを返します。

ラッキー整数とは、配列内の頻度がその値と等しい整数です。

私の解決策

このタスクは比較的簡単なので、多くの説明は必要ありません。 freq と呼ばれる、各整数の頻度の辞書 (Perl のハッシュ) を作成します。次に、freq のキーを繰り返し処理します (最も高い値が最初)。整数の頻度が値と同じ場合は、その数値を返します。イテレータが使い果たされた場合は、-1 を返します。

def lucky_integer(ints: list) -> str:
    freq = Counter(ints)

    for i in sorted(freq, reverse=True):
        if i == freq[i]:
            return i

    return -1

$ ./ch-1.py 2 2 3 4
2

$ ./ch-1.py 1 2 2 3 3 3
3

$ ./ch-1.py 1 1 1 3
-1

タスク 2: 相対ソート

タスク

2 つの整数リスト、@list1 と @list2 が与えられます。 @list2 の要素は個別のものであり、@list1 にもあります。

@list1 内の項目の相対的な順序が @list2 内の順序と同じになるように、@list1 内の要素を並べ替えるスクリプトを作成します。 @list2 に欠落している要素は、昇順で @list1 の最後に配置する必要があります。

私の解決策

Python にはリストのインデックス関数がありますが、項目がリストにない場合は ValueError 例外が発生します。したがって、見つかった場合は lst 内の val の位置を返し、見つからない場合はリストの長さを返す find_index という関数を作成しました。

def find_index(lst: list, val: int):
    return lst.index(val) if val in lst else len(lst)

Perl ソリューションにも同じ機能があり、List::MoreUtil の first_index を使用して位置を見つけます。

sub find_index( $lst, $val ) {
    my $idx = first_index { $_ == $val } @$lst;
    return $idx == -1 ? scalar(@$lst) : $idx;
}

sorted 関数を使用して最初のリストを並べ替えます。各項目は、インデックス位置と整数のタプルによってソートされます。これにより、結果のリストの最初の部分が 2 番目のリスト内の位置に従ってソートされ、残りの値が数値的にソートされます。

def relative_sort(list1: list, list2: list) -> list:
    return sorted(list1, key=lambda i: (find_index(list2, i), i))

Perl ソリューションは同じロジックを使用しますが、完全に異なる構文を使用します。

sub main ($lists) {
    my $list1 = $lists->[0];
    my $list2 = $lists->[1];

    my @solution = sort {
        find_index( $list2, $a ) <=> find_index( $list2, $b )
          or $a <=> $b
    } @$list1;
    say '(', join( ', ', @solution ), ')';
}

コマンドラインからの入力の場合、整数のリストのリストである JSON 文字列を取得します。

$ ./ch-2.py "[[2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5],[2, 1, 4, 3, 5, 6]]"
(2, 2, 1, 4, 3, 3, 5, 6, 7, 8, 9)

$ ./ch-2.py "[[3, 3, 4, 6, 2, 4, 2, 1, 3],[1, 3, 2]]"
(1, 3, 3, 3, 2, 2, 4, 4, 6)

$ ./ch-2.py "[[3, 0, 5, 0, 2, 1, 4, 1, 1],[1, 0, 3, 2]]"
(1, 1, 1, 0, 0, 3, 2, 4, 5)

以上が幸運な種類の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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