매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
문자열 $str과 단어 목록 @words가 제공됩니다.
주어진 문자열을 주어진 목록에서 공백으로 구분된 하나 이상의 단어 시퀀스로 분할할 수 있는지 여부에 따라 true 또는 false를 반환하는 스크립트를 작성하세요.
TWC를 하면 월요일 퇴근길에 어떻게 해결할지 고민하는 편이에요. winwin이라는 문자열과 win과 wine이라는 단어, 그리고 winewin이라는 문자열의 예를 생각했습니다. 어떤 단어를 먼저 일치시켜야 할지 결정적인 방법은 없는 것 같습니다.
며칠 후 나는 실제로 문제를 잘못 풀고 있다는 천재적인 생각을 갖게 되었습니다. 훨씬 더 쉬운 해결책은 정규 표현식을 사용하여 하나 이상의 단어가 문자열 s와 일치하는지 확인하는 것이었습니다.
그리고 제가 쓴 글입니다. Python에서는 re.escape를 사용하고 Perl에서는 quotemeta를 사용하여 단어 목록의 특수 메타 문자를 이스케이프 처리합니다.
def word_break(s: str, words: list) -> bool: pattern = '^(' + '|'.join(map(re.escape, words)) + ')+$' return True if re.search(pattern, s) else False
$ ./ch-1.py weeklychallenge challenge weekly true $ ./ch-1.py perlrakuperl raku perl true $ ./ch-1.py sonsanddaughters sons sand daughters false
정수 배열 @int가 제공됩니다.
마지막 요소에 도달하기 위한 최소 점프 횟수를 찾는 스크립트를 작성하세요. $ints[$i]는 인덱스 $i에서 앞으로 점프하는 최대 길이를 나타냅니다. 마지막 요소에 접근할 수 없는 경우 -1을 반환합니다.
이러한 작업을 완료할 때 저는 일상 업무에서는 사용하지 않는 TDD도 사용합니다. 테스트가 실패하면 일반적으로 명백한 오류가 있거나 좀 더 까다로운 문제가 있는 것입니다. 이 작업은 나중 작업 중 하나였습니다. 수많은 디버깅이 이어졌습니다.
Python과 Perl 모두 뛰어난 디버깅 도구가 내장되어 있다는 것을 알고 있지만 여전히 많은 양의 print 문을 사용하는 것을 좋아합니다.
이 작업을 위해 jump_game이라는 재귀 함수를 사용합니다. 두 개의 매개변수가 필요합니다. ints는 정수 목록(전체 목록으로 시작)이고 이동은 1부터 시작합니다.
첫 번째 정수가 0이면 더 이상 이동할 수 없으므로 None(Python에서는 undef)을 반환합니다. 그런 다음 변수 i를 사용하여 int[0] 값에서 1까지 반복합니다. 이 값이 목록 길이보다 1보다 크거나 같으면 솔루션이 있고 이동을 반환합니다. 다른 값의 경우 첫 번째 i번째 값을 제거하고 이동을 하나씩 증가시키는 함수를 다시 호출합니다.
모든 반복에 대한 최소 이동 수를 반환하도록 min_moves 변수가 있습니다.
def word_break(s: str, words: list) -> bool: pattern = '^(' + '|'.join(map(re.escape, words)) + ')+$' return True if re.search(pattern, s) else False
제 버그가 무엇이었나요? i >= len(ints)-1 대신 i >= len(ints)를 확인하고 있었습니다.
$ ./ch-1.py weeklychallenge challenge weekly true $ ./ch-1.py perlrakuperl raku perl true $ ./ch-1.py sonsanddaughters sons sand daughters false
위 내용은 브레이크 게임의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!