지난 몇 주 동안 MIA 상태가 되어 죄송합니다. 이사도 하고 직장도 옮기면서 그동안 챌린지에 참여할 기회가 없었어요.
매주 Mohammad S. Anwar는 우리 모두가 두 가지 주간 작업에 대한 해결책을 생각해 낼 수 있는 주간 챌린지를 보냅니다. 내 솔루션은 먼저 Python으로 작성된 다음 Perl로 변환됩니다. 이는 우리 모두가 코딩을 연습할 수 있는 좋은 방법입니다.
도전, 나의 솔루션
아래와 같이 체스판 사각형의 좌표를 나타내는 문자열인 좌표가 제공됩니다.
사각형이 밝으면 true를 반환하고, 사각형이 어두우면 false를 반환하는 스크립트를 작성하세요.
이것은 비교적 간단합니다. 가장 먼저 하는 일은 제공된 위치가 유효한지 확인하는 것입니다(첫 번째 문자는 a-h이고 두 번째 문자는 1에서 8 사이입니다).
그런 다음 첫 번째 문자가 a, c, e 또는 g이고 숫자가 짝수인지 또는 첫 번째 문자가 b, d, f 또는 h이고 숫자가 홀수인지 확인하고 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
def check_color(coords: str) -> bool: if not re.search('^[a-h][1-8]$', coords): raise ValueError('Not a valid chess coordinate!') if coords[0] in ('a', 'c', 'e', 'g') and int(coords[1]) % 2 == 0: return True if coords[0] in ('b', 'd', 'f', 'h') and int(coords[1]) % 2 == 1: return True return False
$ ./ch-1.py d3 true $ ./ch-1.py g5 false $ ./ch-1.py e6 true
체스의 기사는 현재 위치에서 두 행 또는 열과 한 열 또는 행 떨어진 정사각형으로 이동할 수 있습니다. 따라서 아래 다이어그램에서 S로 시작하면 E로 표시된 사각형 중 하나로 이동할 수 있습니다.
시작 위치와 끝 위치를 가져와 필요한 최소 이동 횟수를 계산하는 스크립트를 작성하세요.
이것이 더 자세히 설명되어 있습니다. 다음 변수로 시작합니다.
def knights_move(start_coord: str, end_coord: str) -> int: for coord in (start_coord, end_coord): if not re.search('^[a-h][1-8]$', coord): raise ValueError( f'The position {coord} is not a valid chess coordinate!') deltas = ([2, 1], [2, -1], [-2, 1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]) coords = [convert_coord_to_list(start_coord)] target = convert_coord_to_list(end_coord) moves = 1 seen = []
그런 다음 현재 좌표 목록과 델타 목록의 이중 루프를 만듭니다. 기사의 새 좌표를 나타내는 변수 new_pos를 설정합니다. 이것이 보드 밖의 위치나 우리가 이미 가본 좌표로 연결된다면 건너뜁니다. 목표물에 떨어지면 이동값을 반환합니다.
루프 후에는 반복을 통해 수집된 좌표로 좌표 목록을 재설정하고 이동 값을 1씩 증가시킵니다. 이는 목표 좌표에 도달할 때까지 계속됩니다.
while True: new_coords = [] for coord in coords: for delta in deltas: new_pos = (coord[0] + delta[0], coord[1] + delta[1]) if not 0 < new_pos[0] < 9 or not 0 < new_pos[1] < 9 or new_pos in seen: continue if new_pos == target: return moves new_coords.append(new_pos) seen.append(new_pos) coords = new_coords moves += 1
$ ./ch-2.py g2 a8 4 $ ./ch-2.py g2 h2 3
위 내용은 체스판에 관한 것의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!