매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환됩니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
정수 배열 @int가 제공됩니다.
행운의 정수를 찾으면 -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
@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 기능을 사용합니다. 각 항목은 인덱스 위치와 정수의 튜플로 정렬됩니다. 이렇게 하면 결과 목록의 첫 번째 부분이 두 번째 목록의 위치에 따라 정렬되고 나머지 값은 숫자별로 정렬됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!