Для цього завдання потрібно реалізувати дві функції, f і g , на цілі числа, таким чином, що f is g є строго зменшується функцією, тоді як g ∘ f - функція, що суворо зростає. Іншими словами, якщо взяти будь-які два цілі числа a <b , тоді f (g (a))> f (g (b)) і g (f (a)) <g (f (b)) . Немає обмежень на f і g окремо, за винятком того, що вони повинні відображати одне ціле число на інше ціле число.
Додайте короткий опис f і g та аргумент того, чому вони мають необхідну властивість.
Кредит: Цей виклик був натхнений проблемою на змаганнях з магістра математики в Румунії 2011 року (який задає те саме, але на реальні числа, а не на цілі числа). Якщо ви дійсно хочете спойлерів, тепер знаєте, що шукати.
Правила
Слово "функція" в цьому виклику слід сприймати в математичному сенсі відображення одного цілого числа на інше: ви можете або написати дві програми, або дві функції, і використовувати будь-який із стандартних методів отримання вводу та надання виводу, як зазвичай. Ви можете використовувати рядкові представлення цілих чисел замість фактичних цілих змінних, але типи введення та виведення повинні бути однаковими, щоб функції могли складатися без перетворення вручну типів між ними. Пам'ятайте, що концептуально f і g все ще повинні бути функціями на ℤ, тому ви не можете обманювати, використовуючи два різних рядкових представлення одного і того ж числа або щось подібне.
Пам'ятайте, що функції можуть бути безіменними , якщо їх ім'я не потрібне саме для себе або іншої функції, яку ви визначаєте. Якщо ви назвете одну або обидві функції, ви можете припустити, що вони існують в одній програмі, щоб вони могли посилатися один на одного при їх реалізації (наприклад,
def f(x): return -g(x)
в Python).Застосовуються звичайні правила переповнення цілих чисел: ваше рішення повинне бути здатне працювати для довільно великих цілих чисел у гіпотетичній (або, можливо, реальній) версії вашої мови, в якій всі цілі числа за замовчуванням не пов'язані, але якщо ваша програма не працює на практиці через впровадження не підтримуючи великі цілі числа, це не може визнати недійсним рішення.
Ви можете використовувати будь-яку мову програмування , але зауважте, що ці лазівки за замовчуванням заборонені.
Це код-гольф , тому ваш рахунок - це кількість байтів обох функцій і виграє найкоротший дійсний відповідь.