--- tags: bcourse --- # (завдання) Операційна семантика ## Переставити місцями вагони ![](https://i.imgur.com/dIAqRWc.jpg) ## Переставити місцями жовтий і червоний використовуючи тільки заливку та піпетку ![](https://i.imgur.com/CaFlANZ.png) ## Переставити місцями іменa ![](https://i.imgur.com/tEw2H5Z.png) ## Алгоритм SWAP Всі три перестановки вище записуються одним кодом: ```python= temp = a a = b b = temp ``` Але всі вони *виконуються* по різному. Як саме? ## Заводські номери У кожного об'єкта є заводський номер, який можна взнати через функцію `id()`. І навпаки, все, що має заводський номер --- є об'єктом. Всі заводські номери унікальні, не існує двох об'єктів з однаковими номерами. ## Яка операційна семантика SWAP в Пайтоні? Треба експеримент! ## Чому цей алгоритм також міняє місцями числа? ```python= ### Алгоритм SWAP+ a = 10 b = 5 print(a, b) # 10 5 a = a + b b = a - b a = a - b print(a, b) # 5 10 ``` ## Чи однакові це перестановки? ```python= a, b = b, a ``` та ```python= b, a = a, b ``` ## Чи є це перестановкою? ```python= a, b = a, b ``` ## Чи однакові це перестановки? ```python= b, a, c = a, b, c ``` та ```python= a, c, b = c, b, a ``` ## Скільки є різних перестановок для трьох імен? Запиши їх всі. ## Питання для самоперевірки :::info 1. Яка операційна семантика у алгоритму SWAP? 2. Чи відбуваються копіювання в алгоритмі SWAP? 3. Скільки створень, копіювань, імен та іменувань у цьому коді: ```python= a = 10 b = a a = 5 a = a + b b = a - b a = a - b ``` 4. Скільки є різних перестановок серед двух імен? серед трьох імен? 5. Який буде результат виконання цього коду в трьох різних операційних семантиках? ```python= a = [10, 20] b = [1] temp = a a = b b = temp b.append(5) b = a a = temp ``` ::: ## Завдання Якщо щось не ясно по завданню, задавайте питання в чаті. :::info 1. Створити Портфоліо на https://hackmd.io, зробити публічним та скинути посилання в чат. 2. Додати всі власні ідеї в розділ "Ідеї" в Портфоліо. Якщо є код, яким хочеш поділитись --- записати його в "Реалізації". 3. Записати відео, де коротко і по суті розповісти різницю між різними операційними семантиками та авторитетно пояснити яка з них використовується в Пайтоні. Додати відео в Портфоліо. 4. Встановити локально ipython (`pip install ipython`). Зробити запуск ipython по хоткею (через https://www.autohotkey.com/). 5. Вставновити локально Thonny (https://thonny.org/), для наступного уроку. 6. Скачати на телефон та пограти кілька рівнів гру **"Train Shunting Puzzle"** - Android --- https://play.google.com/store/apps/details?id=com.dchistyakov.trainshunting&hl=en_US&gl=US - iOS --- https://apps.apple.com/ua/app/train-shunting-puzzle/id1501306971 7. Вміти пояснити чому цей код також робить SWAP для чисел: ```python= a = 10 b = 5 a = a ^ b b = a ^ b a = a ^ b ``` Якщо вмієш пояснити, додай це в Портфоліо --- бо це круто! 6. **(складно)** Написати код, який виведе на екран всі перестановки з N змінних 7. **(дуже складно)** Написати код, який методом перебору знайде всі можливі реалізації алгоритму SWAP. На вході він отримує: - набір імен, які можна використовувати (`a`, `b`, `temp`) - максимальна кількість кроків - шаблони коду (`{} + {}`, `{} = {}`, `{} - {}`, `{}, {}`) На виході --- список алгоритмів :::