99fb7f0e82
- Created a new sitemap.xml file for better SEO. - Added a compressed version of the sitemap as sitemap.xml.gz. - Introduced extra.css for custom styles, including Persian font support (IRANSansX). - Defined font-face rules for regular and bold styles of IRANSansX. - Implemented various text styles and layout adjustments for better readability. - Enhanced Mermaid diagram styles to support Persian text rendering.
64 lines
3.7 KiB
Markdown
64 lines
3.7 KiB
Markdown
# تمرین ۸: یادداشتِ مریخی
|
|
|
|
## صورت سؤال
|
|
در یک آزمایشگاه فضایی، فقط یک فایل به نام `mars.txt` داریم و چند دستور بهترتیب اجرا میشود. شما باید **با یک اسکریپت Bash** این دستورها را از ورودی بخوانید و در پایان، محتوای نهایی فایل را چاپ کنید.
|
|
|
|
هدف تمرین این است که از چیزهایی که تا اینجا در فصل ۳ یاد گرفتهاید استفاده کنید: `read`، متغیرها، `if` و حلقهها (بهخصوص `while` یا `for`).
|
|
|
|
رفتار دستورها:
|
|
|
|
- `touch` اگر فایل وجود نداشته باشد، آن را ایجاد میکند و **خالی** است؛ اگر فایل از قبل وجود داشته باشد، **هیچ تغییری در محتوا ایجاد نمیشود**.
|
|
- `> s` محتوای فایل را **کامل بازنویسی** میکند و بعد از آن فایل دقیقاً فقط شامل همان یک خط `s` است. (اگر فایل وجود نداشته باشد، این دستور آن را ایجاد میکند.)
|
|
- `>> s` یک خط `s` را **به انتهای فایل اضافه** میکند. (اگر فایل وجود نداشته باشد، این دستور آن را ایجاد میکند و همان یک خط را داخلش میگذارد.)
|
|
|
|
هدف این است که بعد از اجرای همهٔ دستورها، محتوای نهایی `mars.txt` را چاپ کنید.
|
|
|
|
اگر در پایان فایل وجود نداشت یا خالی بود، باید دقیقاً `EMPTY` چاپ شود.
|
|
|
|
نکته: لازم نیست واقعاً روی سیستم فایل بسازید؛ میتوانید فقط «محتوا» را در یک متغیر نگه دارید و شبیهسازی کنید.
|
|
|
|
## ورودی
|
|
در خط اول عدد `q` تعداد دستورها آمده است.
|
|
در `q` خط بعدی، هر خط یکی از حالتهای زیر است:
|
|
|
|
- `touch`
|
|
- `> s` (یک متن `s` که همان یک خط است)
|
|
- `>> s` (یک متن `s` که همان یک خط است)
|
|
|
|
`s` میتواند شامل فاصله باشد و تا انتهای خط ادامه دارد. (اما با فاصله شروع نمیشود.)
|
|
|
|
## خروجی
|
|
محتوای نهایی `mars.txt` را دقیقاً همانطور که هست چاپ کنید (هر خط جداگانه).
|
|
اگر فایل وجود نداشت یا خالی بود، فقط `EMPTY` چاپ کنید.
|
|
|
|
## محدودیتها
|
|
- `1 ≤ q ≤ 200`
|
|
- طول `s` حداقل 1 و حداکثر 100 کاراکتر است.
|
|
|
|
## راهنمایی (چند تریک کوچک)
|
|
- بهجای پارسکردن دستی، میتوانید هر خط را با `read -r OP TEXT` بخوانید؛ در این حالت `OP` یکی از `touch` یا `>` یا `>>` میشود و `TEXT` بقیهٔ خط خواهد بود (حتی اگر وسطش فاصله داشته باشد).
|
|
- با یک متغیر مثل `CONTENT` محتوای فایل را نگه دارید:
|
|
- برای `> s` کافی است `CONTENT` را برابر `s` کنید.
|
|
- برای `>> s` اگر `CONTENT` خالی نبود، اول یک خط جدید اضافه کنید و بعد `s` را بچسبانید.
|
|
- یک متغیر دیگر مثل `EXISTS` هم داشته باشید تا تشخیص دهید فایل اصلاً ساخته شده یا نه.
|
|
- حلقهٔ `while` با شمارنده (`i=$((i+1))`) یا یک حلقهٔ `for` میتواند `q` دستور را پردازش کند.
|
|
|
|
## نمونه
|
|
**ورودی نمونه**
|
|
```text
|
|
6
|
|
touch
|
|
> Hello Mars
|
|
>> Day 2
|
|
touch
|
|
>> Day 3
|
|
touch
|
|
```
|
|
|
|
**خروجی نمونه**
|
|
```text
|
|
Hello Mars
|
|
Day 2
|
|
Day 3
|
|
```
|