pengantar
Menurut definisi, pengidentifikasi unik harus unik. Memiliki banyak pengidentifikasi yang sama menyebabkan seseorang untuk mengambil data yang tidak terduga. Tetapi dengan data yang tiba secara bersamaan dari berbagai sumber, mungkin sulit untuk memastikan keunikannya. Tulis fungsi yang menyatukan daftar pengidentifikasi.
Ini mungkin teka-teki terburuk yang pernah saya tulis, tetapi Anda mengerti.
Persyaratan
Diberikan daftar nol atau lebih bilangan bulat positif, terapkan aturan berikut untuk setiap angka dari pertama hingga terakhir:
- Jika nomor tersebut adalah yang pertama dari jenisnya, pertahankan.
- Jika nomor sebelumnya telah ditemukan, gantilah dengan bilangan bulat positif terendah yang tidak ditemukan di seluruh daftar input atau output yang ada.
Untuk solusinya:
- Solusinya dapat berupa program atau fungsi.
- Input dapat berupa string, array, diteruskan sebagai argumen, atau input keyboard.
- Outputnya bisa berupa string, array, atau dicetak ke layar.
- Semua angka dalam daftar keluaran berbeda.
Asumsi
- Daftar input bersih. Ini hanya berisi bilangan bulat positif.
- Bilangan bulat positif memiliki rentang 1 hingga 2 31 -1.
- Memori kurang dari 256 MB tersedia untuk variabel program Anda. (Pada dasarnya, tidak ada array elemen 2.147.483.648 diizinkan.)
Uji Kasus
Input: empty
Output: empty
Input: 5
Output: 5
Input: 1, 4, 2, 5, 3, 6
Output: 1, 4, 2, 5, 3, 6
Input: 3, 3, 3, 3, 3, 3
Output: 3, 1, 2, 4, 5, 6
Input: 6, 6, 4, 4, 2, 2
Output: 6, 1, 4, 3, 2, 5
Input: 2147483647, 2, 2147483647, 2
Output: 2147483647, 2, 1, 3
Mencetak gol
Hanya golf kode sederhana. Hitungan byte terendah saat ini menang minggu depan.
code-golf
set-theory
Makanan Tangan
sumber
sumber
6, 6, 1, 2, 3, 4, 5
→6, 7, 1, 2, 3, 4, 5
6, 6, ...
memberi6, 1, ...
?6, 6, 4, 4, 2, 2
uji mengkonfirmasi interpretasi Adám: output yang diharapkan adalah6, 1, 4, 3, 2, 5
, dan tidak6, 1, 4, 2, 3, 5
.Jawaban:
Brachylog , 8 byte
Cobalah online!
Penjelasan
sumber
Java 8,
158144 byte.contains(m+c);m++)
untuk.contains(++m+c);)
menyimpan 1 byte, dan secara bersamaan dikonversi ke Java 8 untuk menghemat 13 byte lagi.Penjelasan:
Coba di sini.
sumber
JavaScript (ES6), 49 byte
sumber
Ruby , 63 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
171618 byteCobalah online!
Penjelasan
sumber
6, 6, 1, 2, 3, 4, 5
.[6, '1', '2', '3', '4', '5', '7']
. Harus memberi[6, '7', '1', '2', '3', '4', '5']
.PHP, 121 Bytes
Versi Online
Diperluas
sumber
Python 2,
7779 byteMengambil input keyboard, misalnya
[3, 3, 3, 3, 3, 3]
.Catat bilangan bulat positif terkecil yang
j
tidak digunakan sejauh ini. Untuk setiap elemenx
input, outputx
jikax
belum pernah digunakan, jika tidak outputj
. Akhirnya, perbaruij
setiap kali Anda mengeluarkan sesuatu.Diedit: untuk memperbaiki input penanganan kesalahan dari
[6, 6, 4, 4, 2, 2]
. Terima kasih kepada @Rod untuk menunjukkan kesalahan serta perbaikannya. Kesalahannya adalah, dalam hal entri duplikat, itu akan menghasilkan angka terkecil yang tidak digunakan ke titik itu dalam daftar, bahkan jika output itu muncul kemudian di input. (Ini salah, seperti yang diklarifikasi dalam posting dan komentar, tapi saya masih mengacaukannya entah bagaimana.) Lagi pula, perbaikannya adalah dengan hanya menambahkan daftar inputa
,, ke set nilai-nilai yang tidak bisa menjadi output dalam kasus itu.sumber
[6,6,4,4,2,2]
, Anda dapat (mungkin) memperbaikinya dengan menambahkan+a
kewhile j in u:
->while j in u+a:
Haskell ,
7976 byteEDIT:
head
bisa diganti dengan pencocokan pola.([]#)
adalah fungsi anonim untuk mengambil dan mengembalikan daftar. Gunakan like([]#)[2147483647, 2, 2147483647, 2]
.Cobalah online!
Bagaimana itu bekerja
?
adalah operator yang disingkat untuk memeriksa apakah suatu elemen tidak ada dalam daftar.s#l
menangani daftar bilangan bulatl
, mengingat daftars
bilangan bulat yang sudah digunakan.x
adalah bilangan bulat berikutnya untuk dilihat,y
yang tersisa.z
adalah bilangan bulat yang dipilih untuk tempat berikutnya. Inix
jikax
bukan merupakan elemen daris
, dan bilangan bulat positif pertama tidak dalams
atauy
tidak sebaliknya(z:s)#y
kemudian berulang denganz
ditambahkan ke daftar integer yang digunakan.n
adalah daftar kosong, karena daftar kosong telah ditangani di baris sebelumnya.([]#)
mengambil daftar, dan memanggilnya#
sebagai argumen kedua, dan daftar kosong untuk argumen pertama.sumber
|z:_<-[x|...]...
APL (Dyalog 16.0), 34 byte
sumber
Pyth ,
2120 byteSuite uji
Saya akan menambahkan penjelasan ketika saya punya waktu.
sumber
C # , 135 byte
Golf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
135 bytes
- Solusi awal.Catatan
sumber
Python 2 , 101 byte
Cobalah online! atau Coba semua test case
sumber
R , 39
46byteMembuat vektor dari input, lalu menggantikan nilai yang digandakan dengan rentang dari 1 hingga satu juta yang memiliki nilai input dihapus. Mengembalikan vektor numerik. Tidak ada input yang akan mengembalikan angka vektor kosong (0).
Cobalah online!
Ini akan memberikan peringatan tentang panjang vektor pengganti
sumber
C,
169 byte133 byteinput = array a, output = array yang dimodifikasi a
diformat
Terlalu banyak byte yang terbuang untuk loop ini. Adakah yang berpikir untuk mempersingkat kode dengan menciptakan algoritma baru (yang menggunakan lebih sedikit loop)? Saya sedang berpikir tetapi belum menemukannya.
sumber
C # 7, 116 byte
Bertakuk
Dijelaskan
[1, 2, 3, ...]
, melewatkan nilai yang ada di input.Versi Online
sumber
Clojure, 72 byte
Pengurangan dasar. Jika
i
terkandung dalam daftar output sejauh ini, kami akan mengambil elemen ke-2 (1 ketika 0-diindeks) dari daftar bilangan bulat tak terbatas(range)
dari mana kami telah menghapus angka-angka yang telah digunakan. Rentang dimulai dari nol sehingga kami tidak dapat mengambil elemen pertama selain elemen kedua.sumber
R, 74 byte
membaca daftar dari stdin; mengembalikan NULL untuk input kosong.
penjelasan:
1:length(n)
dapat digunakan karena kami dijamin tidak akan pernah membutuhkan pengganti dari luar kisaran itu.Cobalah online!
sumber
Aksioma, 169 byte
ungolf dan hasilnya
sumber