Skip to content

Commit e64096f

Browse files
committed
Add another exercise
1 parent b7df2c3 commit e64096f

File tree

1 file changed

+243
-4
lines changed

1 file changed

+243
-4
lines changed

week4/Summary.ipynb

Lines changed: 243 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,250 @@
127127
]
128128
},
129129
{
130-
"cell_type": "code",
131-
"execution_count": null,
130+
"cell_type": "markdown",
132131
"metadata": {},
133-
"outputs": [],
134-
"source": []
132+
"source": [
133+
"## <p style=\"text-align:right;direction:rtl;\">Leveraging Simple Dictionaries</p>"
134+
]
135+
},
136+
{
137+
"cell_type": "markdown",
138+
"metadata": {},
139+
"source": [
140+
"### <p style=\"text-align:right;direction:rtl;\">הקדמה</p>"
141+
]
142+
},
143+
{
144+
"cell_type": "markdown",
145+
"metadata": {},
146+
"source": [
147+
"<p style=\"text-align:right;direction:rtl;\">\n",
148+
" <dfn>אוטומט סופי דטרמיניסטי</dfn> הוא מודל מתמטי שמגדיר אוסף של מצבים, וכללי מעבר ביניהם.<br>\n",
149+
" נפתח בדוגמה:<br>\n",
150+
" <figure>\n",
151+
" <img src=\"images/even_dfa.svg\" style=\"max-width:100%; margin-right: auto; margin-left: auto; text-align: center;\" width=\"450px\" alt=\"תמונת דוגמה לאוטומט סופי דטרמיניסטי. בצד ימין ישנו חץ שעליו כתוב 'התחלה'. החץ מצביע לעיגול שבו יש את המילים 'אי־זוגי', וממנו יוצא חץ לכיוון עיגול כפול שבו כתוב 'זוגי'. על החץ כתוב 'הספרה 2, 4, 6, 8 או 0'. מהעיגול הכפול יוצא חץ חזרה לעיגול הראשון, עליו כתוב 'הספרה 1, 3, 5, 7 או 9'. מהעיגול 'זוגי' יוצא חץ לעצמו עם המספרים 2, 4, 6, 8 ו־0. מהעיגול 'אי־זוגי' יוצא חץ לעצמו עם המספרים 1, 3, 5, 7, 9. \">\n",
152+
" <figcaption style=\"text-align: center; direction: rtl;\">אוטומט סופי דטרמיניסטי שבודק האם מספר מסוים הוא מספר זוגי.</figcaption>\n",
153+
" </figure>\n",
154+
"</p>"
155+
]
156+
},
157+
{
158+
"cell_type": "markdown",
159+
"metadata": {},
160+
"source": [
161+
"<p style=\"text-align:right;direction:rtl;\">\n",
162+
" לפניכם מכונת מצבים שמקבלת מספר, ובודקת האם הוא זוגי.<br>\n",
163+
" כל מצב מיוצג בתמונה על ידי עיגול, וכללי המעבר ביניהם מיוצגים באמצעות חצים.\n",
164+
"</p>"
165+
]
166+
},
167+
{
168+
"cell_type": "markdown",
169+
"metadata": {},
170+
"source": [
171+
"<p style=\"text-align:right;direction:rtl;\">\n",
172+
" המכונה מתחילה מ\"מצב התחלתי\" נתון כלשהו, במקרה שלנו \"מספר אי זוגי\".<br>\n",
173+
" כל פעם שמתקבל קלט חדש, המכונה מחליטה לאיזה מצב לעבור לפי כללי המעבר הרשומים על החצים.<br>\n",
174+
" לדוגמה, עבור הקלט 2 ואז 7 ואז 4 (274) מכונת המצבים המופיעה מעלה תבצע את הפעולות הבאות:\n",
175+
"</p>"
176+
]
177+
},
178+
{
179+
"cell_type": "markdown",
180+
"metadata": {},
181+
"source": [
182+
"<ol style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n",
183+
" <li>תכנס למצב ההתחלתי \"מספר אי זוגי\".</li>\n",
184+
" <li>תקרא את הספרה הראשונה במספר – 2, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".</li> \n",
185+
" <li>תקרא את הספרה השנייה במספר – 7, ותחליט לעבור (לפי החץ) למצב \"מספר אי־זוגי\".</li> \n",
186+
" <li>תקרא את הספרה השלישית במספר – 4, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".</li>\n",
187+
"</ol>"
188+
]
189+
},
190+
{
191+
"cell_type": "markdown",
192+
"metadata": {},
193+
"source": [
194+
"<p style=\"text-align:right;direction:rtl;\">\n",
195+
" לכל מצב באוטומט סופי דטרמיניסטי יש \"סוג מצב\": מקבל או לא מקבל.<br>\n",
196+
" מצב מקבל מסומן בעיגול כפול, כמו המצב \"מספר זוגי\" באוטומט דלעיל.<br>\n",
197+
" אם בסוף הריצה הגענו למצב מקבל, סימן שהקלט תקין, ואם לא – סימן שהקלט אינו תקין.<br>\n",
198+
" באוטומט הדוגמה שלנו כל קלט מספרי זוגי הוא תקין, וכל מספרי אי־זוגי נחשב ללא תקין.\n",
199+
"</p>"
200+
]
201+
},
202+
{
203+
"cell_type": "markdown",
204+
"metadata": {},
205+
"source": [
206+
"<p style=\"text-align:right;direction:rtl;\">\n",
207+
" כל אפשרות הכלולה במצבי המעבר נקראת <dfn>אות</dfn>. אוסף כל האותיות הכלולות באוטומט מסוים נקרא <dfn>א\"ב הקלט</dfn>.<br>\n",
208+
" שימו לב שבאוטומט יכולה להיות כמות גדולה של מצבים וכללי־מעבר, ובכל אוטומט יכול להיות יותר ממצב מקבל אחד.<br>\n",
209+
" כמו כן, \"אות\" בא\"ב יכולה לכלול יותר מתו אחד.\n",
210+
"</p>"
211+
]
212+
},
213+
{
214+
"cell_type": "markdown",
215+
"metadata": {},
216+
"source": [
217+
"### <p style=\"text-align:right;direction:rtl;\">תרגיל</p>"
218+
]
219+
},
220+
{
221+
"cell_type": "markdown",
222+
"metadata": {},
223+
"source": [
224+
"<p style=\"text-align:right;direction:rtl;\">\n",
225+
" כתבו תוכנה שקוראת קובץ ויוצרת ממנו אוטומט סופי דטרמיניסטי.<br>\n",
226+
" בקובץ ישנו כל המידע הדרוש לבניית האוטומט, ורשימת קלטים. דוגמה לקובץ שכזה מופיעה מטה.<br>\n",
227+
" הדפיסו עבור כל קלט האם לאחר הרצתו האוטומט הגיע למצב מקבל או למצב לא מקבל.\n",
228+
"</p>"
229+
]
230+
},
231+
{
232+
"cell_type": "markdown",
233+
"metadata": {},
234+
"source": [
235+
"<p style=\"text-align:right;direction:rtl;\">\n",
236+
" הקובץ שהתוכנה שלכם אמורה לקרוא ונועד לתאר את האוטומט המופיע למעלה נראה כך:\n",
237+
"</p>"
238+
]
239+
},
240+
{
241+
"cell_type": "raw",
242+
"metadata": {},
243+
"source": [
244+
"Definitions:\n",
245+
"States: q0, q1\n",
246+
"Start: q0\n",
247+
"Accepting: q1\n",
248+
"\n",
249+
"Transitions:\n",
250+
"q0: 2, 4, 6, 8, 0 -> q1\n",
251+
"q0: 1, 3, 5, 7, 9 -> q0\n",
252+
"q1: 2, 4, 6, 8, 0 -> q1\n",
253+
"q1: 1, 3, 5, 7, 9 -> q0\n",
254+
"\n",
255+
"Inputs:\n",
256+
"1, 3, 1\n",
257+
"2, 7, 4\n",
258+
"2, 2, 2, 2"
259+
]
260+
},
261+
{
262+
"cell_type": "markdown",
263+
"metadata": {},
264+
"source": [
265+
"<p style=\"text-align:right;direction:rtl;\">\n",
266+
" על התוכנה שבניתם להדפיס במקרה הזה:\n",
267+
"</p>"
268+
]
269+
},
270+
{
271+
"cell_type": "raw",
272+
"metadata": {},
273+
"source": [
274+
"False\n",
275+
"True\n",
276+
"False"
277+
]
278+
},
279+
{
280+
"cell_type": "markdown",
281+
"metadata": {},
282+
"source": [
283+
"### <p style=\"text-align:right;direction:rtl;\">הסבר עבור הדוגמה</p>"
284+
]
285+
},
286+
{
287+
"cell_type": "markdown",
288+
"metadata": {},
289+
"source": [
290+
"<p style=\"text-align:right;direction:rtl;\">\n",
291+
" הפסקה הראשונה תמיד תראה כך:<br>\n",
292+
" הקובץ תמיד יפתח במילה <q dir=\"ltr\">Definitions:</q>.<br>\n",
293+
" שורה אחריה תמיד תופיע המילה <q dir=\"ltr\">States:</q>, ואחריה כל המצבים הקיימים במכונת המצבים, מופרדים בפסיק.<br>\n",
294+
" שורה אחריה תמיד תופיע המילה <q dir=\"ltr\">Start:</q>, ואחריה המצב ההתחלתי של המכונה.<br>\n",
295+
" שורה אחריה תמיד תופיע המילה <q dir=\"ltr\">Accepting:</q>, ואחריה כל המצבים שמוגדרים כמצבים מקבלים במכונת המצבים, מופרדים בפסיק.<br>\n",
296+
"</p>"
297+
]
298+
},
299+
{
300+
"cell_type": "markdown",
301+
"metadata": {},
302+
"source": [
303+
"<p style=\"text-align:right;direction:rtl;\">\n",
304+
" הפסקה השנייה תמיד תראה כך:<br>\n",
305+
" הפסקה תמיד תפתח במילה <q dir=\"ltr\">Transitions:</q>, ואחריה רשימה של כללי מעבר.<br>\n",
306+
" כל כלל מעבר מורכב מהמצב ממנו יוצאים, המצב אליו מגיעים ומה הקלט ש\"מפעיל\" את המעבר.<br>\n",
307+
" השורה תכתב באופן הבא, כאשר X הוא המצב ממנו יוצאים, Z הוא המצב אליו מגיעים ו־Y היא רשימת הקלטים שמפעילה את מצב המעבר:<br>\n",
308+
" X: Y -> Z<br>\n",
309+
"</p>"
310+
]
311+
},
312+
{
313+
"cell_type": "markdown",
314+
"metadata": {},
315+
"source": [
316+
"<p style=\"text-align:right;direction:rtl;\">\n",
317+
" הפסקה השלישית תמיד תראה כך:<br>\n",
318+
" הפסקה תמיד תפתח במילה <q dir=\"ltr\">Inputs:</q>, ואחריה רשימה של קלטים <strong>תקינים</strong>.<br>\n",
319+
" כל שורת קלט תופיע בשורה נפרדת בקובץ, ותכלול את רצף הקלטים שיועברו לאוטומט אחד אחרי השני, כאשר הם מופרדים בפסיק.\n",
320+
"</p>"
321+
]
322+
},
323+
{
324+
"cell_type": "markdown",
325+
"metadata": {},
326+
"source": [
327+
"<p style=\"text-align:right;direction:rtl;\">\n",
328+
" עבור הקלט הראשון, האוטומט יתחיל מהמצב ההתחלתי q0. האות 1 תשאיר אותו שם, כך גם 3, כך גם 1. מצב לא מקבל.<br>\n",
329+
" עבור הקלט השני, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 7 תעביר אותו ל־q0, האות 4 תעביר אותו חזרה ל־q1. מצב מקבל.<br>\n",
330+
" עבור הקלט השלישי, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 2 תשאיר אותו ב־q1 בכל המופעים הבאים שלה. מצב מקבל.<br>\n",
331+
"</p>"
332+
]
333+
},
334+
{
335+
"cell_type": "markdown",
336+
"metadata": {},
337+
"source": [
338+
"### <p style=\"text-align:right;direction:rtl;\">דוגמה נוספת</p>"
339+
]
340+
},
341+
{
342+
"cell_type": "markdown",
343+
"metadata": {},
344+
"source": [
345+
"<p style=\"text-align:right;direction:rtl;\">\n",
346+
" זוהי דוגמה לקובץ שמתאר את האוטומט המופיע <a href=\"https://en.wikipedia.org/wiki/Deterministic_finite_automaton#/media/File:DFA_example_multiplies_of_3.svg\">כאן</a>.\n",
347+
"</p>"
348+
]
349+
},
350+
{
351+
"cell_type": "raw",
352+
"metadata": {},
353+
"source": [
354+
"Definitions:\n",
355+
"States: s0, s1, s2\n",
356+
"Start: s0\n",
357+
"Accepting: s0\n",
358+
"\n",
359+
"Transitions:\n",
360+
"s0: 0 -> s0\n",
361+
"s0: 1 -> s1\n",
362+
"s1: 1 -> s0\n",
363+
"s1: 0 -> s2\n",
364+
"s2: 0 -> s1\n",
365+
"s2: 1 -> s2\n",
366+
"\n",
367+
"Inputs:\n",
368+
"0\n",
369+
"0, 1\n",
370+
"0, 1, 0\n",
371+
"0, 0, 0, 0\n",
372+
"0, 1, 1, 1, 1, 1, 0"
373+
]
135374
}
136375
],
137376
"metadata": {

0 commit comments

Comments
 (0)