Buat rantai yang tak terbatas

16

Mari kita mendefinisikan kelas fungsi. Fungsi-fungsi ini akan memetakan dari bilangan bulat positif ke bilangan bulat positif dan harus memenuhi persyaratan berikut:

  • Fungsi harus Bijective, artinya setiap nilai dipetakan dan dipetakan dengan tepat satu nilai.

  • Anda harus bisa mendapatkan dari bilangan bulat positif ke bilangan bulat positif lainnya dengan aplikasi fungsi berulang atau kebalikannya.

Sekarang, tulis beberapa kode yang akan melakukan salah satu fungsi di kelas ini pada inputnya.

Ini adalah pertanyaan sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte lebih baik.

Posting Rock Garf Hunter
sumber
1
Bisakah Anda memberi contoh?
Jack
1
@Jack Sure, Pertimbangkan fungsi yang memetakan 1 -> 2, memetakan setiap nomor ganjil lainnya ke angka tersebut minus 2, dan setiap angka genap ke angka tersebut ditambah 2.
Posting Rock Garf Hunter
1
Tidak yakin saya mengerti. Apakah f (x): = x + 1 menjadi fungsi dari kelas ini? Dalam hal ini, 1+secara umum lump harus melakukan trik di sini.
MONODA43
2
@ MONODA43 Fungsi itu adalah bijection ketika mempertimbangkan semua bilangan bulat. Tetapi pertanyaan ini menanyakan tentang bilangan bulat positif. Saran Anda akan gagal menghasilkan 1 karena tidak ada x positif yang x + 1 = 1.
kasperd
1
@ Cowsquack Anda harus bisa mendapatkan dari bilangan bulat positif ke bilangan bulat positif lainnya dengan aplikasi fungsi berulang atau kebalikannya. Anda tidak bisa mendapatkan dari 1 hingga 2 dengan menerapkan identitas, tidak peduli berapa kali Anda ulangi.
kasperd

Jawaban:

10

Python 3 , 24 byte

lambda n:n-(-1)**n*2or 1

Cobalah online!

Dennis
sumber
Ha, Anda ninja saya karena saya mengambil 20 detik ekstra untuk menulis urutan saya sebelum memposting ...
ETHproductions
6

Python, 22 byte

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

Angka genap turun ke angka genap sebelumnya, angka ganjil naik ke angka ganjil berikutnya, dan pemetaan 2 -> 1 menghubungkan keduanya.

orlp
sumber
tunggu ... jadi 6 dapat dihasilkan dari 5 atau 8? itu tidak valid?
Destructible Lemon
@DestructibleLemon Tidak, hanya diganti aneh dengan bahkan dalam penjelasan saya.
orlp
5

JavaScript (ES6), 20 byte

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

Peta ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., yang menurut saya valid. Koreksi saya jika saya salah ...

Produksi ETH
sumber
9
Pikiran yang sama berpikir hebat. Saya menggunakan kebalikannya.
Dennis
@ Dennis Heh, dan saya baru saja menyadari bahwa kebalikannya adalah 1 byte lebih pendek:n=>n%2?n+2:n-2||1:2
ETHproductions
@Dennis Anda telah dikonfirmasi sebagai Yoda: o ( pos obrolan
StepHen
@HyperNeutrino Sangat, pikiran yang sama berpikir
Pavel
5

Haskell, 20 byte

f 1=2
f x=x+2*(-1)^x

Contoh fungsi dari komentar OP di Haskell. Cobalah online!

nimi
sumber
4

Jelly , 6 byte

-*Ḥạo1

Cobalah online!

Bagaimana itu bekerja

-*Ḥạ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.
Dennis
sumber
13
Apakah kita benar-benar membiarkan Dennis lolos dengan 'tidak bernapas'? Ha ha.
orlp
2

Python 3, 43 byte

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

Cobalah online!

Dan kebalikannya, juga 43 byte:

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

Cobalah online!

TIO tautan menggunakan kode catatan kaki Dennis.

Karena semua orang menggunakan satu cara melakukan, saya memutuskan saya akan berbeda, jadi saya buat sendiri (walaupun saya mungkin bukan orang pertama yang menemukannya) berfungsi. Fungsi ini memetakan seperti... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ... , saya dapat menunjukkan kepada Anda gambar tangan yang saya buat untuk menguji ini jika Anda mau.

Algoritme golf saya mungkin mungkin golfable - tips akan dihargai.

Versi tidak dikoleksi: Cobalah online!

Stephen
sumber
0

Mathematica, 21 byte

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

Bergeraklah, tidak ada yang bisa dilihat di sini ...

LegionMammal978
sumber