Trilhas
/
jq
jq
/
Exercícios
/
Campo de flores
Campo de flores

Campo de flores

Difícil

Introdução

Flower Field é uma releitura compassiva do popular jogo Minesweeper. O objetivo do jogo é encontrar todas as flores do jardim usando dicas numéricas que indicam quantas flores estão diretamente adjacentes (na horizontal, na vertical, na diagonal) a uma casa. "Flower Field" foi lançado em versões regionais do Microsoft Windows na Itália, Alemanha, Coreia do Sul, Japão e Taiwan.

Instruções

Sua tarefa é adicionar a contagem de flores às casas vazias de um jardim do Campo de Flores já concluído. O jardim em si é um tabuleiro retangular composto de casas que estão vazias (' ') ou têm uma flor ('*').

Para cada casa vazia, conte quantas flores estão adjacentes a ela (na horizontal, na vertical, na diagonal). Se a casa vazia não tiver flores adjacentes, deixe-a vazia. Caso contrário, substitua-a pela contagem de flores adjacentes.

Por exemplo, você pode receber um tabuleiro 5 x 4 como este (os espaços vazios são representados aqui com o caractere '·' para exibição na tela):

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

E seu código deve transformá-lo nisto:

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

Opções extras de linha de comando do jq

Você vai notar opções extras para o jq nos testes.

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

O que elas fazem?

  • -s

    Esse é o modo "slurp". Em vez de tratar a entrada como um fluxo de objetos JSON, toda a entrada é juntada em um array.

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

    Você talvez já tenha visto o -r, para imprimir strings "brutas" (sem aspas). Esse é o oposto. Cada linha da entrada é tratada como uma string.

    Dois exemplos:

    $ 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"
    

Quando você junta essas duas opções, você não recebe um array de strings: você recebe toda a entrada como uma única string, incluindo as quebras de linha ao final de cada linha.

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

Lidar com isso faz parte do desafio deste exercício.

Editar via GitHub O link abre em uma nova janela ou aba
jq Exercism

Tudo pronto para começar Campo de flores?

Crie sua conta no Exercism para aprender e dominar jq com 12 conceitos75 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Campo de flores!

Vamos explorar laços for aninhados, o uso inteligente de min/max para simplificar a verificação de limites, pipelines funcionais e o uso de matrizes bidimensionais.