Faire une chaîne infinie


16

Permet de définir une classe de fonctions. Ces fonctions seront mappées des entiers positifs aux entiers positifs et doivent satisfaire aux exigences suivantes:

  • La fonction doit être bijective, ce qui signifie que chaque valeur correspond à et est mappée à exactement une valeur.

  • Vous devez pouvoir passer de n'importe quel entier positif à tout autre entier positif par des applications répétées de la fonction ou de son inverse.

Maintenant, écrivez du code qui exécutera n'importe quelle fonction de cette classe sur son entrée.

Il s'agit d'une question de donc les réponses seront notées en octets, avec moins d'octets étant mieux.


1
Pouvez-vous donner un exemple?
Jack

1
@Jack Bien sûr, considérez la fonction qui mappe 1 -> 2, mappe tous les autres nombres impairs à ce nombre moins 2, et chaque nombre pair à ce nombre plus 2.
Post Rock Garf Hunter

1
Pas sûr que je comprenne. Est-ce que f (x): = x + 1 serait une fonction de cette classe? Dans ce cas, 1+le lisp commun devrait faire l'affaire ici.
MONODA43

2
@ MONODA43 Cette fonction est une bijection lorsque l'on considère tous les entiers. Mais cette question demande une bijection sur les entiers positifs. Votre suggestion échouerait à la sortie 1 car il n'y a pas de x positif pour lequel x + 1 = 1.
kasperd

1
@Cowsquack Vous devez pouvoir passer de n'importe quel entier positif à tout autre entier positif par des applications répétées de la fonction ou de son inverse. Vous ne pouvez pas passer de 1 à 2 en appliquant l'identité, peu importe le nombre de répétitions.
kasperd

Réponses:



6

Python, 22 octets

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

Les nombres pairs descendent jusqu'au numéro pair précédent, les nombres impairs remontent au numéro impair suivant et le mappage 2 -> 1 relie ces deux.


attendez ... donc 6 peut résulter de 5 ou 8? c'est invalide?
Lemon destructible

@DestructibleLemon Non, juste une impaire remplacée même dans mon explication.
orlp

5

JavaScript (ES6), 20 octets

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

Cartes ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., qui je pense est valide. Corrige moi si je me trompe...


9
Les esprits semblables pensent bien. J'utilise l'inverse.
Dennis

@ Dennis Heh, et je viens de réaliser que l'inverse est plus court d'un octet:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennis Vous avez été confirmé comme étant Yoda: o ( message de discussion de StepHen )
HyperNeutrino

@HyperNeutrino Très bien, les esprits pensent de la même façon
Pavel


4

Gelée , 6 octets

-*Ḥạo1

Essayez-le en ligne!

Comment ça fonctionne

-*Ḥạ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
Laissons-nous vraiment Dennis s'en tirer avec «unhalve»? Haha.
orlp

2

Python 3, 43 octets

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

Essayez-le en ligne!

Et l'inverse, également 43 octets:

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

Essayez-le en ligne!

Les liens TIO utilisent le code de bas de page de test de Dennis.

Puisque tout le monde utilise une façon de faire, j'ai décidé que je serais différent, alors j'ai créé ma propre fonction (bien que je ne sois probablement pas la première à la découvrir). Cette fonction fonctionne comme ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., je peux vous montrer le dessin à la main que j'ai fait pour tester cela si vous le souhaitez.

Mon algorithme de golf peut être probablement golfable - des conseils seraient appréciés.

Versions non golfées: essayez-le en ligne!




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.