Sonsuz bir zincir yapın


16

Bir işlev sınıfı tanımlayalım. Bu işlevler pozitif tamsayılardan pozitif tamsayılara eşleşir ve aşağıdaki gereksinimleri karşılamalıdır:

  • İşlev Bijective olmalıdır, yani her değer tam olarak bir değerle eşlenir ve eşlenir.

  • Herhangi bir pozitif tamsayıdan fonksiyonun tekrarlanan uygulamaları veya tersi ile herhangi bir pozitif tamsayıya ulaşabilmeniz gerekir.

Şimdi, girişinde bu sınıftaki herhangi bir işlevi gerçekleştirecek bir kod yazın.

Bu bir sorusudur, bu nedenle cevaplar bayt cinsinden puanlandırılacak, daha az bayt daha iyi olacaktır.


1
Bir örnek verebilir misin?
Jack

1
@Jack Sure, 1 -> 2'yi eşleyen, diğer tek sayıları bu sayı eksi 2'ye ve çift sayıları bu sayı artı 2'ye eşleyen işlevi düşünün.
Post Rock Garf Hunter

1
Anladığımdan emin değilim. F (x): = x + 1 bu sınıfın bir işlevi olabilir mi? Bu durumda, 1+ortak lisp burada hile yapmalıdır.
MONODA43

2
@ MONODA43 Tüm tamsayılar dikkate alındığında bu işlev bir bijection işlevidir. Ancak bu soru, pozitif tamsayılar üzerinde bir karar istemektedir. X + 1 = 1 olan pozitif x olmadığı için öneriniz 1 çıktısını alamaz.
kasperd

1
@Cowsquack İşlevin tekrarlanan uygulamaları veya tersi ile herhangi bir pozitif tamsayıdan başka bir pozitif tamsayıya ulaşabilmeniz gerekir. Kaç kez tekrarlasanız da, kimliği uygulayarak 1'den 2'ye ulaşamazsınız.
kasperd

Yanıtlar:



6

Python, 22 bayt

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

Çift sayılar önceki çift sayıya, tek sayılar sonraki tek sayıya gider ve 2 -> 1 eşlemesi bu ikisini birbirine bağlar.


bekleyin ... yani 6 5 veya 8'den kaynaklanabilir mi? bu geçersiz mi?
Yıkılabilir Limon

@DestructibleLemon Hayır, açıklamamda bile değiştirilen tek sayı.
orlp

5

JavaScript (ES6), 20 bayt

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

Haritalar ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ...ben düşünüyorum geçerlidir. Yanlışsam düzelt...


9
Benzer akıllar harika düşünür. Tersini kullanıyorum.
Dennis

@Dennis Heh, ve ben sadece tersinin 1 bayt daha kısa olduğunu fark ettim:n=>n%2?n+2:n-2||1:2
ETHproductions 23:17

@Dennis Yoda olduğunuzu onayladınız: o ( StepHen'in sohbet mesajı )
HyperNeutrino

@HyperNeutrino Büyük ölçüde, aynı
Pavel


4

Jöle , 6 bayt

-*Ḥạo1

Çevrimiçi deneyin!

Nasıl çalışır

-*Ḥạ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
Gerçekten Dennis'in 'unhalve' ile kaçmasına izin veriyor muyuz? Haha.
orlp

2

Python 3, 43 bayt

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

Çevrimiçi deneyin!

Ve tersi, ayrıca 43 bayt:

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

Çevrimiçi deneyin!

TIO bağlantıları Dennis'in test altbilgisi kodunu kullanır.

Herkes bunu yapmanın tek bir yolunu kullandığından, farklı olacağımıza karar verdim, bu yüzden kendi başıma yarattım (muhtemelen onu ilk keşfeden kişi olmamasına rağmen). Bu gibi haritalar ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., isterseniz bunu test etmek için yaptığım el çizimini gösterebilirim.

Benim golfed algoritma olabilir muhtemelen golfable olduğunu - ipucu mutluluk duyacağız.

Ungolfed versiyonları: Çevrimiçi deneyin!



0

Mathematica, 21 bayt

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

Yürü, burada görülecek bir şey yok ...


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.