Kompresi diff [tertutup]

20

Untuk tantangan ini, Anda perlu mengompres diff. Perbedaan adalah beberapa data yang mewakili perbedaan antara dua string. Untuk tantangan ini, Anda perlu menyediakan satu atau lebih program yang dapat:

  1. Input Adan B, dan output diff,C
  2. Input Adan C, dan outputB
  3. Input Bdan C, dan outputA

Tujuannya adalah untuk membuat diff,, Csekecil mungkin. Dif dapat berupa apa saja: string, angka, gumpalan data. Kami hanya peduli tentang ukuran (jumlah byte).

Saya memiliki 50 kasus uji yang dapat ditemukan di Github . Setiap test case terdiri dari dua URL yang dipisahkan oleh spasi yang mengarah ke 2 file yang perlu Anda bedakan. (Kasus uji ini berasal dari profil Github anggota PPCG. Terima kasih semua!)

Ketiga tugas di atas akan memakan waktu kurang dari satu menit untuk berjalan di komputer yang cukup bertenaga (untuk setiap kasus uji).

Skor Anda sama dengan ukuran total (dalam byte) dari semua 50 perbedaan, lebih rendah lebih baik. Perbedaan hardcoding di program Anda tidak diizinkan (saya berhak mengubah kasus uji untuk mencegah hardcoding). Builtin yang menghasilkan diff (seperti diffutils) tidak diperbolehkan.

Nathan Merrill
sumber
4
Apa itu diff?
Conor O'Brien
Apa pun yang Anda inginkan, sungguh. Secara informal, ini adalah string yang mewakili perbedaan antara AdanB
Nathan Merrill
1
Lebih banyak tautan busuk: penomoran pasangan pasangan uji dengan indeks garis 1-basis; kedua pasang test case 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 semuanya 404. Di luar semua ini, saya berhasil mengambil setiap case lainnya.
H Walters
3
Saya menutup pertanyaan ini karena sebagian besar tidak terjawab dan banyak tautan lama yang saya gunakan sebagai kasus uji tidak lagi berfungsi. Jangan ragu untuk memperbarui pertanyaan dan buka kembali jika diinginkan.
Nathan Merrill
1
Selesai GIST adalah gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 File kedua adalah arsip yang diuodekan dari 40 pasang kasing yang tersisa.
Seth

Jawaban:

0

Apakah jawaban saya valid?

set f [open commits.txt]
while {![eof $f]} {scan [gets $f] %s\ %s a b; puts [string compare $a $b]}
close $f

dapat diuji di: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM

sergiol
sumber
1
Anda perlu menyediakan beberapa program (baik yang diffsetara maupun yang patchsetara). Jika string comparestring berbeda, itu melanggar aturan "tidak ada builtin". Jika hanya membandingkan string (seperti namanya), itu tidak meninggalkan informasi yang cukup untuk membuat kembali tambalan.
@ ais523: builtins Saya memahaminya sebagai perintah baris perintah. Saya tahu itu string comparetidak menghasilkan info untuk membuat halaman, tetapi tidak ada tempat di pertanyaan yang menanyakannya.
sergiol
Dari pertanyaan, "2. Input A dan C, dan output B". Ini adalah sesuatu yang tidak dapat dilakukan oleh program yang Anda kirim, dan sebenarnya tidak ada program yang dapat melakukannya (karena tidak memiliki informasi yang cukup).
@ ais523: Oke saya salah paham.
sergiol
@ ais523: Saya rasa pernyataan Anda tidak benar "sebenarnya tidak ada program yang bisa dilakukan". Jika C adalah perbedaan antara A dan B, maka diberikan C dan A, B dapat dihitung. Mungkin saya melewatkan poin Anda
Seth