Sudah terkenal, dalam bidang Matematika yang mempelajari ketidakterbatasan, bahwa produk Cartesian dari jumlah terbatas dari set yang dapat dihitung juga dapat dihitung .
Tugas Anda adalah menulis dua program untuk mengimplementasikan ini, satu untuk memetakan dari daftar ke integer, satu untuk memetakan dari integer ke daftar.
Fungsi Anda harus bijektif dan deterministik, artinya 1
akan selalu memetakan ke daftar tertentu, dan 2
akan selalu memetakan ke daftar tertentu lainnya, dll ...
Sebelumnya , kami memetakan bilangan bulat ke daftar yang hanya terdiri dari 0
dan 1
.
Namun, sekarang daftar akan terdiri dari angka-angka non-negatif.
Spesifikasi
- Program / fungsi, format input / output yang masuk akal.
- Apakah bilangan bulat yang dipetakan dimulai
1
atau dimulai0
adalah pilihan Anda, artinya0
tidak harus (tetapi mungkin) memetakan apa pun. - Array kosong
[]
harus dikodekan. - Input / output mungkin ada di pangkalan apa pun.
- Kode berbagi antara dua fungsi diizinkan .
Mencetak gol
Ini adalah kode-golf . Skor terendah menang.
Skor adalah jumlah panjang (dalam byte) dari dua program / fungsi.
code-golf
set-theory
Biarawati Bocor
sumber
sumber
N^inf -> N
?Jawaban:
Jelly ,
1816 byteDaftar ke bilangan bulat,
108 bytePeta daftar bilangan bulat non-negatif ke bilangan bulat positif. Cobalah online!
Integer ke daftar, 8 byte
Memetakan bilangan bulat positif ke daftar bilangan bulat non-negatif. Cobalah online!
Latar Belakang
Biarkan p 0 , p 1 , p 2 , ⋯ menjadi urutan bilangan prima dalam urutan menaik.
Untuk setiap daftar bilangan bulat non-negatif A: = [a 1 , ⋯, a n ] , kami memetakan A ke p 0 z (A) p 1 a 1 ⋯ p n a n , di mana z (A) adalah jumlah membuntuti nol dari A .
Membalik peta di atas dengan mudah. Untuk bilangan bulat positif k , kami memfaktorkannya secara unik sebagai produk dari kekuatan prima berturut-turut n = p 0 α 0 p 1 α 1 ⋯ p n α n , di mana α n > 0 , kemudian merekonstruksi daftar tersebut sebagai [α 1 , ⋯, α n ] , menambahkan α 0 nol.
Bagaimana itu bekerja
Daftar ke bilangan bulat
Integer ke daftar
Contoh output
Seratus bilangan bulat positif pertama memetakan ke daftar berikut.
sumber
Python 2, 88 byte
Demo:
Python 2, 130 byte
Berikut adalah solusi yang lebih "efisien" di mana bit-panjang output linear dalam bit-panjang input daripada eksponensial.
sumber
e
menjadi terbalik untukd
:e=lambda l,i=0:l!=d(i)and-~e(l,i+1)
.Python 2,
204202 byteBekerja dengan berulang kali menerapkan Z + x Z + <-> Z + bijection, didahului oleh panjang daftar.
sumber
e
adalah list to integer,d
adalah integer to list (encode / decode).Retina, 17 + 23 = 40 byte
Dari daftar ke integer:
Cobalah online!
Dari integer ke daftar:
Cobalah online!
Menggunakan Algoritma Kaseorg .
sumber