Tracks
/
jq
jq
/
Übungen
/
Blumenfeld
Blumenfeld

Blumenfeld

Schwer

Einführung

Flower Field ist eine einfühlsame Neuinterpretation des beliebten Spiels Minesweeper. Ziel des Spiels ist es, alle Blumen im Garten zu finden. Dabei helfen dir numerische Hinweise, die angeben, wie viele Blumen direkt an ein Feld angrenzen (waagerecht, senkrecht oder diagonal). „Flower Field“ erschien in regionalen Versionen von Microsoft Windows in Italien, Deutschland, Südkorea, Japan und Taiwan.

Anleitung

Deine Aufgabe ist es, in einem fertigen Blumenfeld-Garten die Anzahl der Blumen in die leeren Quadrate einzutragen. Der Garten selbst ist ein rechteckiges Spielfeld, das aus Quadraten besteht, die entweder leer (' ') oder eine Blume ('*') sind.

Zähle für jedes leere Quadrat die Anzahl der Blumen, die daran angrenzen (horizontal, vertikal, diagonal). Wenn das leere Quadrat keine angrenzenden Blumen hat, lass es leer. Andernfalls ersetzt du es durch die Anzahl der angrenzenden Blumen.

Zum Beispiel kannst du ein 5 x 4 großes Spielfeld wie dieses erhalten (die leeren Felder werden hier mit dem Zeichen „·“ dargestellt, damit man sie am Bildschirm sieht):

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

Dein Code soll daraus Folgendes machen:

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

Zusätzliche jq-Kommandozeilenoptionen

In den Tests fallen dir zusätzliche Optionen für jq auf.

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

Was bedeuten sie?

  • -s

    Das ist der „Slurp“-Modus. Statt die Eingabe als Strom von JSON-Objekten zu behandeln, wird die gesamte Eingabe in ein Array eingelesen.

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

    Vielleicht kennst du -r schon, um „rohe“ Strings auszugeben (ohne Anführungszeichen). Dies ist das Gegenteil. Jede Eingabezeile wird als String aufgefasst.

    Zwei Beispiele:

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

Wenn du diese beiden Optionen kombinierst, bekommst du kein Array von Strings: Du bekommst die gesamte Eingabe als einen einzigen String, einschließlich der Zeilenumbrüche am Ende jeder Zeile.

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

Der Umgang damit ist Teil der Herausforderung dieser Übung.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
jq Exercism

Bereit, mit Blumenfeld zu starten?

Melde dich bei Exercism an, um jq mit 12 Konzepte75 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in Blumenfeld ein!

Wir schauen uns verschachtelte for-Schleifen an, den geschickten Einsatz von min/max zur Vereinfachung der Bereichsprüfung, funktionale Pipelines und die Verwendung zweidimensionaler Matrizen.