Compressão diferencial [fechada]


20

Para esse desafio, você precisa compactar um diff. Um diff é alguns dados que representam a diferença entre duas strings. Para esse desafio, você precisa fornecer um ou mais programas que possam:

  1. Input Ae B, e output a diff,C
  2. Input Ae Ce saídaB
  3. Input Be Ce saídaA

O objetivo é tornar o diff o Cmenor possível. O diff pode ser qualquer coisa: uma string, um número, um blob de dados. Nós apenas nos preocupamos com o tamanho (número de bytes).

Eu tenho 50 casos de teste que podem ser encontrados no Github . Cada caso de teste consiste em dois URLs separados por espaço que apontam para os 2 arquivos que você precisa diferenciar. (Esses casos de teste tiveram origem nos perfis do Github dos membros do PPCG. Obrigado a todos!)

Todas as três tarefas acima devem levar menos de um minuto para serem executadas em um computador com alimentação razoável (para cada caso de teste).

Sua pontuação é igual ao tamanho total (em bytes) de todas as 50 diferenças, menor é melhor. Diferenças de codificação física no seu programa não são permitidas (reservo-me o direito de alterar os casos de teste para evitar a codificação). Builtins que produzem um diff (como diffutils) não são permitidos.


4
O que exatamente é um diff?
Conor O'Brien

Qualquer coisa que você queira que seja. Informalmente, o seu texto um que representa as diferenças entre AeB
Nathan Merrill

1
Mais rot pod: enumerar pares de casos de teste pelo índice de linha de 1 base; os dois pares de casos de teste 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 são todos 404. Fora desses, consegui recuperar todos os outros casos.
H Walters

3
Estou encerrando esta questão porque ela está amplamente sem resposta e muitos dos links antigos que eu estava usando como casos de teste não funcionam mais. Sinta-se livre para atualizar a pergunta e reabrir, se desejar.
Nathan Merrill

1
Feito. O GIST é gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 O segundo arquivo é um arquivo codificado por uu dos 40 pares restantes de casos de teste.
Seth

Respostas:


0

Minha resposta é válida?

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

testável em: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM


1
Você precisa fornecer vários programas ( diffequivalentes e patchequivalentes). Se for diferente de string comparestrings, viola a regra "no builtins". Se apenas comparar strings (como o nome sugere), não deixa informações suficientes para recriar um patch.

@ ais523: builtins Eu entendi como comandos de linha de comando. Eu sei que string compareisso não gera informações para criar uma página, mas não há lugar na pergunta para solicitá-la.
sergiol 16/01/19

Da pergunta, "2. Insira A e C, e saia B". Isso é algo que o seu programa enviado não pode fazer e que, de fato, nenhum programa poderia fazer (pois não possui informações suficientes).

@ ais523: OK, eu entendi errado.
sergiol

@ ais523: Não acho que sua afirmação esteja correta "de fato, nenhum programa poderia fazer". Se C é a diferença entre A e B, então, C e A, B é calculável. Talvez eu tenha perdido o seu ponto exato
Seth
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.