Skip to content

פתרון לAeneas' cryptographic disc (4th c. B.C.)

מה רוצים בתרגיל

יש צלחת עם חור באמצע ולכל אורך היקף הצלחת יש חורים במרחק שווה למרכז הצלחת שמייצגים את הABC.
בצלחת מעבירים חוט ע"מ לייצר משפט.
צריך ליצור אלגוריתם לחישוב אורך החוט בשביל לייצר משפט.
במהלך החישוב צריך להסיר רווחים,סימנים שהם לא אותיות ואותיות כפולות

קלט

אורך הרדיוס של הצלחת , את הזוית שמייצרת כל אות ואת המשפט עצמו שצריך לחשב את אורך החוט שנצרך כדי לייצר את אותו משפט

איך פותרים

עושים לולאה שאמצעותה מייצרים dictionary של כל האותיות והזוויות שלהם ובנוסף נשמור את כל הABC במערך(ע"מ לחפש בצורה יעילה אם התו שייך לABC או לא)

for i in range(26):
    parse= input()
    dict[parse.split(" ")[0]] = float(parse.split(" ")[1])
    letters.append(parse.split(" ")[0])

הופכים את כל האותיות לגדולות,מנקים אותו מסימנים,רווחים ואותיות גדולות

sentence = input().upper()
for letter in sentence:
    if letter in letters:
         find_letter.append(letter)
arr = []
arr.append(find_letter[0])
for i in range(1, len(find_letter)):
    if find_letter[i] != arr[-1]:
        arr.append(find_letter[i])

מציאת הזווית

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

sum = radius
for letter in range(1, len(arr)):
    angle = abs(dict[arr[letter]] - dict[arr[letter-1]])
    if angle > 180:
        angle = 360 - angle
    if angle != 0:
        sum += math.sqrt(2*math.pow(radius,2) - 2*radius*radius*math.cos(math.radians(angle)))

print(math.ceil(sum))