Mohammad S. Anwar は毎週、毎週 2 つのタスクに対する解決策を全員が考え出すチャンスであるウィークリー チャレンジを送信します。私のソリューションは最初に Python で書かれ、次に Perl に変換されます。これは、私たち全員がコーディングを練習するのに最適な方法です。
挑戦、私の解決策
整数の配列 @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 つの整数リスト、@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 サイトの他の関連記事を参照してください。