dir.ilam.ac.ir  · web view2016. 1. 25. · then, using a key word that does not have any repeated...

21
دا ام خ ه ن ب ور پ ا ق رادی – ا م ان ون ج ش ن ی: دا ن مت ل ی ا اری ق ه ی اول: کدگد ورر پConsider the following encryption scheme to encode messages. Create a matrix with the letters of the alphabet as follows: 0 1 2 3 4 0 A B C D E 1 F G H I J 2 K L M N O 3 P Q/Z R S T 4 U V W X Y Then to encode any letter, create a string consisting of the row number followed by the column number. For example, the letter "G" becomes "11" and the letter "T" becomes "34". To encrypt a message, first convert each letter to its corresponding two-digit string. For example: GATES HILLMAN CENTER 1100340433 12132121220023 020423340432 Then, using a key word that does not have any repeated letters, create a grid of the digits using the numerical sequence of your converted message such that the number of columns is the same as the length of the key word. For example, if the keyword is CORTINA, we would have:

Upload: others

Post on 01-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

به نام خدا

پروژه ی اول: کدگذاری فایل متنی: دانشجویان مرادی – آقاپور

Consider the following encryption scheme to encode messages. Create a matrix with the letters of the alphabet as follows:

0 1 2 3 4

0 A B C D E

1 F G H I J

2 K L M N O

3 P Q/Z R S T

4 U V W X Y

Then to encode any letter, create a string consisting of the row number followed by the column number. For example, the letter "G" becomes "11" and the letter "T" becomes "34".

To encrypt a message, first convert each letter to its corresponding two-digit string. For example:

GATES HILLMAN CENTER

1100340433 12132121220023 020423340432

Then, using a key word that does not have any repeated letters, create a grid of the digits using the numerical sequence of your converted message such that the number of columns is the same as the length of the key word. For example, if the keyword is CORTINA, we would have:

C O R T I N A

1 1 0 0 3 4 0

4 3 3 1 2 1 3

2 1 2 1 2 2 0

0 2 3 0 2 0 4

2 3 3 4 0 4 3

2

Next, rearrange the grid so that the letters of the key word are in alphabetical order, shifting the corresponding columns of digits along with the letters. In our example, we would get

A C I N O R T

0 1 3 4 1 0 0

3 4 2 1 3 3 1

0 2 2 2 1 2 1

4 0 2 0 2 3 0

3 2 0 4 3 3 4

2

Finally, the message would be written as a sequence of digits, column by column (ignoring the letters at the top of each column):

03043 142022 32220 41204 13123 03233 01104

This is the final encoded message that is transmitted. In order to decode the message, the decrypter would have to work in reverse, as long as he or she knows the secret key word. Without this, cracking this code is much harder (but certainly not impossible).

پروژه ی دوم: ارتفاع آب در بشکه ها دانشجویان: محمدی-توسلی

فرض کنید سه بشکه پر از آب داریم که به صورت زنجیری از طریق لوله به همدیگر اتصال پیدا کرده اند. ارتفاع هر بشکه 1 متر می باشد. روی بشکه ها با فاصله های 10cm مشخص شده است( روی هر بشکه فاصله از 0cm تا 100 cm مشخص شده است). مجموعه S=[0cm, 10cm, 20cm, 30cm, 40cm, 50cm, 60cm, 70cm, 80cm, 90cm, 100cm] را در نظر بگیرید.

لوله های که بشکه ها را به هم اتصال می دهند در یکی از نقاط مجموعه S ایجاد شده اند. بشکه های کناری فقط یک لوله اتصال و بشکه ای که در وسط قرار می گیرد دو اتصال با بشکه های کناری دارد.

در هر کدام از بشکه یک سوراخ ایجاد می کنیم. سوراخ ایجاد شده در یکی از نقاط مجموعه بالا می باشد. سوراخ ها به ترتیب برای بشکه 1، بشکه 2 و بشکه 3 ایجاد می شوند. زمانی که خارج شدن اب ازیک سوراخ متوقف شد، آنگاه در بشکه بعدی یک سوراخ ایچاد می کنیم. با سوراخ شدن بشکه ها آب داخل بشکه سرازیر می شود و در صورت امکان آب بین بشکه ها از طریق لوله ها جابه جا می شود. شما باید تعیین کنید بعد از سوراخ کردن بشکه ها چه میزان آب در هر بشکه باقی می ماند.

برای مثال شکل زیر اتصال بشکه ها را نشان می دهد، بشکه شماره 1 و شماره 2 در ارتفاع 70 سانتی متری از طریق لوله به یکدیگر اتصال دارند، بشکه شماره 2و 3 در ارتفاع 40 سانتی متری به یکدیگر اتصال دارند. در بشکه 1، بشکه 2 و بشکه 3 به ترتیب در ارتفاع 80cm، 60cm و 20cm سوراخ ایجاد شده است

Barrel 1

Barrel 2

Barrel 3

 

 

 

 

0cm

100cm

50cm

ورودی

داده های ورودی از طریق چند خط مطابق شکل زیر وارد می شوند. خط اول شامل دو عدد می باشد که عدد اول ارتفاع اتصال بشکه 1و 2 را مشخص می کند و عدد دوم ارتفاع اتصال بین بشکه 2و 3 را تعیین می کند. بین هر دو عدد تنها یک کاراکتر فاصله قرار دارد. در خط دوم سه عدد قرار دارد که عدد اول ارتفاع سوراخ ایجاد شده در بشکه اول، عدد دوم ارتفاع سوراخ ایجاد شده در بشکه دوم و عدد سوم ارتفاع سوراخ ایجاد شده در بشکه سوم را تعیین می کند. تمامی اعداد در ورودی باید یکی از اعداد مجموعه S باشد(ورودی زیر برای شکل بالا صدق می کند).

70 40

80 60 20

خروجی

در خروجی یک خط شامل سه عدد که با کاراکتر فاصله از یکدیگر جدا شده اند، وجود دارد. عدد اول نشان دهنده ارتفاع آب موجود در بشکه 1، عدد دوم نشان دهنده ارتفاع اب موجود در بشکه 2و عدد سوم نشان دهنده ارتفاع آب موجود در بشکه 3 می باشد.

70 40 20

از جدول زیر برای تست برنامه خود استفاده کنید:

Tset case 1

Output

Input

80 80 80

65 65

80 95 100

45 30 25

70 30

45 95 25

0 20 20

50 0

0 100 20

15 10 10

15 5

90 40 10

30 20 20

70 0

30 20 25

0 0 0

100 100

0 0 0

پروژه ی سوم: اعداد زشت دانشجویان:سلیمانخانی-زکی زاده

همه اعداد شیک و مجلسی نیستند. میشه برخی از اعداد رو بهشون گفت نازیبا! حدس بزنید چه اتفاقی افتاده! اعداد زشت واقعا توی ریاضیات وجود دارند. توی ریاضیات به اعدادی که تنها فاکتور اول (prime factor) اونها اعداد ۲ یا ۳ و یا ۵ باشه میگن اعداد زشت! اینکه چرا بهشون میگن زشت و چه گناهی دارن رو میتونید بعداً پیگیری کنید. طبق تعریف ما اعداد زیر زشت هستند:

۱، ۲، ۳، ۴، ۵، ۶، ۸، ۹، ۱۰ و ۱۲ اولین ۱۰ عدد زشت هستند.

توی این سوال شما یه برنامه مینویسید که n امین عدد زشت رو در زمان مناسب برای ما مشخص میکنه. برنامه ی شما باید نمونه ی مورد سوال را در کمتر از 150 میلی ثانیه حل کند.

ورودی مساله:

یک فایل شامل k تا عدد طبیعی است. در هر خط این فایل یه عدد قرار داره. تعداد خطوط فایل نهایتاً ۱۰۰ خط میباشد. (یعنی نهایتاً ۱۰۰ تا عدد ورودی به عنوان تست داریم). اعداد طبیعی که برای تست استفاده میشن بین ۱ تا ۲۰۰۰۰ هستند.

خروجی مساله:

محتوای فایل

خروجی

3

7

11

Ugly number 3 is 3

Ugly number 7 is 8

Ugly number 11 is 15

در اینجا 15 کوچکترین عدد زشت بعد از 11 است.

پروژه ی چهارم: اعداد دوجهته - دانشجویان:علیخانی-چراغی

می گوییم که یک عدد طبیعی مثبت نسبت به پایه ی b دوجهته است اگر نمایش عدد در مبنای b طوری باشد که رقمها را از هر جهت (چپ یا راست) بخوانیم به عدد یکسانی برسیم. مثلاً عدد 12321 در مبناهای 4 و بیشتر یک عدد دو جهته است. روش دو جهته کردن یک عدد بدین صورت است که اگر عدد دوجهته نباشد، عدد و معکوس آنرا با هم جمع می کنیم. اینکار را آنقدر تکرار می کنیم تا وقتی که به یک عدد دو جهته برسیم. به عنوان مثال عدد 87 در مبنای 10 به صورت زیر به یک عدد دوجهته تبدیل می گردد:

87+78= 165 165+561=726 726+627=1353 1353+3531=4884

این که بتوان با این روش همه ی اعداد را دوجهته کرد ثابت نشده است. اما تمام اعداد دهدهی زیر 10000 آزمایش شده اند و به جز عدد 196 تمام آنها دوجهته شدند. پردازش عدد 196 تا دو میلیون رقم انجام شده است ولی هنوز دو جهته نشده است.

روش آزمایش برنامه بدین صورت است که پنج عدد در مبناهای بین 2 تا 10 به شما داده می شود. ابتدا خود عدد و سپس مبنای آن داده می گردد. برنامه ی شما دوجهته کردن عدد را تا 10 بار تکرار می کند. اگر در این 10 بار عدد دوجهته شد. نتیجه را چاپ کنید. در غیر این صورت کلمه ی none را چاپ کنید. به مثالهای زیر توجه کنید:

ورودی

خروجی

87,10

4884

1211,3

112211

3112,4

233332

196,10

none

پروژه ی پنجم: اعداد فیباینری میرزایی و گنجی

اعداد باینری رو حتماً میشناسید. به عنوان مثال عدد ۱۰۱۰ در سیستم باینری معادل عدد ۸+۲ = ۱۰ در سیستم دهدهی است. در تعریف اعداد فیباینری به جای ضرب در ۱، ۲، ۴، ۸ و … از اعداد سری فیبوناتچی استفاده میکنیم. یعنی اعداد دنباله زیر:

۱، ۲، ۳، ۵، ۸، ۱۳، ۲۱ و ….

البته همونطور که میدونید ما یه دونه از ۱های ابتدایی اعداد فیبوناتچی رو در نظر نگرفتیم. (اعداد فیبوناتچی: در این سری جمله n+1 ام از جمع جمله n و n-1 به دست میاد). در همون مثال برای محاسبه ۱۰۱۰ در سیستم فیباینری شما به صورت زیر عمل میکنید:

1*5+0*0+1*2+0*1 = 7

یعنی معادل دهدهی عدد فیباینری ۱۰۱۰ برابر با ۷ میباشد.

هر عدد دهدهی رو میشه با یک (یا بیشتر از یک) نمایش فیباینری نشون داد. مثلاً عدد ۱۰ رو میشه به صورت ۸+۲ که میشه ۱۰۰۱۰ و یا ۵+۳+۲ که میشه ۱۱۱۰ نشون داد. ما برای نمایش اعداد فیباینری همیشه از نمایش با اعداد بزرگتر استفاده میکنیم. در مثال گفته شده ما از نمایش ۸+۲ که معادل فیباینریش میشه ۱۰۰۱۰ استفاده میکنیم.

تا الان احتمالا فهمیدین که از شما چی میخوایم! میخوایم که یه برنامه بنویسید که دو تا عدد فیباینری معتبر رو بگیره و جمع فیباینری معتبر اونها رو حساب و چاپ کنه. برنامه رو هر جوری دوست دارید بنویسید.

ورودی / خروجی مساله:

ورودی

خروجی

10010

1

The sum is: 10100

10000

1000

The sum is: 100000

10000

10000

The sum is: 100100

پروژه ی ششم: بالاترین درجه اتصال در میدان های شهر : هاشمی فتح اللهی ابراهیمی

میدان های یک شهر با استفاده از خیابان های متصل به آنها به یکدیگر متصل می شوند. اتصال این میدان ها را به صورت یک شبکه در نظر می گیریم. وقتی که یک خیابان بین دو میدان وجود دارد هر دو به یکدیگر اتصال دارند.

برای هر دو میدان حداقل درجه گام را به صورت حداقل خیابان مورد نیاز برای رفتن از یک میدان به میدان دیگر تعریف می کنیم. برای یک شبکه، حداکثر درجه گام های شبکه را به صورت ماکسیمم درجه از بین حداقل درجه گام ها به ازای هر دو میدان در شبکه تعریف می کنیم(در واقع از بین حداقل درجه گام ها بین هر دو میدان در شبکه، مقدار ماکسیمم را انتخاب می کنیم). اگر برای دو میدان در شبکه هیچ مسیری نتوان یافت شبکه را به صورت "DISCONNECTED " تعریف می کنیم.

در این سوال ما می خواهیم حداکثر درجه گام های شبکه را پیدا کنیم. در زیر دو مثال مختلف نشان داده شده است.

ورودی

خط اول دو عدد در بردارد :P() ، که نشان دهنده تعداد از میدان های شهر است و عدد R()نشان دهنده تعداد از ارتباطات در شبکه است. مثلا در شکل سمت چپ بالا 4 میدان و 4 اتصال وجود دارد. در شکل سمت راست 4 میدان و دو اتصال وجود دارد.

Emam

Saadi

Shohada

bahman

Emam

Saadi

Shohada

bahman

حداکثر درجه گام در این شبکه : 2

این شبکه Disconnected است

خط بعدی R ارتباطات را تعریف می کند. هر ازتباط به صورت زوج های دوتایی از نام میدان ها تعریف می شود(از اول خط به صورت جفت جفت در نظر بگیرید). نام شهرها منحصر به فرد است و هیچ فضای خالی در داخل یک نام وجود ندارد. نام هر میدان با یک خط فاصله از هم جدا می شوند. چون یک شخص ممکن است بیش از یک ارتباط داشته باشد پس یک نام ممکن است بیش از یکبار در این خط ذکر شود

خروجی

برای شبکه مورد نظر در ورودی حداکثر درجه گام های شبکه را چاپ می کنیم. اگر شبکه Disconnected است کلمه “DISCONNECTED” را چاپ می کنیم.

خروجی

ورودی

Network: 2

4 4

Saadi Bahman Emam Bahman Shohada Emam Bahman Shohada

Network: DISCONNECTED

4 2

Saadi Emam Shohada Bahman

به نمونه ی آزمایشی زیر توجه کنید:

Test case 1

Output

Input

Network: 2

4 4

Saadi Bahman Bahman Emam Emam Shohada Saadi Shohada

Network: 3

6 5

Khayam Saadi Bahman Saadi Bahman Keshvari Bahman Shoada Madar Bahman

Network: 2

4 4

Saadi Bahman Emam Bahman Shohada Emam Bahman Shohada

Network: DISCONNECTED

4 2

Saadi Emam Shohada Bahman

Network: 6

11 14

Golha Defa Defa Milad Milad Enghelab Enghelab Shohada Enghelab Saadi Saadi Shohada Saadi Bahman Milad Keshvari Keshvari Bahman Keshvari Madar Madar Bahman Bahman Emam Emam Shohada Emam Arghavan

پروژه ی هفتم: معادلات درجه دو محمدی زاد و رستمی

در این سوال یک تابع درجه ی دوم به فرم Ax2+Bxy+Cy2+DX+EY+F=0 به شما داده می شود و شما با توجه به مقادیر A تا F شکل معادله را تعیین می کنید. به شکل و جدول زیر توجه کنید:

دایره

A=C و B=0

بیضی

A و C هم علامت و غیر مساوی، B=0

سهمی

یکی از A یا C برابر 0 هستند و B=0

هذلولی

علامت A و C یکی نیست و B=0

علاوه بر تعیین نوع معادله باید اطلاعاتی راجع به شکل آن نیز به دست بیاورید. به عنوان مثال برای دایره ی x2+y2+4x-6y-3=0 به صورت زیر مربع کامل را انجام می دهیم و مرکز و شعاع دایره را تعیین می کنیم:

که مرکز دایره در (-2,3) قرار دارد و شعاع آن برابر 4 است. برای بیضی زیر نیز بدین صورت عمل می کنیم:

مرکز بیضی فوق در محل (3,2) قرار دارد و اندازه ی قطر بزرگ آن از حاصلضرب مجذور 36 یعنی 6 در عدد 2 به دست می آید. اندازه ی قطر کوچک آن نیز از حاصلضرب مجذور 9 یعنی 3 در عدد 2 به دست می آید. لذا، قطرهای بزرگ و کوچک بیضی به ترتیب برابر 12 و 6 هستند. در مورد هذلولی هم روال مشابهی طی می شود. در زیر دو مثال از فرم استاندارد هذلولی داده شده است:

در مثال سمت راست، A منفی و C مثبت است، لذا نقطه ی کانونی (3,2) و خط x=3 آنرا نصف می کند. در معادله ی سمت چپ A مثبت و C منفی است و خط y=2 عمود منصف آن است. فرم استاندارد سهمی نیز شبیه یکی از صورتهای زیر است:

مرکز هر دو سهمی برابر (3,2) است. در سهمی سمت راست A=0 است، لذا خط y=1 محور تقارن است. در معادله ی سمت چپ، C=0 است و خط x=3 محور تقارن است.

برای امتحان برنامه 5 خط ورودی به شما داده می شود. در هر خط یک معادله ی درجه 2 به شما داده می شود. شما باید نوع معادله و اطلاعات فوق را در مورد آن چاپ کنید. به مثالهای زیر توجه کنید:

ورودی

خروجی

x^2+y^2+4x-6y-3=0

Circle, (-2,3), 4

x^2+4y^2-6x-16y-11=0

Ellipse, (3,2),12

2x^2+2y^2+8x+12y-6=0

Circle, (-2,-3),4

پروژه ی هشتم: بازی زندگی حاطمی - زمانی

این بازی توسط کامپیوتر انجام می شود. تعدادی سلول بصورت یک ماتریس n*n وجود دارند. بعضی از سلول ها زنده (رنگ زرد) و بعضی مرده (رنگ خاکستری) هستند. بعد از گذشت یک واحد زمانی (مثلاً یک ثانیه) وضعیت سلولها ها طبق قوانین زیر عوض می شود. بازی با یک هسته ی اولیه شروع می شود و مراحل رشد و نمو و مرگ و میر سلول باید مرحله به مرحله نشان داده شود.

· هر سلول زنده که 1 همسایه ی زنده دارد یا هیچ همسایه ی زنده ای ندارد، از تنهایی می میرد.

· هر سلول زنده ای که 4 یا بیشتر همسایه ی زنده داشته باشد از کمبودهای ناشی از جمعیت زیاد می میرد.

· هر سلول زنده با 2 یا 3 همسایه ی زنده، به حیات خود ادامه می دهد.

· هر سلول مرده که 3 همسایه ی زنده داشته باشد، به دنیا می آید (یا زنده می شود)

مراحل رشد و نمو از چپ به راست نشان داده شده اند.

حداقل 10 حالت جالب که منجر به تولید اشکال زیبا بشود را پیدا کنید و به کاربر اجازه دهید که آنها را بارگذاری کند. باید زمان بین تغییر حالتها قابل کنترل باشد (مثل آهسته، معمولی و سریع). حداقل سایز آرایه را 20 در 40 در نظر بگیرید. اما استفاده از اندازه های خیلی بزرگتر توصیه می شود. تعداد همسایه ها در مرزها کمتر است.

پروژه ی نهم: حمله ی اعداد اول

در این بازی یک عدد طبیعی با سرعت ثابت از بالای پنجره به سمت پایین حرکت می کند و کاربر باید عاملهای اول موجود در آنرا با کلیک روی دکمه های مناسب پیدا کند. در قسمت پایین برنامه تعدادی دکمه وجود دارد که شامل اعداد 2، 3، 5، 7، 11، 13 و ... هستند. مثلاً اگر عدد 24 به سمت پایین حرکت کند و کاربر دکمه ی 2 را بزند، عدد به 12 تبدیل می شود. بعد از زدن دکمه ی 3، عدد به 4 تبدیل می شود. کاربر باید دو بار دیگر دکمه ی 2 را بزند تا عدد به 2 و بعد به 1 تبدیل شود و عدد بعدی شروع به حرکت کند.

اعداد به صورت تصادفی انتخاب می شوند و سرعت حرکت آنها به تدریج زیاد می شود. اگر کاربر عامل اول را اشتباه حدش بزند، این عدد به صورت آزاد سقوط کرده و عدد بعدی شروع به حرکت می کند. اگر تعداد اعداد سقوط کرده در یک قسمت از بازی از یک حد مشخص (مثلاً 5) بگذرد، بازی خاتمه پیدا می کند.

در مورد گرافیک بازی می توانید از بازی معروف tetris ایده بگیرید.

پروژه ی دهم: پازل دستی اعداد

این بازی شامل 16 خانه است که اعداد 1 تا 15 به صورت تصادفی در آنها چیده شده اند و یکی از خانه ها خالی است. کاربر باید با جابجایی خانه خالی اعداد را مرتب کند. برای آشنایی بیشتر می توانید یکی از ویجتهای ویندوز را ببینید. در صورت امکان از یک تصویر به جای اعداد استفاده کنید. برنامه باید قابلیت ثبت بهترین رکوردها (از لحاظ زمانی) را داشته باشد. هم چنین کاربر باید بتواند تا 5 حرکت به عقب برگردد.

پروژه ی یازدهم: مخفی کردن تصویر

در این پروژه یک فایل bmp و یک فایل متنی وجود دارند. شما باید فاییل bmp را باز کنید و در اطلاعات مربوط به پیکسلها فایل متنی را جایگذاری کنید. بدین ترتیب که هر پیکسل رنگی شامل سه رنگ و 24 بیت یا 3 بایت است. هر بایت یک عدد بین 0 تا 255 است که میزان رنگ مربوطه را مشخص می کند. کدام از بایتها می توانند 1 بیت را در خود حمل کنند. به عنوان مثال، اگر کد رنگ برابر 155 باشد، کم ارزش ترین بیت برابر 1 است. اگر ما بخواهیم بیت 0 را در این رنگ جایگذاری کنیم، باید کم ارزشترین بیت را برابر 0 قرار دهیم. لذا کد رنگ به 154 تغییر می کند. اما اگر بیت مورد نظر ما برای کدگذاری 1 باشد، تغییری در کد این رنگ نمی دهیم.

در حالت کلی، ما فایل متنی را به صورت کاراکتر به کاراکتر می خوانیم. هر کاراکتر شامل 8 بیت است و هر کدام از بیتها در یک کد رنگ قرار می گیرند. لذا، برای کدگذاری سه کاراکتر به هشت پیکسل رنگی نیاز مند هستیم.

پروژه ی دوازدهم: بازی سودوکو

در فایل sudoku.txt پنجاه پازل مختلف قرار دارند که از آسان به سخت مرتب شده اند. اعداد 0 در این فایل نشانگر جاهای خالی هستند که باید برنامه شما آنرا پیدا کند. برنامهای بنویسید که یکی از این پازلها را انتخاب و نمایش دهد و سپس آنرا حل کند.

پروژه ی سیزدهم: فیلتر بلوم

در این پروژه فیلتر بلوم را پیاده میکنید. فیلتر بلوم به درد پایگاه دادههای خیلی بزرگ میخورد و مشخص میکند که آیا دادهی مورد نظر در پایگاه داده موجود است یا نه. اما مشکلی که دارد این است که ممکن است فیلتر اعلام کند یک داده در پایگاه داده موجود است در حالی که این گونه نیست. البته بر عکس آن امکان پذیر نیست. یعنی، اگر فیلتر بگوید که داده در پایگاه داده موجود نیست قطعاً درست خواهد بود. نکتهی بعدی این که می توانید دقت فیلتر را کنترل کنید.

فیلتر بلوم دارای یک آرایه از بیتها است که در ابتدا همهی آنها برابر صفر هستند. هر بار که یک داده را وارد پایگاه داده کنیم، داده را به یک تابع درهمسازی Hash میدهیم تا یک عدد تولید شود. حال، تمام بیتهای متناظر با عدد در آرایه را برابر “1” تنظیم میکنیم. اگر بخواهیم وجود یک داده در پایگاه داده را چک کنیم بدین صورت عمل می کنیم که Hash داده را محاسبه میکنیم. اگر بیتهای متناظر در آرایه تنظیم شده بودند به احتمال خیلی زیاد داده در پایگاه داده موجود است. اگر هنگام ورود داده به پایگاه داده، Hash آن طوری باشد که تمام مکانهای متناظر قبلاً تنظیم شده باشند می گوییم که برخورد رخ داده است. مشکل عدم دقت فیلتر بلوم همین امکان وقوع برخورد است. کلمات وارد شده در پایگاه داده از نوع رشته هستند. لطفاً برای مشخص کردن تابع Hash به اینجانب مراجعه کنید.

پروژه ی چهاردهم: بازی آواری

بازی آواری یکی از بازیهای بومیان آفریقا است که از طریق سنگ و سطل انجام میشود. این بازی شامل ۱۲ سطل و ۴۸ سنگ است. سطلهای ۱ تا ۶ مال بازیکن A و سطلهای 7 تا ۱۲ مال بازیکن B است. هدف این بازی این است که سنگهای بیشتری جمعآوری شود. اگر بازیکنی بیشتر از ۲۴ سنگ جمع کند میتواند پیشنهاد خاتمه ی بازی را بدهد. یا می توان بازی را تا وقتی که نتوان سنگ دیگری را خارج کرد ادامه داد. در ابتدا هر کدام از سطلها دارای ۴ سنگ است.

قانون اول: هر بار که نوبت به یک بازیگر رسید، آن بازیگر یکی از خانه های خود را انتخاب می کند و سنگهای آنرا بر میدارد و آنها در جهت خلاف حرکت عقربه های ساعت در سطلها بخش می کند. به هر سطل فقط یک سنگ اضافه میشود و در صورتی که سطلهای خودمان تمام شود از سطلهای حریف استفاده می کنیم. به شکل زیر دقت کنید:

در اینجا، بازیگر B سطل ۴ را انتخاب و سنگهای آنرا پخش کرده است.

قانون دوم: پس از این که بازیگر سنگهای خود را پخش نمود، اگر آخرین خانه ای که به آن سنگ اضافه کرده است متعلق به حریف بود و تعداد سنگهای ۲ یا ۳ بود، آن سنگها را برای خود بر میدارد. سپس، به خانه ی قبلی نگاه میکند. اگر تعداد سنگهای این سطل هم ۲ یا سه بود آنها را بر میدارد. اینکار را آنقدر تکرار می کنیم که به خانه ای برسیم که تعداد سنگهای ۲ یا ۳ نباشد. به شکل زیر دقت کنید:

قانون سوم: اگر سطلی که سنگهای آنرا برداشتهاید دوازده سنگ یا بیشتر داشته باشد، در اینصورت میتوان یک دور در تمام خانه ها سنگ قرار داد. اما حق ندارید سنگ دوازدهم را در سطل خالی شده بگذارید و از آن سطل صرفنظر کنید.

قانون چهارم: حق ندارید در یک حرکت تمام سطلهای حریف را خالی کنید. انجام اینکار به منزله ی قبول شکست از طرف شما است.

قانون پنجم: اگر ادامه ی بازی عاقلانه نباشد یا امکان برداشتن سنگ دیگری نباشد، دو طرف میتوانند بازی را خاتمه دهند و کسی که سنگ بیشتری جمع کرده است برنده است.