متاسفانه کریم اینترنتش قطع شده و با میوههایش هم نتوانست مهرههای شطرنج را بسازد و تصمیم گرفت بخوابد تا شاید زمان بگذرد. کریم خواب دید که مسئول یک مسابقهی برنامهنویسی شده است.
او از شرکتکنندگان خواسته یک تولیدکننده یا `generator` بنویسند که عدد مطلوبی را حدس بزند؛ این تولیدکننده وضعیت (بزرگتر، کوچکتر یا مساوی بودن) عدد حدسی، نسبت به عدد مطلوب را از پیمایشکننده خود دریافت میکند.
کریم به عنوان مسئول مسابقه باید این تولیدکنندهها را بررسی کند، اما چون توانایی برنامهنویسی در کریم مشاهده نمیشود، از شما کمک میخواهد که تابعی به عنوان پیمایشکننده برای بررسی این تولیدکنندهها بنویسید.
شما نیز باید تابعی بنویسید که بر روی [تولیدکنندهها](https://wiki.python.org/moin/Generators) (`generator`) پیمایش کند و به آنها اطلاعاتی ارسال کند.
## جزئیات
تولیدکنندهها انتظار دارند مقادیر زیر را از پیمایشکننده خود دریافت کنند:
- `G`: عدد حدسی از عدد مطلوب بزرگتر باشد.
- `L`: عدد حدسی از عدد مطلوب کوچکتر باشد.
- `E`: عدد حدسی با عدد مطلوب برابر باشد.
یک نمونه از تولیدکننده مورد نظر:
```python generators.py
import random
def guess_generator(min_value, max_value):
num = random.randint(min_value, max_value + 1)
resp = (yield num)
while resp != 'E': # Equal
if resp == 'G': # Greater
max_value = num - 1
elif resp == 'L': # Less
min_value = num + 1
num = random.randint(min_value, max_value + 1)
resp = (yield num)
```
شما باید تابعی بنویسید که پارامترهای زیر را دریافت کند:
- `guess_generator`: تولیدکنندهای که باید پیمایش شود.
- `min_value`: حداقل مقدار برای حدس
- `max_value`: حداکثر مقدار برای حدس
- `assumed_number`: عدد فرضی برای حدس
و در خروجی یک لیست با شرایط زیر برگرداند:
- لیست شامل تمام اعداد حدس زده شده توسط تولیدکننده به ترتیب پیمایش باشد.
```python source.py
def guess_generator_iterator(guess_generator, min_value, max_value, assumed_number):
pass
```
- بعد از هر حدس عجیب یک عضو `'!'` باشد.
یک حدس عجیب است اگر یکی از شرایط زیر را داشته باشد:
- اگر بعد از دریافت `G` از طرف پیمایشگر عددی بزرگتر یا مساوی حدس قبلی حدس زده شود، این یک حدس عجیب است!
- اگر بعد از دریافت `L` از طرف پیمایشگر عددی کوچکتر یا مساوی حدس قبلی حدس زده شود، این یک حدس عجیب است!
- اگر بعد از دریافت `E` از طرف پیمایشگر حدس زدن عدد ادامه پیدا کند، این یک حدس عجیب است!
- اگر عدد حدسی کمتر از `min_value` یا بیشتر از `max_value` باشد، این یک حدس عجیب است!
- اگر در کل فرایند پیمایش سه مرتبه حدس عجیب اتفاق افتاد، یک عضو `'!!!'` به لیست خروجی اضافه شود و پیمایش متوقف شود.
## نمونه
```python source.py
import generators
from source import guess_generator_iterator
gen = generators.guess_generator_1_correct
min_value, max_value, num = 1, 100, 50
lst = guess_generator_iterator(gen, min_value, max_value, num)
print(lst)
gen = generators.guess_generator_2_lazy
min_value, max_value, num = 1, 10, 7
lst = guess_generator_iterator(gen, min_value, max_value, num)
print(lst)
gen = generators.guess_generator_3_careless
min_value, max_value, num = 1, 30, 15
lst = guess_generator_iterator(gen, min_value, max_value, num)
print(lst)
gen = generators.guess_generator_4_stupid
min_value, max_value, num = 1, 10, 5
lst = guess_generator_iterator(gen, min_value, max_value, num)
print(lst)
```
خروجی نمونه بالا:
```python terminal terminal
[5, 15, 74, 71, 55, 49, 50]
[1, 2, 3, 4, 5, 6, 7]
[22, 2, 8, 9, 20, 18, 11, 15, 16, '!', 14, '!', 14, '!', '!!!']
[4, 3, '!', 2, '!', 1, '!', '!!!']
```
در این مثال تولیدکنندههای اول و دوم میتوانند به درستی عدد خواسته شده را حدس بزنند و هیچ حدس عجیبی هم نداریم؛ بنابراین حدسهای تولیدکننده به ترتیب داخل یک لیست خروجی داده میشود. در دو مثال بعدی هر کدام از تولیدکنندهها سه حدس عجیب دارند که بعد از هر کدام از آن حدسها یک `'!'` به لیست اضافه میشود و در آخر هم یک `'!!!'` به لیست اضافه میشود و حاصل برگردانده میشود.
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/60137/) دریافت کنید.
+ تابع شما نباید مقداری را چاپ کند، بلکه باید مقادیر مورد نظر را بازگرداند.
## نحوه ارسال
شما باید تابع `guess_generator_iterator` موجود در فایل `source.py` را تکمیل و سپس این فایل را ارسال کنید.