Стиснення різниці [закрито]


20

Для цього завдання вам потрібно стиснути розл. Відмінністю є деякі дані, які представляють різницю між двома рядками. Для цього завдання потрібно надати одну або кілька програм, які можуть:

  1. Введіть Aта Bвиведіть різну,C
  2. Вхід Aі Cта вихідB
  3. Вхід Bі Cта вихідA

Мета - зробити різницю Cякомога меншою. Різниця може бути будь-якою: рядок, число, крапка даних. Нас просто хвилює розмір (кількість байтів).

У мене є 50 тестових випадків, які можна знайти в Github . Кожен тестовий випадок складається з двох URL-адрес, розділених пробілом, які вказують на два файли, які потрібно відрізняти. (Ці тестові справи виникли з профілів Github членів PPCG. Дякую всім!)

Усі три вищезазначені завдання повинні тривати менше хвилини, щоб запустити на комп’ютері з достатньою потужністю (для кожного тестового випадку).

Ваш бал дорівнює загальному розміру (у байтах) усіх 50 різниць, нижчий - кращий. Жорстке кодування у вашій програмі заборонено (я залишаю за собою право змінювати тестові випадки, щоб запобігти жорсткому кодуванню). Вбудовані, які виробляють різницю (подібні diffutils), не допускаються.


4
Що саме є різницею?
Conor O'Brien

Все, що ви хочете, це буде насправді. Неофіційно його рядок, який представляє відмінності між AтаB
Натан Меррілл

1
Більше гниття посилань: нумерація пар тестових випадків за індексом базової лінії; обидві пари тестових випадків 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 - це 404. Поза цим я встиг знайти кожен інший випадок.
H Walters

3
Я закриваю це питання, оскільки воно значною мірою не відповідає, і багато старих посилань, які я використовував як тестові випадки, більше не працюють. Не соромтесь оновити питання та заново відкрийте, якщо бажаєте.
Натан Меррілл

1
Зроблено. GIST - gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 Другий файл - це uuencoded архів із 40 пар пар тестів.
Сет

Відповіді:


0

Чи відповідає моя відповідь?

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

перевіряється на: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM


1
Вам потрібно надати кілька програм (як diffеквівалент, так і patchеквівалент). Якщо string compareрядки відрізняються, це порушує правило "немає вбудованих". Якщо вона порівнює лише рядки (як напрошується назва), вона не залишає достатньо інформації, щоб відтворити виправлення.

@ ais523: buildins Я розумів це як команди командного рядка. Я знаю, що string compareне створює інформацію для створення сторінки, але в питанні про це не місце.
сергіол

З питання "2. Введіть A і C і виведіть B". Це те, що подана програма не може зробити, і що насправді жодна програма не може зробити (оскільки у неї недостатньо інформації).

@ ais523: Гаразд, я неправильно зрозумів.
Серхіол

@ ais523: Я не вважаю, що ваше твердження є правильним, "адже жодна програма не може зробити цього". Якщо C - різниця між A і B, то задані C і A, B можна обчислити. Можливо, я пропустив вашу точну точку
Сет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.