매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
이진 문자열 @str과 두 개의 정수 $x 및 $y의 배열이 제공됩니다.
하위 집합에 최대 $x 0과 $y 1이 있도록 @str의 가장 큰 하위 집합의 크기를 반환하는 스크립트를 작성하세요.
m의 모든 요소가 n의 요소이기도 하면 집합 m은 n의 부분 집합입니다.
변수 x와 y를 호출하는 것보다 더 의미가 있기 때문에 max_zeros 및 max_ones라는 이름을 지정했습니다. 명령줄의 경우 마지막 두 값을 max_zeros 및 max_ones로 사용하고 나머지 값은 s 배열에 넣습니다.
이 작업을 위해 s의 항목 수부터 시작하여 1까지의 가변 길이를 사용합니다. 그런 다음 각 길이에 대해 itertool의 조합 기능을 사용하여 길이 항목의 모든 고유한 조합을 계산하고 이를 하위 집합 변수에 저장합니다.
각 하위 집합에 대해 모든 문자열을 함께 결합하고 0과 1의 수를 세고 각각 max_zeros 및 max_ones보다 작거나 같은지 확인합니다. 그렇다면 길이 변수를 반환합니다. 아무 것도 발견되지 않으면 0을 반환합니다.
def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int: for length in range(len(s), 0, -1): for subset in combinations(s, length): bits = ''.join(subset) if bits.count('0') <= max_zeros and bits.count('1') <= max_ones: return length return 0
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
정수 배열 @int가 제공됩니다.
단계별 합계가 1보다 작지 않도록 최소 양의 시작 값을 찾는 스크립트를 작성하세요.
정말 현명하게 말하면 양의 정수 목록에 대한 "최소 양의 시작 값"은 0.000...01입니다. 그러나 두 번째 예는 이 숫자가 실제로 정수임을 암시하는 것 같습니다.
이 작업에서는 int 목록의 첫 번째 값으로 설정된 min_value와 0인 value라는 두 개의 변수로 시작합니다. 그런 다음 ints 목록을 반복하고 해당 숫자를 값 변수에 추가합니다. 값이 min_value보다 작으면 min_value 변수를 업데이트합니다.
min_value가 0보다 크거나 같으면 1을 반환합니다. 그렇지 않으면 1 - min_value를 반환합니다.
def step_by_step(ints: list) -> int: min_value = ints[0] value = 0 for i in ints: value += i if min_value > value: min_value = value if min_value >= 0: return 1 return 1 - min_value
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2 $ ./ch-2.py -3 2 -3 4 2 5 $ ./ch-2.py 1 2 1 $ ./ch-2.py 1 -2 -3 5
위 내용은 0단계, 1단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!