꽃밭

꽃밭

어려움

소개

Flower Field는 인기 게임인 지뢰찾기를 따뜻한 시선으로 새롭게 풀어낸 게임이에요. 게임의 목표는 숫자 힌트를 이용해 정원에 있는 모든 꽃을 찾는 거예요. 숫자 힌트는 어떤 칸에 가로, 세로, 대각선으로 바로 인접한 꽃이 몇 개인지 알려줘요. "Flower Field"는 이탈리아, 독일, 한국, 일본, 대만의 Microsoft Windows 지역 버전에 포함되어 출시됐어요.

지침

완성된 꽃밭 정원에서 빈 칸에 꽃 개수를 채워 넣는 것이 과제예요. 정원은 빈 칸(' ')이거나 꽃('*')인 사각형들로 이루어진 직사각형 판이에요.

빈 칸마다 가로, 세로, 대각선으로 인접한 꽃의 개수를 세요. 빈 칸 주위에 꽃이 하나도 없으면 그대로 비워 둬요. 그렇지 않으면 인접한 꽃의 개수로 바꿔요.

예를 들어, 다음과 같은 5 x 4 판을 받을 수 있어요. 여기서는 화면에 표시하기 위해 빈 칸을 '·' 문자로 나타냈어요.

·*·*·
··*··
··*··
·····

코드는 이것을 다음과 같이 바꿔야 해요.

1*3*1
13*31
·2*2·
·111·

추가 jq 명령줄 옵션

테스트를 보면 jq에 옵션이 몇 가지 더 붙어 있는 걸 알 수 있어요.

run jq -s -R -c -f flower-field.jq << 'END_INPUT'

이 옵션들은 뭘까요?

  • -s

    이것은 "slurp" 모드예요. 입력을 JSON 객체의 스트림으로 처리하는 대신, 입력 전체를 하나의 배열로 모아요.

    $ seq 5 | jq -c '.'
    1
    2
    3
    4
    5
    $ seq 5 | jq -s -c '.'
    [1,2,3,4,5]
    
  • -R

    -r은 이미 봤을지도 몰라요. "raw" 문자열(따옴표 없이)을 출력하는 옵션이죠. -R은 그 반대예요. 입력의 각 줄을 하나의 문자열로 취급해요.

    두 가지 예를 볼까요?

    $ seq 5 | jq -R -c .
    "1"
    "2"
    "3"
    "4"
    "5"
    
    $ echo 42 | jq '. * 2'      # input is a JSON number
    84
    $ echo 42 | jq -R '. * 2'   # input is a JSON string
    "4242"
    

이 두 옵션을 함께 쓰면, 문자열의 배열이 나오는 게 아니라, 각 줄 끝의 줄바꿈까지 포함한 입력 전체가 하나의 문자열로 나와요.

$ seq 5 | jq -s -R -c .
"1\n2\n3\n4\n5\n"

이걸 처리하는 것도 이 연습 문제의 도전 과제 중 하나예요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
jq Exercism

꽃밭 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 jq 트랙을 개념 12개연습 문제 75개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

꽃밭 깊이 살펴보기!

중첩된 `for`문, 경계 검사를 단순하게 만드는 min/max의 영리한 활용, 함수형 파이프라인, 그리고 2차원 행렬 사용법을 살펴봐요.