На нашому сайті віддкрити зеркало ЄPython — одного з найзручніших інструментів вивчення мови Python.
Одна з можливостей ЄPython — приймати параметром підготовлений код. Це дуже зручно: пререйшов за покликанням - запустив - граєшся.
До речі, а знання цієї пісні - то тест на вік? Чи молодь цю пісню знає також?
Можете дізнатися — перейдіть за покликанням:
https://yepython.pletyvo.in.ua/?code=ZnJvbSBtdXNpYyBpbXBvcnQgKgpmcm9tIHRraW50ZXIgaW1wb3J0ICoKCgpkZWYgbXVzaWNfc3RvcCgpOgogICAgc3RvcF9wbGF5aW5nKCkKCmRlZiBtdXNpY19wbGF5KCk6CiAgICAgcGxheSgndDgwZjZmMTJhMTI+YzEyYzEyPGItMTJhMTI+YzY8ZzEyZzEyYi0xMmItMTJhMTJnMTInKSAgIAoKZGVmIG9rKCk6CiAgICAgbWVzc2FnZWJveC5zaG93aW5mbygn0KLQuCDQsdCwLi4nLCfQnNC+0LvQvtC00YfQuNC90LAhJykKICAgIApkZWYgbm90ZXMoKToKICAgIHRleHQgPSBiJ1x4YzJceGEwXG5ceGQwXHhhMyBceGQwXHhiZlx4ZDFceDk2XHhkMVx4ODFceGQwXHhiZFx4ZDFceDk2IFx4ZDBceGI3XHhkMFx4YmVceGQwXHhiMVx4ZDFceDgwXHhkMFx4YjBceGQwXHhiNlx4ZDBceGI1XHhkMFx4YmRceGQwXHhiZSBceGQxXHg4Nlx4ZDBceGI4XHhkMFx4YmFceGQwXHhiYiBceGQwXHhiZlx4ZDBceGJlXHhkMVx4ODBceGQxXHg4M1x4ZDFceDg4XHhkMFx4YjVceGQwXHhiZFx4ZDBceGI4XHhkMVx4ODUgXHhkMVx4ODFceGQwXHhiOFx4ZDFceDgyXHhkMVx4ODNceGQwXHhiMFx4ZDFceDgyXHhkMFx4YjhceGQwXHhiMlx4ZDBceGJkXHhkMFx4YjhceGQxXHg4NSBceGQwXHhiZVx4ZDBceGIxXHhkMVx4OTZceGQxXHg4Nlx4ZDFceDhmXHhkMFx4YmRceGQwXHhiZVx4ZDBceGJhLCBceGQxXHg4OVx4ZDBceGJlIFx4ZDFceDg0XHhkMFx4YmVceGQxXHg4MFx4ZDBceGJjXHhkMVx4ODNceGQxXHg4ZVx4ZDFceDgyXHhkMVx4OGMgXHhkMFx4YmZceGQwXHhiZVx4ZDBceGIyXHhkMVx4ODJceGQwXHhiZVx4ZDFceDgwXHhkMVx4OGVceGQwXHhiMlx4ZDBceGIwXHhkMFx4YmRceGQxXHg4MyBceGQwXHhiY1x4ZDBceGJlXHhkMFx4YjRceGQwXHhiNVx4ZDBceGJiXHhkMVx4OGMgXHhkMFx4YmNceGQxXHg5Nlx4ZDBceGI2XHhkMFx4YmVceGQxXHg4MVx4ZDBceGJlXHhkMFx4YjFceGQwXHhiOFx4ZDFceDgxXHhkMVx4ODJceGQxXHg5Nlx4ZDFceDgxXHhkMFx4YmRceGQwXHhiZVx4ZDFceDk3IFx4ZDBceGIyXHhkMFx4YjdceGQwXHhiMFx4ZDFceDk0XHhkMFx4YmNceGQwXHhiZVx4ZDBceGI0XHhkMVx4OTZceGQxXHg5Ny4gXHhkMFx4YTMgXHhkMFx4YmFceGQwXHhiZVx4ZDBceGI2XHhkMFx4YmRceGQwXHhiZVx4ZDBceGJjXHhkMVx4ODMgXHhkMFx4YjcgXHhkMFx4YmFceGQxXHg4M1x4ZDBceGJmXHhkMFx4YmJceGQwXHhiNVx4ZDFceDgyXHhkMVx4OTZceGQwXHhiMiwgXHhkMFx4YmZceGQxXHg4MFx4ZDBceGI4XHhkMFx4YjJceGUyXHg4MFx4OTlceGQxXHg4Zlx4ZDBceGI3XHhkMFx4YjBceGQwXHhiZFx4ZDBceGI4XHhkMVx4ODUgXHhkMFx4YjRceGQwXHhiZSBceGQwXHhiNFx4ZDBceGJkXHhkMVx4OTZceGQwXHhiMiBceGQxXHg4Mlx4ZDBceGI4XHhkMFx4YjZceGQwXHhiZFx4ZDFceDhmLCBceGQwXHhiM1x4ZDBceGI1XHhkMVx4ODBceGQwXHhiZVx4ZDBceGI5IFx4ZDFceDgxXHhkMVx4ODJceGQwXHhiOFx4ZDBceGJhXHhkMFx4YjBceGQxXHg5NFx4ZDFceDgyXHhkMVx4OGNceGQxXHg4MVx4ZDFceDhmIFx4ZDBceGI3IFx4ZDBceGJkXHhkMFx4YjVceGQwXHhiN1x4ZDBceGI0XHhkMVx4OTZceGQwXHhiOVx4ZDFceDgxXHhkMFx4YmRceGQwXHhiNVx4ZDBceGJkXHhkMFx4YjhceGQwXHhiY1x4ZDBceGI4IFx4ZDBceGJlXHhkMVx4ODdceGQxXHg5Nlx4ZDBceGJhXHhkMVx4ODNceGQwXHhiMlx4ZDBceGIwXHhkMFx4YmRceGQwXHhiZFx4ZDFceDhmXHhkMFx4YmNceGQwXHhiOCBceGQxXHg4Mlx4ZDBceGIwIFx4ZDBceGJmXHhkMFx4YjVceGQxXHg4MFx4ZDBceGI1XHhkMFx4YjZceGQwXHhiOFx4ZDBceGIyXHhkMFx4YjBceGQxXHg5NCBceGQxXHg4NFx4ZDFceDgwXHhkMVx4ODNceGQxXHg4MVx4ZDFceDgyXHhkMVx4ODBceGQwXHhiMFx4ZDFceDg2XHhkMVx4OTZceGQxXHg4ZS4gKGMpIENoYXRHUFQnCiAgICBtZXNzYWdlYm94LnNob3dpbmZvKCfQntGB0Ywg0L7Qv9C40YEsINC00YPQvNCw0LkuLi4nLHRleHQuZGVjb2RlKCd1dGYtOCcpKQogICAgICAgIApyb290PVRrKCkKTGFiZWwodGV4dD0n0JAg0LLQs9Cw0LTQsNC50YLQtSDQv9GW0YHQvdGOLi4uJykucGFjaygpCkxhYmVsKHRleHQ9J8KgJykucGFjaygpCkJ1dHRvbih0ZXh0PSfQkCDQvdGDLdC90L4nLCBjb21tYW5kPW11c2ljX3BsYXkpLnBhY2soKQpMYWJlbCh0ZXh0PSLCoCIpLnBhY2soKQpCdXR0b24odGV4dD0n0JfQvdCw0Y4hJyxjb21tYW5kPW9rKS5wYWNrKCkKQnV0dG9uKHRleHQ9J9Cd0LUg0LfQvdCw0Y4nLGNvbW1hbmQ9bm90ZXMpLnBhY2soKQpyb290Lm1haW5sb29wKCk=

Сьогодні вкотре запрошую поговорити про красу. Хтось заради краси малює, хтось шукає красу в музиці, а в чому може бути краса у програмістів? Що може бути такого для програміста гарного, або, хоча б, прикольного?
Давайте розглянемо задачу в тему:
Маршрутне таксі
https://basecamp.eolymp.com/uk/problems/7410
У годину пік на зупинку одночасно під'їхали три маршрутних таксі, які слідують по одному маршруту, в які тут же набилися пасажири. Водії виявили, що кількість людей у різних маршрутках різна, і вирішили пересадити частину пасажирів так, щоб у кожній маршрутці було порівну пасажирів. Потрібно визначити, яку найменшу кількість пасажирів доведеться при цьому пересадити.
Вхідні дані
Три натуральних числа, що не перевищують 100 - кількості пасажирів у першій, другій і третій маршрутках відповідно.
Вихідні дані
Виведіть одне число - найменшу кількість пасажирів, яку потрібно пересадити. Якщо це неможливо, виведіть слово IMPOSSIBLE (великими літерами).
Приклади
Вхідні дані #1
1 2 3
Відповідь #1
1
Пропоную відразу розібратися, коли неможливо буде рівномірно розподілити пасажирів по маршрутках. Така ситуація виникне, коли загальна кількість пасажирів у всіх маршрутках не буде націло ділитися на три.
В інших випадках пересадити пасажирів можна. Можна визначити для початку, скільки пасажирів повинно бути після пересадки в кожній маршрутці — кількість всіх пасажирів поділити на три.
Далі по кожній маршрутці знайти кількість людей, які повинно вийти з кожної маршрутки або зайти в неї. Скористаємся модулем і врахуємо, що людина, що вийшла з однієї маршрутки, зайшла в іншу і при такому підході врахована двічі. Ось як може виглядати код:
a, b, c = map(int, input().split())
if (a + b + c) % 3 != 0:
print('IMPOSSIBLE')
else:
avg = (a + b + c) // 3
print((abs(avg - a) + abs(avg - b) + abs(avg - c)) // 2)
Це гарно? Мабуть, так. І вчителька математики не проти. Але чи існують ще гарні рішення?
А якщо прийде програміст Петрик, що проспав урок про модулі і скаже, що двічі рахувати пасажирів негарно, а він без усіляких модулів вирішив рахувати лише тих, хто виходить з маршруток для пересадки? Ось так:
counts = [int(x) for x in input().split()]
if sum(counts) % 3 != 0:
print('IMPOSSIBLE')
else:
avg = sum(counts) // 3
move = 0
for count in counts:
if count > avg:
move += count - avg
print(move)
А от це — гарно? Здається і це гарно, навіть якщо вчителька математики буде вважати, що не треба придумувати дурню і їсти картоплю черпаком.
А яких з кодів гарніший? А який — швидший? А який більше подобається саме Вам, шановний читач? А чому? Який код гарніший саме для Вас? Бо ми ж сьогодні — про красу.
Розглянемо задачу, що на basecamp.eolymp.com має дуже дивний коефіцієнт прийняття – 24%. При цьому для успішного розв’язання треба… уважно прочитати умову. Давайте розбиратися.
Подвоєння
https://basecamp.eolymp.com/uk/problems/6275
Подвоїти кожну цифру заданого тризначного числа.
Вхідні дані
Трицифрове ціле число.
Вихідні дані
Відповідь до задачі.
Приклади
Вхідні дані #1
123
Відповідь #1
112233
Здається, куди ж простіше? Але тоді незрозуміло чому такий низький кофеціцієнт прийняття.
Можливо, тому що автори задачі в тестах на початку понаставили пробілів. Бо ніхто ж нам не обіцяє, що число буде обов’язково «123». А якщо « 123». Якщо ми будемо розв’язувати задачу, сприймаючи вхідні дані як текст, то це важливо. Але ми можемо швидко обрізати всі пробіли, і на початку і на кінці: x = input().strip()
А далі, якщо знову-таки працюємо з текстовими даними, то можна, наприклад, так:
print(a[0] * 2 + a[1] * 2 + a[2] * 2)
Але задача здається лише на 60%. Що ж не так?
А якщо вхідними даними буде трицифрове число? Розв'яжемо, наприклад, так:
x = int(input())
x2, x3 = divmod(x, 10)
x1, x2 = divmod(x2, 10)
print(x1 * 100000 + x1 * 10000 + x2 * 1000 + x2 * 100 + x3 * 10 + x3)
І знову та сама проблема: задача приймається лише на 60%
Давайте хоч тут уважно прочитаємо умову )
Вхідні дані: трицифрове ціле число.
І тому просте питання: чи є число -123 трицифровим цілим числом?
Успіхів!
З дозволу розробника, Григорія Громка, на сайті «Плетиво» відкрито дзеркало ЄPython — одного з самих зручних інструментів для вивчення мови програмування Python. На ЄPython можна перейти за посиланням yepython.pletyvo.in.ua або через меню сайту (розділ «програмування»)
Сьогодні, в день Великодня давайте визначимо дату цього свята в різні роки.
Цю не саму тривіальну задачу намагалися розв’язати різними способами. Наприклад, в музеї Равенського собору в Італії знаходиться календар визначення дат Великодня на 95 років (532–626):
Фото з Вікіпедії
Ще та проблема цю графіку розтлумачити. Мабуть, саме так у 1800 році подумав Карл Фрідріх Гаусс і записав алгоритм визначення дня Великодня математично, формулами, при чому за старим і новим стилем. Через шість років його студент Петер Пауль Тіттель виявив помилку в алгоритмі щодо параметра p. Гаусс виправив цю помилку та подякував студенту за допомогу. Ще через 64 роки професор Базельського університету Герман Кінкелін поясненив кожен крок даного алгоритму. Ця все відомі факти, Вікіпедія досить непогано описує неспокійне життя церковників та математиків.
Як на мене, визначити дату Великодня за формулами Гаусса — це досить проста задача для програмістів-початківців. Тут і ділення націло і залишок від ділення і розгалуження.
Беремо алгоритм і пробуємо. У мене вийшло так, якщо цікаво.
Успіхів!
(перша частина тут)
(друга частина тут)
Частина 3.
Вважаю, що для навчання дітей дуже корисною є проста і зрозуміла візуалізація, якщо це можливо. Тоді концепції стають зрозумілими, а замудрені означення спокійно ігноруються. Саме в напрямку візуалізації пропоную розглянути один з варіантів опрацювання теми «Вкладені цикли».
Привела киця чотири кошеняти. От вони на базарі, сидять в рядок, один біля одного, дивляться світ. Підходимо, питаємо дозволу. Гладимо першого, кажемо що він класний, гладимо другого, кажемо що він класний, ну і так всіх. Що це у нас? Цикл. Ну, нехай цикл. Скільки разів повторюється? Чотири ж, бо кошенят чотири! А що саме повторюємо? Погладити кошенятку і сказати що він класний. Що-що вчитель каже? Ітерації тіла циклу? Та нехай каже, воно незрозуміло, але дуже солідно, може йому так треба для зарплати. А нам головне — це щоб всіх чотирьох кошенят і погладити і похвалити.
А от вкладені цикли. Близькі родичи сферичного коня у вакуумі. Для певної кількості учнів це складна штука, але для тих, хто хоче розібратися, як на мене, є прекрасна і візуально зрозуміла штука — світлодіодна матриця.
Ось така:
Ну і дешевий котролер для неї, той самий що був вже описаний в попередніх частинах.
Тут і з координатами дуже легко можна розібратися. Бо визначив координати — пару кліків мишки — і на окремому електронному пристрої бачиш результат. В другій частині нашого циклу статей про це вже писалося.
І з циклами просто зрозуміти. Хочешь — запалюй світлодіоди по черзі, всі тридцять два, і буде тобі один запалений рядок. А як лінуєшся — то можна циклом. Ось так:
for (int x = 0; x <= 31; x++) {
matrix.drawPixel(x, 1, HIGH);
matrix.write();
}
А як всі рядки запалити по черзі? Можна вручну 256 штук запалити, а можна простіше, вкладеними циклами. А щоб гарніше було, то після запалення кожного ще й невеличку паузу робити:
for (int y = 0; y <= 7; y++) {
for (int x = 0; x <= 31; x++) {
matrix.drawPixel(x, y, HIGH);
matrix.write();
delay(30);
}
}
І тоді можна подивитися на результат. Ось:
А як можна не зліва-направо, а в зворотному напрямку? А не рядками, а стовбчиками?
Можна скачати архів, в якому проєкт-приклад зі всіма необхідними бібліотеками, і далі гратися, пробувати. Ось трохи вправ на цю тему:
Якщо хочете повторити, то успіхів! Бо недорого, нескладно і зрозуміло. А ще можна колись буде сказати якимсь дітям: «Да я ще в школі кодив контролери з матрицями в студії!». Воно, звичайно, буде незрозуміло, але дуже солідно.