Desafio
Dadas duas IDs de perguntas, tente descobrir o quão semelhantes elas são olhando as respostas.
Detalhes
Você receberá dois IDs de perguntas para codegolf.stackexchange.com
; você pode assumir que existem perguntas para os dois IDs que não foram excluídos, mas não necessariamente abertos. Você deve examinar todas as respostas e determinar a distância mínima de Levenshtein entre o código nas respostas às duas perguntas (sem incluir as respostas excluídas). Ou seja, você deve comparar todas as respostas da pergunta 1 com todas as respostas da questão 2 e determinar a distância mínima de Levenshtein. Para encontrar o código em uma resposta, assuma o seguinte procedimento:
Como encontrar o trecho de código
Um corpo de texto é o código real da resposta se estiver em backticks e estiver em sua própria linha, ou se for recuado com 4 espaços, com uma linha vazia acima, a menos que não haja texto acima.
Exemplos de trechos de código válidos e não válidos (com .
um espaço) (separados por uma tonelada de sinais de igual)
This is `not a valid code snippet because it is not on its own line`
========================================
This is:
`A valid code snippet`
========================================
This is
....not a valid code snippet because there's no spacing line above
========================================
This is
....A valid code snippet because there's a spacing line above
========================================
....Valid code snippet because there's no other text
========================================
Se não houver trechos de código válidos na resposta, ignore-a completamente. Observe que você só deve pegar o primeiro código de bloqueio.
Especificações finais
Os dois IDs de perguntas podem ser inseridos em qualquer formato razoável para 2 números inteiros. A saída deve ser a menor distância de Levenshtein entre as duas respostas válidas de qualquer desafio. Se não houver respostas "válidas" para um ou ambos os desafios, produza -1
.
Caso de teste
Para o desafio 115715
(Embedded Hexagons) e 116616
(Embedded Triangles), ambos do camarada SparklePony, as duas respostas de carvão (ambas da KritixiLithos) tinham uma distância de Levenshtein de 23, a menor. Assim, sua saída para 115715, 116616
seria 23
.
Editar
Você pode supor que a pergunta tenha no máximo 100 respostas devido a uma restrição de tamanho de página da API. Você não deve ignorar backticks em blocos de código, apenas se o próprio bloco de código for criado usando backticks e não em sua própria linha.
Editar
Eu encerrei o período de recompensa mais cedo porque fiz um pedido a um mod para obter uma suspensão de uma semana e não queria que a recompensa fosse automaticamente atribuída à resposta com a pontuação mais alta (que é a mais longa). Se uma nova submissão for recebida ou uma submissão for golfed o suficiente para se tornar menor que 532 bytes antes do final do período de recompensa (UTC 00:00 em 1º de junho), darei a ela uma recompensa para permanecer fiel à minha promessa, depois a suspensão expira. Se bem me lembro, preciso dobrar o período de recompensa na próxima vez. Se você receber uma resposta, poderá receber +200 :)
fonte
Respostas:
PowerShell, 532 bytes
Deixei novas linhas para facilitar a leitura. Ainda estão refletidos na minha contagem de bytes.
Tenho certeza de que tenho uma noção disso. A parte mais difícil para mim foi obter a distância de Levenshtein, já que o PowerShell não tem um built-in para isso até onde eu sei. Por causa disso, fui capaz de responder ao desafio relacionado à distância de Levenshtein . Quando meu código se refere a uma função anônima do LD, você pode consultar essa resposta para obter uma explicação mais detalhada de como isso funciona.
Código com comentários e indicador de progresso
O código pode ficar muito lento (por causa do LD), então eu criei alguns indicadores de progresso para poder seguir a ação conforme ela se desenrolava e não assumir que ela estava presa em um loop em algum lugar. O código para monitorar o progresso não está no bloco superior nem é contado na minha contagem de bytes.
Minha lógica para encontrar os blocos de código é pegar a resposta como HTML e procurar um conjunto de tags de código, opcionalmente cercado por um conjunto de pré tags que começa em sua própria linha. Ao testar, encontrou todos os dados corretos em 6 conjuntos de perguntas diferentes.
Tentei trabalhar com o código de remarcação, mas era muito difícil encontrar o bloco de código certo.
Execuções de amostra
fonte
Java + Jsoup, 1027 bytes
Os dois primeiros argumentos são os IDs da pergunta.
Golfe:
Legível:
}
fonte
Mathematica, 540 bytes
entrada
resultado
usa EditDistance interno que "fornece a distância de edição ou Levenshtein entre cadeias ou vetores u e v".
Quanto ao caso de teste mathematica
retorna 23
Acho que posso jogar um pouco mais de golfe
Leva alguns minutos para correr
fonte