Сделать бесконечную цепь


16

Давайте определим класс функций. Эти функции будут отображаться из положительных целых чисел в положительные целые и должны удовлетворять следующим требованиям:

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

  • Вы должны быть в состоянии получить от любого положительного целого до любого другого положительного целого числа путем повторного применения функции или ее обратного.

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

Это вопрос поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.


1
Можете привести пример?
Джек,

1
@Jack Конечно, рассмотрим функцию, которая отображает 1 -> 2, отображает каждое другое нечетное число на это число минус 2, а каждое четное число - на это число плюс 2.
Post Rock

1
Не уверен, что понимаю. Будет ли функция f (x): = x + 1 функцией этого класса? В этом случае, 1+в общем, lisp должен помочь.
MONODA43

2
@ MONODA43 Эта функция является биекцией при рассмотрении всех целых чисел. Но этот вопрос требует биекции на натуральные числа. Ваше предложение не будет выводить 1, потому что нет положительного x, для которого x + 1 = 1.
Касперд

1
@Cowsquack Вы должны быть в состоянии получить от любого положительного целого до любого другого положительного целого числа путем многократного применения функции или ее обратного. Вы не можете получить от 1 до 2, применяя удостоверение личности, независимо от того, сколько раз вы повторяете.
Касперд

Ответы:



6

Python, 22 байта

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

Четные числа уменьшаются до предыдущего четного числа, нечетные числа повышаются до следующего нечетного числа, и отображение 2 -> 1 соединяет эти два.


подожди ... итак 6 может получиться из 5 или 8? это неверно?
Разрушаемый Лимон

@DestructibleLemon Нет, просто нечетное с четным в моем объяснении.
17

5

JavaScript (ES6), 20 байт

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

Карты ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., которые я считаю действительными. Поправьте меня если я ошибаюсь...


9
Как и умы, мыслят великолепно. Я использую обратное.
Деннис

@ Денис Хех, и я только что понял, что обратное на 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
Мы действительно позволяем Деннису уйти с «unhalve»? Ха - ха.
17

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 -> ... , я могу показать вам чертеж руки, который я сделал, чтобы проверить это, если хотите.

Мой алгоритм игры в гольф может быть, вероятно, пригоден для игры в гольф - советы будут оценены

Беззвучные версии: попробуйте онлайн!




Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.