Складіть нескінченний ланцюжок


16

Давайте визначимо клас функцій. Ці функції будуть відображати від натуральних чисел до натуральних чисел і повинні відповідати наступним вимогам:

  • Функція повинна бути Bijective, що означає, що кожне значення відображається на та відображається точно на одне значення.

  • Ви повинні бути в змозі перейти від будь-якого додатного цілого до будь-якого іншого додатного цілого за допомогою повторних застосувань функції або її зворотного.

Тепер напишіть якийсь код, який буде виконувати будь-яку одну функцію цього класу на його вході.

Це питання з тому відповіді будуть набиратись у байтах, при цьому менше байтів буде кращим.


1
Чи можете ви навести приклад?
Джек

1
@ Jack Sure, розглянемо функцію, яка відображає 1 -> 2, відображає будь-яке непарне число на це число мінус 2, а кожне парне число - на це число плюс 2.
Post Rock Garf Hunter

1
Не впевнений, що розумію. Чи буде f (x): = x + 1 функцією цього класу? У такому випадку, 1+звичайний lisp повинен зробити фокус тут.
MONODA43

2
@ MONODA43 Ця функція є біекцією при розгляді всіх цілих чисел. Але це запитання задає біекцію на додатні цілі числа. Ваша пропозиція не зможе отримати результат 1, оскільки немає позитивного x, для якого x + 1 = 1.
kasperd

1
@Cowsquack Ви повинні бути в змозі перейти від будь-якого додатного цілого до будь-якого іншого додатного цілого числа шляхом повторних застосувань функції або її зворотного. Ви не можете отримати від 1 до 2, застосувавши особу, незалежно від того, скільки разів ви повторите.
kasperd

Відповіді:



6

Пітон, 22 байти

lambda n:n+n%2*4-2or 1

Четні числа опускаються до попереднього парного числа, непарні числа піднімаються до наступного непарного числа, а відображення 2 -> 1 з'єднує ці два.


зачекайте ... так 6 може бути результатом 5 або 8? це недійсно?
Руйнуючий лимон

@DestructibleLemon Ні, просто замінений непарний з навіть у моєму поясненні.
orlp

5

JavaScript (ES6), 20 байт

n=>n>1?n%2?n-2:n+2:2

Карти ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., які я вважаю дійсними. Виправте мене, якщо я помиляюся ...


9
Подібні уми чудово думають. Я використовую зворотний.
Денніс

@Dennis Heh, і я щойно зрозумів, що обернено на 1 байт коротше:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennis Ви підтвердили, що ви є Yoda: o ( повідомлення в чаті
StepHen

@HyperNeutrino Чудово схожі думки
Павло


4

Желе , 6 байт

-*Ḥạo1

Спробуйте в Інтернеті!

Як це працює

-*Ḥạo1  Main link. Argument: n

-*      Compute (-1)**n, yielding 1 for even n and -1 for odd n.
  Ḥ     Unhalve; multipliy the result by 2.
   ạ    Compute the absolute difference of the result and n.
    o1  If the difference is 0, yield 1.

13
Невже ми не даємо Деннісу втекти «нехолодно»? Ха-ха.
orlp

2

Python 3, 43 байти

lambda n,a=(1,3,-3,-1):n+a[n%4]if n-2else 1

Спробуйте в Інтернеті!

І зворотне, також 43 байти:

lambda n,a=(-3,-1,1,3):n+a[n%4]if n-1else 2

Спробуйте в Інтернеті!

Посилання TIO використовують код тесту нижнього колонтитулу Денніса.

Оскільки всі використовують один спосіб роботи, я вирішив, що я буду іншим, тому створив власну (хоча я, мабуть, не перша людина, яка це відкрила). Це такі функції, як карти ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., я можу показати вам малюнок, який я зробив, щоб перевірити це, якщо хочете.

Мій алгоритм гольфу може бути, мабуть, зіграним - поради будуть вдячні.

Невикористані версії: Спробуйте онлайн!



0

Математика, 21 байт

a@1=2;a@b_:=b+2(-1)^b

Рухайтеся далі, тут нічого не бачити ...


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.