دشت گل

دشت گل

دشوار

مقدمه

Flower Field بازآفرینیِ مهربانانه‌ای از بازی محبوب Minesweeper است. هدف بازی این است که با کمک سرنخ‌های عددی، همه‌ی گل‌های باغ را پیدا کنید. این سرنخ‌ها نشان می‌دهند که چند گل به‌طور مستقیم (افقی، عمودی یا قطری) مجاور یک خانه قرار دارد. «Flower Field» در نسخه‌های منطقه‌ای Microsoft Windows در ایتالیا، آلمان، کره‌ی جنوبی، ژاپن و تایوان عرضه شد.

دستورالعمل‌ها

وظیفه‌ی شما این است که در یک باغ کامل‌شده‌ی «میدان گل»، تعداد گل‌ها را به خانه‌های خالی اضافه کنید. خود باغ یک صفحه‌ی مستطیلی است که از خانه‌هایی تشکیل شده که یا خالی‌اند (' ') یا یک گل دارند ('*').

برای هر خانه‌ی خالی، تعداد گل‌های مجاور آن را بشمارید (به‌صورت افقی، عمودی و قطری). اگر خانه‌ی خالی هیچ گل مجاوری ندارد، آن را خالی بگذارید. در غیر این صورت، آن را با تعداد گل‌های مجاور جایگزین کنید.

برای مثال، ممکن است صفحه‌ای ۵ × ۴ به این شکل به دستتان برسد (فضاهای خالی اینجا برای نمایش روی صفحه با نویسه‌ی '·' نشان داده شده‌اند):

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

که کد شما باید آن را به این تبدیل کند:

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 را پیش‌تر دیده باشید که رشته‌های «خام» را بدون علامت نقل‌قول چاپ می‌کند. این گزینه برعکس آن است. هر خط از ورودی به‌صورت یک رشته در نظر گرفته می‌شود.

    دو مثال:

    $ 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` برای ساده کردن بررسی محدوده‌ها، پایپ‌لاین‌های تابعی و استفاده از ماتریس‌های دوبعدی را بررسی می‌کنیم.