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.


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:



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.


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 ...


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


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.

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!



0

Mathematica, 21 byte

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

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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.