GammaCyber

כתיבת קוד — שיעור 5

Python מרוכז: יסודות אינטנסיביים

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T1 · מתחיל150 נק'~10 דק'debug
תיקון באג — בודק פלינדרום
בודק הפלינדרום הבא מתעלם מרישיות אך שבור: הוא מדלג על השוואת התו הראשון לאחרון, ולכן מחרוזת שנבדלת רק בקצוות מסווגת כפלינדרום בטעות (למשל "yabax" מוחזר True). מצא ותקן. החזר את הגרסה המתוקנת.
// הקוד השבור לתיקון
def is_palindrome(s: str) -> bool: s = s.lower() n = len(s) for i in range(1, n // 2): # באג כאן if s[i] != s[n - i - 1]: return False return True
דוגמאות
is_palindrome('racecar') → True
is_palindrome('yabax') → False
is_palindrome('Anna') → True
פתרון-ייחוס תיקון באג — בודק פלינדרום ›
def is_palindrome(s: str) -> bool: s = s.lower() n = len(s) for i in range(n // 2): # התיקון: מ-0 (הגרסה השבורה דילגה על התו הראשון) if s[i] != s[n - i - 1]: return False return True
הפתרון נשמר מקומית אוטומטית.
T2 · בסיסי200 נק'~15 דק'algorithmic
התו היחיד הראשון
נתונה מחרוזת s. החזר את האינדקס של התו הראשון שאינו חוזר על עצמו במחרוזת. אם אין תו כזה — החזר -1. חובה O(n): קלט של מיליון תווים חייב לרוץ בזמן. (פתרון תמים שסופר מופעים עם s.count בתוך לולאה הוא O(n²) וייפסל ב-timeout.)
דוגמאות
first_uniq('leetcode') → 0
first_uniq('loveleetcode') → 2
first_uniq('aabb') → -1
פתרון-ייחוס התו היחיד הראשון ›
from collections import Counter def first_uniq(s: str) -> int: c = Counter(s) # ספירה אחת: O(n) for i, ch in enumerate(s): if c[ch] == 1: return i return -1
הפתרון נשמר מקומית אוטומטית.