תכנות, רקורסיה, מערכים, מחרוזות, עצים בינאריים ורשימות מקושרות
encrypt, שמקבלת מחרוזת text ומילון d המייצג מיפוי כנ"ל מא"ב לעצמו (ייתכן שיש ב-text תווים שלא מופיעים במיפוי הזה). הפונקציה תחזיר את המחרוזת המוצפנת המתקבלת מ-text לאחר שתווים שלא מופיעים במילון יישארו ללא שינוי.permutations, המקבלת רשימה ומחזירה את כל התמורות (פרמוטציות) שלה. למשל:all_mappings, המקבלת רשימה של תווי א"ב כלשהו, ומחזירה את כל המיפויים (מילונים) האפשריים בין תווי הא"ב לעצמו. all_mapping צריכה להיות בעצמה פונקציית גנרטור (כלומר לעשות שימוש ב-yield). למשל:is_prime אשר נלמדה בהרצאה:is_prime עשויה להחזיר שהמספר הנתון הוא פריק אף על פי שהוא בעצם ראשוני, בהסתברות של .is_prime כדי לפצח הצפנות שכאלה. בהינתן מספר אשר יש לפרקו לגורמים — הוא יקרא לפונקציה is_prime(m, True). אם המספר אינו ראשוני הפונקציה תדפיס גם את העד (witness). כאשר דני יחלק את המספר ב-witness שהודפס הוא יקבל את הגורם השני של המספר וכך יפצח את הקוד. האם תוכניתו של דני תצליח לפרק מספר פריק לגורמים? אם לא, נמקו.tzfania(S) מחזירה ערך בוליאני; תשובותיה עקביות (אין טעם לחזור על שאלה).game_guessing() שלא מקבלת קלט ומחזירה את המספר הסודי. שאלו כמה שפחות שאלות במקרה הגרוע.get_Hamming_code(m) שמחזירה רשימה של מילות קוד, כל אחת כמחרוזת בינארית באורך ."ATCAAGTCAATCA" הצמדים המקסימליים מאורך הם .שאלות תרגול במבוא למדעי המחשב בנושא קריפטוגרפיה ממבחנים של האוניברסיטה הפתוחה, אוניברסיטת תל אביב, אוניברסיטת בר-אילן, הטכניון. השאלות ממוינות לפי רמת קושי, עם פתרונות לבדיקה עצמית - כך שניתן ללמוד מטעויות ולהבין את דרך הפתרון לפני הבחינה. ניתן לאתר שאלות חוזרות ולהריץ מבחני סימולציה ממוקדים בנושא קריפטוגרפיה.