Percursos
/
jq
jq
/
Exercícios
/
Campo de Flores
Campo de Flores

Campo de Flores

Difícil

Introdução

O Flower Field é uma reinvenção compassiva do popular jogo Campo Minado. O objetivo do jogo é encontrar todas as flores do jardim com a ajuda de pistas numéricas que indicam quantas flores estão diretamente adjacentes (na horizontal, na vertical e na diagonal) a uma casa. O "Flower Field" veio incluído em versões regionais do Microsoft Windows na Itália, na Alemanha, na Coreia do Sul, no Japão e em Taiwan.

Instruções

A tua tarefa é acrescentar a contagem de flores às casas vazias de um jardim Campo de Flores já completo. O jardim é um tabuleiro retangular composto por casas que estão vazias (' ') ou contêm uma flor ('*').

Para cada casa vazia, conta o número de flores adjacentes (na horizontal, na vertical e na diagonal). Se a casa vazia não tiver flores adjacentes, deixa-a vazia. Caso contrário, substitui-a pelo número de flores adjacentes.

Por exemplo, podes receber um tabuleiro 5 x 4 como este (aqui, os espaços vazios são representados com o caráter '·' para serem visíveis no ecrã):

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

E o teu código deve transformá-lo nisto:

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

Opções adicionais da linha de comandos do jq

Vais reparar em opções extra para o jq nos testes.

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

O que são?

  • -s

    Isto é o modo "slurp". Em vez de tratar a entrada como um fluxo de objetos JSON, toda a entrada é absorvida para um array.

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

    Talvez já tenhas visto -r, para produzir strings "raw" (sem aspas). É o contrário. Cada linha da entrada é considerada 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 juntas estas duas opções, não obténs um array de strings: obténs toda a entrada como uma única string, incluindo as mudanças de linha no fim de cada linha.

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

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

Editar via GitHub A ligação abre numa nova janela ou separador
jq Exercism

Estás pronto para começar Campo de Flores?

Inscreve-te no Exercism para aprenderes e dominares jq com 12 conceitos75 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em Campo de Flores!

Exploramos ciclos for aninhados, o uso engenhoso de min/max para simplificar a verificação de limites, pipelines funcionais e a utilização de matrizes bidimensionais.