مجموعه [**فناوا** *(Fanava)*](https://fanava.net) که به تازگی **جشن ۲۲ سالگی مجموعه** خود را جشن گرفته است، تصمیم دارد تا **یک سیستم مدیریت کیف پول هوشمند** و **سرمایهگذاری** طراحی و پیادهسازی کند که **الهامگرفته از سرویسهای مالی شرکت فناوا است!** این سیستم از طریق **دستورات متنی** *(Command Line Interface)* کار میکند و **قابلیتهای پیشرفتهای** مانند *مدیریت چندین کیف پول، سرمایهگذاری در صندوقها، محاسبه سود و زیان، تراکنشهای زمانبندی شده و تشخیص فعالیتهای مشکوک* را دارا میباشد.
سیستم شامل **سه بخش اصلی** است. **بخش اول** مدیریت کاربران و کیف پولها است که هر کاربر میتواند حداکثر ۵ کیف پول داشته باشد و هر کیف پول دارای نوع مشخصی است. **بخش دوم** مدیریت صندوقهای سرمایهگذاری است که هر صندوق دارای نرخ سود سالانه، حداقل مبلغ سرمایهگذاری و ظرفیت محدود میباشد. **بخش سوم** سیستم امنیتی است که **تراکنشهای مشکوک** را بر اساس **الگوهای از پیش تعریفشده** شناسایی میکند.

# **انواع کیف پول**
**سه نوع کیف پول** در سیستم وجود دارد. **کیف پول اصلی** *(MAIN)* برای **تراکنشهای روزمره** استفاده میشود و **محدودیت** برداشت روزانه **ندارد. کیف پول پسانداز** *(SAVINGS)* برای **نگهداری بلندمدت پول** طراحی شده و **برداشت از آن محدود به سه بار در ماه است. کیف پول سرمایهگذاری** *(INVEST)* **مخصوص سرمایهگذاری در صندوقها است** و برداشت مستقیم از آن **امکانپذیر نیست** و ابتدا باید سرمایهگذاری فروخته شود.
# **شرح دستورات**
<details class="red">
<summary>**ثبتنام کاربر جدید**</summary>
**دستور** `REGISTER` برای **ایجاد یک کاربر جدید** در سیستم استفاده میشود. **هر کاربر با یک شناسه یکتا، نام و شماره ملی ثبت میشود.** شماره ملی باید **دقیقاً ۱۰ رقم باشد و تکراری نباشد.** پس از ثبتنام، یک کیف پول اصلی با **موجودی صفر** به صورت **خودکار** برای کاربر ایجاد میشود.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
REGISTER --user <user_id> --name <full_name> --national-id <national_id>
```
- **در صورت موفقیت پیام** `User [user_id] registered successfully with main wallet` چاپ میشود. اگر شناسه کاربر تکراری باشد **پیام** `ERROR: user [user_id] already exists` نمایش داده میشود. **اگر شماره ملی تکراری باشد پیام** `ERROR: national ID already registered` چاپ میشود. اگر **شماره ملی ۱۰ رقم نباشد پیام** `ERROR: invalid national ID format` نمایش داده میشود.
</details>
<details class="blue">
<summary>**ایجاد کیف پول جدید**</summary>
**دستور** `CREATE_WALLET` برای ایجاد کیف پول اضافی برای کاربر استفاده میشود. هر کاربر میتواند حداکثر ۵ کیف پول داشته باشد. شناسه کیف پول باید در کل سیستم یکتا باشد.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
CREATE_WALLET --user <user_id> --wallet <wallet_id> --type <MAIN|SAVINGS|INVEST>
```
- **در صورت موفقیت پیام** `Wallet [wallet_id] of type [type] created for user [user_id]` چاپ میشود. **اگر کاربر وجود نداشته باشد پیام** `ERROR: user [user_id] not found` نمایش داده میشود. **اگر کاربر قبلاً ۵ کیف پول داشته باشد پیام** `ERROR: maximum wallet limit reached for user [user_id]` چاپ میشود. **اگر شناسه کیف پول تکراری باشد پیام** `ERROR: wallet [wallet_id] already exists` نمایش داده میشود.
</details>
<details class="pink">
<summary>**واریز وجه**</summary>
**دستور** `DEPOSIT` برای **واریز مبلغ به یک کیف پول** استفاده میشود. **واریز به همه انواع کیف پول مجاز است. زمان تراکنش برای محاسبات بعدی ثبت میشود.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
DEPOSIT --wallet <wallet_id> --amount <amount> --time <yyyy-mm-dd-hh:mm>
```
- **در صورت موفقیت پیام** `Deposited [amount] to wallet [wallet_id]. New balance: [balance]` چاپ میشود. **مبلغ باید عدد صحیح مثبت باشد، در غیر این صورت پیام** `ERROR: amount must be positive` نمایش داده میشود.
</details>
<details class="orange">
<summary>**برداشت وجه**</summary>
**دستور** `WITHDRAW` برای **برداشت مبلغ از کیف پول** استفاده میشود. **برداشت از کیف پول سرمایهگذاری مستقیماً امکانپذیر نیست. برداشت از کیف پول پسانداز محدود به ۳ بار در هر ماه میلادی است.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
WITHDRAW --wallet <wallet_id> --amount <amount> --time <yyyy-mm-dd-hh:mm>
```
- **در صورت موفقیت پیام** `Withdrew [amount] from wallet [wallet_id]. New balance: [balance]` چاپ میشود. **اگر کیف پول از نوع سرمایهگذاری باشد پیام** `ERROR: cannot withdraw directly from investment wallet` نمایش داده میشود. **اگر تعداد برداشت از کیف پول پسانداز در ماه جاری به ۳ رسیده باشد پیام** `ERROR: monthly withdrawal limit reached for savings wallet` چاپ میشود.
</details>
<details class="blue">
<summary>**انتقال بین کیف پولها**</summary>
**دستور** `TRANSFER` برای **انتقال وجه بین دو کیف پول** استفاده میشود. انتقال بین کیف پولهای یک کاربر **رایگان** است اما انتقال به کیف پول کاربر دیگر **مشمول کارمزد ۰.۵ درصد میشود** که از مبلغ انتقال کسر میگردد. **انتقال مستقیم از کیف پول سرمایهگذاری امکانپذیر نیست.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
TRANSFER --from <source_wallet> --to <dest_wallet> --amount <amount> --time <yyyy-mm-dd-hh:mm>
```
- در صورت موفقیت برای **انتقال داخلی** *(بین کیف پولهای یک کاربر)* **پیام**`Transferred [amount] from [source] to [dest]` چاپ میشود. **برای انتقال خارجی پیام** `Transferred [amount] from [source] to [dest]. Fee: [fee]` چاپ میشود که *fee* **برابر با ۰.۵ درصد مبلغ** *(گرد شده به پایین)* است.
</details>
<details class="purple">
<summary>**ایجاد صندوق سرمایهگذاری**</summary>
- **دستور** `CREATE_FUND` برای **ایجاد یک صندوق سرمایهگذاری جدید توسط ادمین سیستم استفاده میشود.** هر صندوق دارای نرخ سود سالانه، **حداقل مبلغ سرمایهگذاری و ظرفیت کل میباشد.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
CREATE_FUND --fund <fund_id> --name <fund_name> --rate <annual_rate> --min <min_invest> --capacity <max_capacity>
```
- **نرخ سود به صورت درصد سالانه وارد میشود** *(مثلاً ۱۸ به معنای ۱۸ درصد).* **در صورت موفقیت پیام** `Fund [fund_id] created: [name] with [rate]% annual rate` چاپ میشود.
</details>
<details class="violet">
<summary>**سرمایهگذاری در صندوق**</summary>
**دستور** `INVEST` برای **سرمایهگذاری از کیف پول سرمایهگذاری در یک صندوق** استفاده میشود. **مبلغ از کیف پول سرمایهگذاری کسر شده** و در صندوق قرار میگیرد. زمان سرمایهگذاری برای محاسبه سود ذخیره میشود.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
INVEST --wallet <wallet_id> --fund <fund_id> --amount <amount> --time <yyyy-mm-dd-hh:mm>
```
- **در صورت موفقیت پیام** `Invested [amount] from wallet [wallet_id] in fund [fund_id]` چاپ میشود. اگر **کیف پول از نوع سرمایهگذاری نباشد** پیام `ERROR: can only invest from investment wallet` نمایش داده میشود. **اگر مبلغ کمتر از حداقل صندوق باشد پیام** `ERROR: minimum investment for this fund is [min]` چاپ میشود. **اگر ظرفیت صندوق پر شده باشد پیام** `ERROR: fund capacity exceeded` نمایش داده میشود.
</details>
<details class="teal">
<summary>**فروش سرمایهگذاری**</summary>
**دستور** `SELL` برای **فروش سرمایهگذاری و بازگرداندن اصل و سود به کیف پول سرمایهگذاری** استفاده میشود. **سود بر اساس نرخ سالانه صندوق و تعداد روزهای سپریشده محاسبه میشود.**
- **فرمت محاسبه سود به این صورت است:** سود = (مبلغ × نرخ سالانه × تعداد روز) ÷ (۱۰۰ × ۳۶۵)
- **نتیجه به پایین گرد میشود.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
SELL --wallet <wallet_id> --fund <fund_id> --time <yyyy-mm-dd-hh:mm>
```
- **در صورت موفقیت پیام** `Sold investment in fund [fund_id]. Principal: [amount], Profit: [profit], Total: [total]` چاپ میشود. **اگر سرمایهگذاریای در این صندوق وجود نداشته باشد پیام** `ERROR: no investment found in fund [fund_id] for wallet [wallet_id]` نمایش داده میشود.
</details>
<details class="yellow">
<summary>**مشاهده پورتفوی**</summary>
**دستور** `PORTFOLIO` برای **مشاهده وضعیت سرمایهگذاریهای یک کیف پول در زمان مشخص** استفاده میشود. **سود محاسبهشده بر اساس زمان فعلی نمایش داده میشود.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
PORTFOLIO --wallet <wallet_id> --time <yyyy-mm-dd-hh:mm>
```
- **خروجی به صورت زیر است:**
```bash terminal terminal
Portfolio for wallet [wallet_id]:
| Fund | Principal | Current Value | Profit |
| [fund_id] | [amount] | [current] | [profit] |
Total Value: [sum]
```
- **اگر سرمایهگذاریای وجود نداشته باشد:**
```bash terminal terminal
Portfolio for wallet [wallet_id]:
No investments found.
```
</details>
<details class="green">
<summary>**مشاهده موجودی**</summary>
**دستور** `BALANCE` برای **مشاهده موجودی یک کیف پول** استفاده میشود.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
BALANCE --wallet <wallet_id>
```
**- خروجی به صورت** `Wallet [wallet_id] ([type]): [balance]` است.
</details>
<details class="red">
<summary>**تاریخچه تراکنشها**</summary>
**دستور** `HISTORY` **برای مشاهده تاریخچه تراکنشهای یک کیف پول** استفاده میشود. تراکنشها **به ترتیب زمان مرتب میشوند.**
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
HISTORY --wallet <wallet_id>
```
- **خروجی به صورت زیر است:**
```bash terminal terminal
Transaction History for Wallet [wallet_id]:
| [time] | [type] | [amount] | [balance_after] | [description] |
```
- **انواع تراکنش شامل** `DEPOSIT`، `WITHDRAW`، `TRANSFER_IN`، `TRANSFER_OUT`، `INVEST` و `SELL` میباشد. **فیلد** `description` **شامل جزئیات اضافی مانند شناسه صندوق یا کیف پول مقصد است.**
</details>
<details class="blue">
<summary>**تشخیص فعالیت مشکوک**</summary>
**دستور** `SUSPICIOUS` **برای شناسایی فعالیتهای مشکوک یک کاربر در یک روز خاص استفاده میشود.** سیستم **چهار نوع فعالیت مشکوک** را شناسایی میکند.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
SUSPICIOUS --user <user_id> --date <yyyy-mm-dd>
```
- **فعالیتهای مشکوک عبارتند از:** اول، تراکنشهای **با مبلغ بیش از ۵۰ میلیون که با کد** `LARGE_AMOUNT` مشخص میشوند. دوم، **بیش از ۵ تراکنش در یک ساعت از تمام کیف پولهای کاربر که با کد** `RAPID_TRANSACTIONS` مشخص میشود. سوم، **انتقال به بیش از ۳ کاربر متفاوت در یک روز که با کد** `MULTIPLE_RECIPIENTS` مشخص میشود. چهارم، **سرمایهگذاری و فروش سریع** *(فاصله کمتر از ۷ روز)* که با **کد** `QUICK_FLIP` مشخص میشود.
- **خروجی به صورت زیر است:**
```bash terminal terminal
Suspicious Activity for User [user_id] on [date]:
| [time] | [wallet_id] | [type] | [amount] | [reason] |
```
- اگر **فعالیت مشکوکی** وجود نداشته باشد **پیام** `No suspicious activity for user [user_id] on [date].` چاپ میشود.
</details>
<details class="yellow">
<summary>**گزارش روزانه**</summary>
**دستور** `DAILY_REPORT` برای **مشاهده خلاصه تراکنشهای کل سیستم در یک روز** استفاده میشود.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
DAILY_REPORT --date <yyyy-mm-dd>
```
- **خروجی به صورت زیر است:**
```bash terminal terminal
Daily Report for [date]:
Total Deposits: [amount] ([count] transactions)
Total Withdrawals: [amount] ([count] transactions)
Total Transfers: [amount] ([count] transactions)
Total Investments: [amount] ([count] transactions)
Total Fees Collected: [amount]
Active Users: [count]
```
- **اگر تراکنشی وجود نداشته باشد پیام** `Daily Report for [date]:\nNo transactions found.` چاپ میشود.
</details>
<details class="grey">
<summary>**رتبهبندی صندوقها**</summary>
**دستور** `TOP_FUNDS` برای **مشاهده صندوقهای برتر** بر اساس مجموع سرمایهگذاری استفاده میشود.
- **فرمت دستور به صورت زیر است:**
```bash terminal terminal
TOP_FUNDS --limit <n>
```
- **خروجی به صورت زیر است:**
```bash terminal terminal
Top [n] Funds by Investment:
| Rank | Fund | Total Investment | Investors |
| 1 | [fund_id] | [total] | [count] |
```
</details>
# **نکات مهم**
**تمام مبالغ به صورت عدد صحیح و بر حسب ریال هستند.** در محاسبات سود و کارمزد، **نتیجه به پایین گرد میشود.** ترتیب پارامترها در دستورات **آزاد** است و **میتوانند به هر ترتیبی وارد شوند.** فرمت زمان به صورت `yyyy-mm-dd-hh:mm` است (مثال: `2025-06-15-14:30`). **حداکثر تعداد کاربران ۱۰۰۰، حداکثر تعداد کیف پولها ۵۰۰۰، حداکثر تعداد صندوقها ۱۰۰ و حداکثر تعداد تراکنشها ۵۰,۰۰۰ است. رعایت اصول شیگرایی و کد تمیز در پیادهسازی مهم است.**
# **ورودی**
سطر اول ورودی شامل **یک عدد صحیح و مثبت** $n$ است که **تعداد دستورهای ورودی** را نشان میدهد.
$$1 \le n \le 100$$
در $n$ **سطر بعدی ورودی،** هر سطر شامل **یکی از دستورهای ذکر شده است.**
# **خروجی**
خروجیهای خواسته شده برای هر دستور را به ترتیب چاپ کنید.
# **مثال ورودی و خروجی**
### **ورودی نمونه ۱**
```bash terminal terminal
12
REGISTER --user U001 --name AliRezaei --national-id 1234567890
CREATE_WALLET --user U001 --wallet W001 --type SAVINGS
CREATE_WALLET --user U001 --wallet W002 --type INVEST
DEPOSIT --wallet U001_main --amount 10000000 --time 2025-06-01-10:00
TRANSFER --from U001_main --to W002 --amount 5000000 --time 2025-06-01-10:30
CREATE_FUND --fund F001 --name GrowthFund --rate 18 --min 1000000 --capacity 1000000000
INVEST --wallet W002 --fund F001 --amount 4000000 --time 2025-06-01-11:00
PORTFOLIO --wallet W002 --time 2025-06-15-11:00
SELL --wallet W002 --fund F001 --time 2025-06-15-12:00
BALANCE --wallet W002
HISTORY --wallet W002
DAILY_REPORT --date 2025-06-01
```
### **خروجی نمونه ۱**
```bash terminal terminal
User U001 registered successfully with main wallet
Wallet W001 of type SAVINGS created for user U001
Wallet W002 of type INVEST created for user U001
Deposited 10000000 to wallet U001_main. New balance: 10000000
Transferred 5000000 from U001_main to W002
Fund F001 created: GrowthFund with 18% annual rate
Invested 4000000 from wallet W002 in fund F001
Portfolio for wallet W002:
| Fund | Principal | Current Value | Profit |
| F001 | 4000000 | 4027616 | 27616 |
Total Value: 4027616
Sold investment in fund F001. Principal: 4000000, Profit: 27616, Total: 4027616
Wallet W002 (INVEST): 5027616
Transaction History for Wallet W002:
| 2025-06-01-10:30 | TRANSFER_IN | 5000000 | 5000000 | from:U001_main |
| 2025-06-01-11:00 | INVEST | 4000000 | 1000000 | fund:F001 |
| 2025-06-15-12:00 | SELL | 4027616 | 5027616 | fund:F001 |
Daily Report for 2025-06-01:
Total Deposits: 10000000 (1 transactions)
Total Withdrawals: 0 (0 transactions)
Total Transfers: 5000000 (1 transactions)
Total Investments: 4000000 (1 transactions)
Total Fees Collected: 0
Active Users: 1
```
### **ورودی نمونه ۲**
```bash terminal terminal
10
REGISTER --user U001 --name AliAhmadi --national-id 1111111111
REGISTER --user U002 --name SaraMohammadi --national-id 2222222222
CREATE_WALLET --user U002 --wallet W002 --type MAIN
DEPOSIT --wallet U001_main --amount 100000000 --time 2025-07-01-09:00
TRANSFER --from U001_main --to W002 --amount 60000000 --time 2025-07-01-09:15
TRANSFER --from U001_main --to W002 --amount 20000000 --time 2025-07-01-09:20
BALANCE --wallet U001_main
BALANCE --wallet W002
SUSPICIOUS --user U001 --date 2025-07-01
DAILY_REPORT --date 2025-07-01
```
### **خروجی نمونه ۲**
```bash terminal terminal
User U001 registered successfully with main wallet
User U002 registered successfully with main wallet
Wallet W002 of type MAIN created for user U002
Deposited 100000000 to wallet U001_main. New balance: 100000000
Transferred 60000000 from U001_main to W002. Fee: 300000
Transferred 20000000 from U001_main to W002. Fee: 100000
Wallet U001_main (MAIN): 19600000
Wallet W002 (MAIN): 79600000
Suspicious Activity for User U001 on 2025-07-01:
| 09:15 | U001_main | TRANSFER_OUT | 60000000 | LARGE_AMOUNT |
Daily Report for 2025-07-01:
Total Deposits: 100000000 (1 transactions)
Total Withdrawals: 0 (0 transactions)
Total Transfers: 80000000 (2 transactions)
Total Investments: 0 (0 transactions)
Total Fees Collected: 400000
Active Users: 2
```
- **در مثال دوم،** انتقال وجه بین دو کاربر مختلف انجام شده است، **بنابراین کارمزد ۰.۵ درصد** از مبلغ انتقال کسر شده است. **همچنین تراکنش ۶۰ میلیون تومانی** به عنوان **فعالیت مشکوک** با دلیل `LARGE_AMOUNT` شناسایی شده است!
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.