Terkait, tetapi ini hanya membutuhkan bilangan bulat positif dan tidak harus komutatif
Fungsi Penyandingan Cantor dijelaskan dalam artikel Wikipedia ini . Pada dasarnya, ini adalah operasi sehingga ketika diterapkan pada dua nilai X dan Y, seseorang dapat memperoleh nilai asli X dan Y yang memberikan hasilnya.
Tugas Anda adalah merancang dua fungsi: satu yang berkinerja X, Y -> Z
dan yang lain berkinerja Z -> X, Y
. Inilah tujuannya: X, Y -> Z
harus komutatif. Ini berarti bahwa Z -> X, Y
tidak akan dapat menentukan apakah input itu X, Y
atau Y, X
.
Definisi formal dari tantangan ini adalah:
Pilih satu set S angka yang tak terhingga jumlahnya.
Desain dua fungsi yang melakukan tugas-tugas berikut:
- Dengan pasangan nilai yang tidak teratur dalam S, kembalikan nilai dalam S
- Diberi nilai pengembalian dari fungsi awal, kembalikan pasangan nilai yang tidak berurutan yang mengevaluasi ke integer input ketika melewati fungsi pertama. Saya tidak peduli tentang perilaku fungsi terbalik ini jika input bukan nilai balik dari fungsi pertama.
Persyaratan
- Hasilnya harus identik antara berjalan.
{a, a}
adalah pasangan yang tidak teratur
Catatan: jawaban Anda lebih mungkin untuk mendapatkan upvote dari saya jika Anda memberikan bukti, tetapi saya akan menguji jawaban ketika saya sampai dan menaikannya setelah saya cukup yakin itu berhasil.
1,2
salah satu pasangan,1,3
juga bisa menjadi pasangan potensial (keduanya digunakan1
)?f
dan kebalikannyag
,sorted((x, y))
harus sama dengansorted(g(f(x, y)))
Jawaban:
Haskell , 65 + 30 = 95 byte
Cobalah online!
Cobalah online!
Catatan: Ketika dua fungsi dapat berbagi kode, ini hanya 75 byte:
Cobalah online! Domain adalah bilangan bulat positif. Fungsi
(#)
melakukan pemasangan, fungsi(l!!)
terbalik. Contoh penggunaan: Keduanya(#) 5 3
dan(#) 3 5
hasil12
, dan(l!!) 12
hasil(5,3)
.Ini berfungsi dengan mencantumkan secara eksplisit semua pasangan yang disortir dalam daftar tak terbatas
l
:Pengodean kemudian hanya indeks dalam daftar ini.
sumber
Pyth , 8 + 6 = 14 byte
Cobalah online!
Cobalah online!
Domain: Bilangan bulat positif.
sumber
2
dan10
misalnya (yang ada di domain)Jelly , 8 + 11 = 19 byte
Digulung mundur karena algoritma Rod tidak berfungsi.
Ini berfungsi pada domain bilangan bulat positif.
Membawa
x
dany
sebagai 2 argumen, tidak masalah di urutan mana, kembaliz
.Cobalah online!
Mengambil
z
dan mengembalikan[min(x, y), max(x, y)]
Cobalah online!
sumber
JavaScript (ES7), 44 byte
Peta dari bilangan bulat non-negatif ke subset daripadanya.
sumber
C (gcc) , 36 + 39 = 75 byte
Terima kasih kepada @tsh karena telah menyimpan dua byte.
Domain adalah bilangan bulat non-negatif.
Dibutuhkan
x
dany
, mengembalikanz
.Membawa dua elemen
int
array . Elemen kedua harus diaturz
sebelum panggilan. Setelah panggilanr
berisix
dany
.Cobalah online!
sumber
(x+1)
->-~x
Jeli ,
1311 bytesepasang bilangan bulat positif ke bilangan bulat positif, 5 byte
Cobalah online!
bilangan bulat positif untuk memasangkan bilangan bulat positif, 6 byte
Cobalah online!
Algoritma
Jika kita mengurutkan set semua pasangan bilangan bulat positif tidak berurut dengan jumlah maksimum dan jumlah mereka, kita mendapatkan urutan berikut.
{1,1}, {1,2}, {2,2}, {1,3}, {2,3}, {3,3}, {1,4}, {2,4}, {3 , 4}, {4,4}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}, ...
Fungsi pertama mengambil pasangan {x, y} dan menemukan indeksnya dalam urutan ini.
Fungsi kedua mengambil bilangan bulat positif z dan mengembalikan item ke- z dari urutan.
Perhatikan bahwa pemetaan ini sama dengan jawaban Jelly @ EriktheOutgolfer .
Bagaimana itu bekerja
sumber
c
danŒċ
... meskipun saya mungkin salah. Btw itu jawaban saya bahwa Anda mengungguli> _>Mathematica (35 + 53) = 78 Bytes
Ini adalah salah satu fungsi pairing kuadratik yang diketahui untuk Z <--> ZxZ yang dikombinasikan dengan Min dan Max untuk membuatnya tidak teratur.
sumber
Ruby, 66 byte
Saya mencoba menemukan cara untuk secara cerdik memilih satu set infinite untuk mempermudah ini, ini adalah yang terbaik yang saya dapatkan sejauh ini.
Kami mendefinisikan f (x, y) = 2 x-1 bitwise-atau 2 y-1 . Domain terdiri dari himpunan yang didefinisikan secara rekursif sebagai berisi 1,2, dan semua angka yang dapat dihasilkan dengan memanggil f pada angka-angka dalam himpunan (perhatikan bahwa f (1,1) = 1 dan f (2,2) = 2, jadi 1 dan 2 memiliki invers). Angka-angka yang dihasilkan semuanya memiliki satu atau dua 1s dalam ekspansi biner mereka, dengan indeks 1s yang sesuai dengan angka dalam set. Kita bisa mengeluarkan pasangan yang tidak terurut asli dengan mengambil indeks. Jika hanya ada satu 1, itu berarti elemen pasangan sama.
Sebagai contoh, f (3,5) adalah 20, karena 20 adalah 10100 di basis 2, yang memiliki 1 di tempat ke-3 dan ke-5 paling signifikan.
sumber
Java 8,
153146141137 +268224216205 byteFungsi berpasangan
Cobalah online!
Fungsi depair
Cobalah online!
sumber
int i=(""+a[0]).length()
bisaint i=(f+a[0]).length()
; ruang antarac=0,j;i>0;
bisa dihilangkan;a[0].parseInt
bisanew Integer
. Dalam fungsi depair: ketiganyar.parseInt
bisar.decode
; dan Anda bisa membuat variabel int untukt.length()
, karena Anda menggunakannya dua kali.05AB1E , 6 + 11 = 17 byte
Port jawaban Jelly-ku.
Domain: bilangan bulat positif.
Mengambil daftar
[x, y]
sebagai input, mengembalikanz
.Cobalah online!
Mengambil bilangan bulat positif
z
sebagai input, mengembalikan[min(x, y), max(x, y)]
.Cobalah online!
-5 Terima kasih kepada Emigna .
sumber
2ã€{RÙR
!JavaScript, 72 byte
Berfungsi untuk bilangan bulat positif (dalam teori). Gagasan yang cukup sederhana: urutkan dua angka dalam beberapa urutan (ajaib), hubungkan sebagai string dengan huruf
"a"
, parsing sebagai hex integer.Tampilkan cuplikan kode
sumber
MATL, 6 + 8 = 14 byte
Fungsi encoding, membutuhkan dua input n, m. Output produk dari nth prime dan mth prime.
Langkah:
,
- Lakukan dua kalii
- Masukan pushYq
- Input pop, tekan input'th prima]*
- Akhiri lakukan dua kali, pop prima dan dorong produkFungsi decoding, membutuhkan satu input m. Menghasilkan jumlah bilangan prima di bawah masing-masing faktor utama n.
Langkah:
i
- Masukan pushYf
- Input pop, push array faktor prima"
- Untuk n dalam array@Zq
- Dorong array bilangan prima di bawah ini nn
- Pop array, dorong panjang arrayIni komutatif karena perkalian adalah komutatif, dan injeksi karena faktorisasi prima yang unik. Bukan berarti ini bukan ke bilangan bulat.
sumber
Sekam , 5 + 3 = 8 byte
Saya benar-benar berharap saya mendapat tantangan dengan benar, saya melihat beberapa jawaban yang dihapus yang tampaknya valid untuk saya ...
Pasangan bilangan bulat positif ke bilangan bulat positif tunggal:
Cobalah online!
Ini bekerja dengan mengambil angka pada indeks yang diberikan (1-diindeks) dari daftar bilangan prima, dan mengalikannya.
Hasil dari fungsi pertama untuk pasangan bilangan bulat positif:
Cobalah online!
Kami memfaktisasi jumlah input dan mengembalikan indeks dalam daftar bilangan prima dari semua (kedua) faktornya.
Contoh yang berhasil
Diberikan
(4,1)
sebagai pasangan pemula, kami mengambil bilangan prima keempat dan pertama(7,2)
dan mengalikannya →14
. Penggandaan inilah yang membuat fungsi tidak tergantung pada urutan dua elemen.Mulai dari
14
, kami memfaktorkannya(2,7)
dan mengembalikan indeks2
dan7
dalam daftar bilangan prima →(1,4)
.sumber
C # , 80 byte (38 + 42)
Data
Encoder
Int32
l
nomor AInt32
r
nomor AInt64
Kedua int menyatu bersamaDekoder
Int32
v
nilaiInt32[]
Array dengan dua int asli.Golf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
80 bytes
- Solusi awal.Catatan
sumber
Python: 41 + 45 = 86
encoder: 41
decoder: 45
Upaya yang lebih lama:
Python: 114: 30 + 84
encoder: 30
menerima 2 bilangan bulat, mengembalikan string
decoder: 86
decoder2: 120
upaya lain dengan pemahaman dan penjumlahan generator
sumber
e=lambda*x:10**sum(x)-10**min(x);d=lambda z:map(
z.count,'09')
;TIO