브레이크 게임

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-20 04:39:01852검색

The Break Game

주간 챌린지 295

매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환되었습니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.

도전, 나의 솔루션

작업 1: 단어 나누기

문자열 $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

작업 2: 점프 게임

정수 배열 @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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.