망치질 목록
주간 챌린지 301
매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환됩니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
작업 1: 가장 큰 숫자
일
양의 정수 목록(@ints)이 제공됩니다.
주어진 목록의 모든 요소를 가장 큰 숫자로 배열하고 반환하는 스크립트를 작성하세요.
내 솔루션
과도하게 생각하는 것일 수도 있지만 말처럼 쉽지는 않습니다.
한 가지 옵션은 모든 순열을 계산하고 어느 숫자가 가장 큰지 확인하는 것입니다. 그러나 더 많은 정수를 추가하면 리소스가 많이 소모됩니다. 13개의 정수가 있다면 60억 개가 넘는 순열이 있습니다. 그래서 나는 이것을 가능한 해결책에서 배제합니다.
그래서 해야 할 일은 정수를 정렬하고 결합하여 결과를 출력하는 것입니다. Python은 문자열과 정수를 다르게 처리하므로 정렬된 목록을 문자열로 변환하고 결합한 후 다시 정수로 변환해야 합니다.
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
정렬의 경우 조금 복잡합니다. 두 번째 제공된 예에서는 3, 30, 34가 모두 주어진 정수임을 알 수 있습니다. 이를 위해 항목(최고에서 최저) 34, 3, 30을 주문하면 가장 큰 숫자가 얻어지는 것으로 알고 있습니다.
number_sort 함수의 경우 정수를 문자열 s1 및 s2로 변환합니다. 그러면 s1과 s2의 연결인 정수 c1이 있고, c2는 s2와 s1의 연결입니다.
c1이 c2보다 작으면 -1을 반환합니다. 더 크면 1을 반환하고, 같으면 0을 반환합니다. 정렬 함수는 이 정보를 사용하여 필요에 따라 목록을 정렬합니다.
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 < c2: return -1 if c1 > c2: return 1 return 0
Perl 코드가 훨씬 간단합니다 :)
sub number_sort() { return "$a$b" <=> "$b$a"; }
예
$ ./ch-1.py 20 3 320 $ ./ch-1.py 3 30 34 5 9 9534330
작업 2: 해밍 거리
일
정수 배열 @int가 제공됩니다.
주어진 정수 배열의 모든 정수 쌍 사이의 해밍 거리의 합을 반환하는 스크립트를 작성하세요.
두 정수 사이의 해밍 거리는 이진 표현이 서로 다른 위치의 수입니다.
내 솔루션
이전 작업에서 Python이 정수와 문자열을 다른 유형으로 처리하는 방법을 언급했습니다. Perl의 장점 중 하나는 모든 의도와 목적을 위해 변수 입력에 대해 걱정할 필요가 없다는 것입니다. 내부적으로 다르게 저장되더라도 Perl은 무엇을 해야 할지 알고 있습니다.
Perl 5.10과 Perl 5.16(내가 대부분의 Perl 개발을 수행한 버전)에는 두 가지 주목할만한 예외가 있습니다. 하나는 문자열의 경우 "10", 정수의 경우 10을 출력하는 JSON 모듈입니다.
다른 하나는 비트 연산입니다. Perlop 페이지에서 105 | 150(2개의 정수)은 255이고 "105" | "150"(두 개의 문자열)은 155입니다.
그래서 Perlop 페이지를 다시 읽었을 때 Perl의 이후 버전에서 이 문제가 해결된 것을 보고 깜짝 놀랐습니다. 이제 Perl 5.22에서 실험적이며 Perl 5.28에서 사용할 수 있는 비트 단위 기능이 있습니다. 이렇게 하면 비트 연산자가 항상 값을 정수로 처리하고 문자열 기반 비트에 새로운 연산자가 있게 됩니다.
어쨌든 당면한 작업으로 돌아가세요. 이를 위해 두 정수의 모든 조합을 계산합니다. 각 조합에 대해 두 값의 XOR(배타적 논리합)을 수행하고 이를 이진수로 변환한 후 이진수 표현에서 1의 개수를 셉니다.
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
예
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 < c2: return -1 if c1 > c2: return 1 return 0
위 내용은 망치질 목록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Linux 터미널에서 Python 사용 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Pythonasyncio에 대해 ...

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

Python 3.6에 피클 파일 로딩 3.6 환경 오류 : ModulenotFounderRor : nomodulename ...

SCAPY 크롤러를 사용할 때 파이프 라인 파일을 작성할 수없는 이유에 대한 논의 지속적인 데이터 저장을 위해 SCAPY 크롤러를 사용할 때 파이프 라인 파일이 발생할 수 있습니다 ...
