Flower Field는 인기 게임인 지뢰찾기를 따뜻한 시선으로 새롭게 풀어낸 게임이에요. 게임의 목표는 숫자 힌트를 이용해 정원에 있는 모든 꽃을 찾는 거예요. 숫자 힌트는 어떤 칸에 가로, 세로, 대각선으로 바로 인접한 꽃이 몇 개인지 알려줘요. "Flower Field"는 이탈리아, 독일, 한국, 일본, 대만의 Microsoft Windows 지역 버전에 포함되어 출시됐어요.
완성된 꽃밭 정원에서 빈 칸에 꽃 개수를 채워 넣는 것이 과제예요.
정원은 빈 칸(' ')이거나 꽃('*')인 사각형들로 이루어진 직사각형 판이에요.
빈 칸마다 가로, 세로, 대각선으로 인접한 꽃의 개수를 세요. 빈 칸 주위에 꽃이 하나도 없으면 그대로 비워 둬요. 그렇지 않으면 인접한 꽃의 개수로 바꿔요.
예를 들어, 다음과 같은 5 x 4 판을 받을 수 있어요. 여기서는 화면에 표시하기 위해 빈 칸을 '·' 문자로 나타냈어요.
·*·*·
··*··
··*··
·····
코드는 이것을 다음과 같이 바꿔야 해요.
1*3*1
13*31
·2*2·
·111·
때로는 예외를 발생시켜야 할 때가 있어요. 이럴 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그러면 코드를 더 읽기 쉽게 만들고 디버깅에 큰 도움이 돼요. 오류 원인이 특정 유형일 것이라고 아는 상황이라면 내장 오류 유형 중 하나를 발생시켜도 되지만, 이때도 의미 있는 메시지는 함께 넣어야 해요.
이 연습 문제에서는 board() 함수가 잘못된 형식의 입력을 받았을 때 ValueError를 "던지기" 위해 raise 문을 사용해야 해요. 테스트는 exception을 raise하면서 그와 함께 메시지를 포함해야만 통과해요.
메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 작성해요:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.
중첩된 `for`문, 경계 검사를 단순하게 만드는 min/max의 영리한 활용, 함수형 파이프라인, 그리고 2차원 행렬 사용법을 살펴봐요.