• בלוג
  • שאלות מראיונות עבודה: משולש כוכבים

שאלות מראיונות עבודה: משולש כוכבים

30/06/2019

את השאלה הזאת נתתי בתרגיל באחד הקורסים והפתיע אותי לגלות שיותר אנשים מסתבכים איתה ממה שחשבתי שיקרה. בואו נראה את השאלה, כמה כיוונים לא נכונים ואז את הכיוון הנכון.

1. ציור משולש מכוכבים

כתבו תוכנית Python שמקבלת כקלט מספר שורות ומציירת משולש של כוכבים המיושר לאמצע וגובהו לפי מספר השורות שהתקבל. לדוגמא אם מספר השורות הוא 5 נרצה לקבל את המשולש הבא:

    *
   ***
  *****
 ******* 
*********

2. איך לחשוב על השאלה

הגישה המסורבלת לגשת לשאלה הזאת היא לנסות לחשוב כמה רווח צריך להשאיר בתחילת כל שורה, ואז כמה כוכבים צריך לצייר באותה שורה. גישה כזאת אומרת שבשביל לצייר שורה נשתמש בשתי לולאות: הראשונה לציור הרווחים והשניה לציור הכוכבים עצמם.

גישה יותר טובה היא לחשוב על התבנית כמו מלבן שחלק מהמשבצות בו צבועות בכוכבים ומשבצות אחרות נשארות ריקות. בגישה זו אנחנו רק צריכים לשאול עבור כל משבצת - בהינתן אינדקס (i,j) מסוים, האם המשבצת צריכה להיות מלאה או ריקה. על השאלה הזאת הרבה יותר קל לענות: אם המשבצת רחוקה מדי מהאמצע היא תהיה ריקה, ואם היא קרובה מספיק לאמצע נצייר בה כוכבית.

3. פיתרון בשפת Python

בהנחה שהמשתנה i מייצג את מספר השורה ו j את מספר העמודה, התנאי שלנו יראה כך:

if abs(j - middle) <= i:

כלומר בכל שורה אנחנו רוצים לצבוע רק ה i משבצות שהכי קרובות לאמצע.

והתוכנית המלאה בפייתון:

import sys

rows = int(sys.argv[1])
cols = (2 * rows) - 1
middle = int(cols / 2)

for i in range(rows):
    for j in range(cols):
        if abs(j - middle) <= i:
            print("*", end="")
        else:
            print(" ", end="")
    print()