Desafío
Dadas dos ID de preguntas, intente averiguar qué tan similares son mirando las respuestas.
Detalles
Se le darán dos ID de preguntas para codegolf.stackexchange.com
; puede suponer que existen preguntas para ambas ID que no se eliminan, pero que no están necesariamente abiertas. Debe revisar todas las respuestas y determinar la distancia mínima de Levenshtein entre el código en las respuestas a las dos preguntas (sin incluir las respuestas eliminadas). Es decir, debe comparar cada respuesta en la pregunta 1 con cada respuesta en la pregunta 2, y determinar la distancia mínima de Levenshtein. Para encontrar el código en una respuesta, asuma el siguiente procedimiento:
Cómo encontrar el fragmento de código
Un cuerpo de texto es el código real de la respuesta si está en backticks y está en su propia línea, o si está sangrado con 4 espacios, con una línea vacía encima, a menos que no haya texto arriba.
Ejemplos de fragmentos de código válidos y no válidos (con .
un espacio) (separados por una tonelada de signos iguales)
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
========================================
Si no hay fragmentos de código válidos en la respuesta, ignore la respuesta por completo. Tenga en cuenta que solo debe tomar el primer bloque de código.
Especificaciones finales
Las dos ID de preguntas se pueden ingresar en cualquier formato razonable para 2 enteros. El resultado debe ser la distancia de Levenshtein más pequeña entre dos respuestas válidas de cualquier desafío. Si no hay respuestas "válidas" para uno o ambos desafíos, salida -1
.
Caso de prueba
Para el desafío 115715
(Hexágonos incrustados) y 116616
(Triángulos incrustados), ambos del camarada SparklePony, las dos respuestas de carbón (ambas de KritixiLithos) tenían una distancia de Levenshtein de 23, que era la más pequeña. Por lo tanto, su salida para 115715, 116616
sería 23
.
Editar
Puede suponer que la pregunta tiene como máximo 100 respuestas debido a una restricción de tamaño de página API. No debe ignorar los backticks en los bloques de código, solo si el bloque de código en sí se crea usando backticks y no en su propia línea.
Editar
Terminé el período de recompensa temprano porque solicité a un mod para obtener una suspensión de una semana y no quería que la recompensa se otorgara automáticamente a la respuesta de mayor puntuación (que es la más larga). Si llega una nueva presentación o si una presentación es lo suficientemente mejorada como para ser más corta que 532 bytes antes del final del período de recompensa (UTC 00:00 el 1 de junio), le daré una recompensa para cumplir con mi promesa, después La suspensión expira. Si no recuerdo mal, necesito duplicar el período de recompensa la próxima vez, así que si recibes una respuesta, podrías obtener +200 :)
fuente
Respuestas:
PowerShell, 532 bytes
Dejé nuevas líneas allí para cierta legibilidad. Todavía se reflejan en mi recuento de bytes.
Estoy bastante seguro de que tengo un control sobre esto. La parte más difícil para mí fue obtener la distancia de Levenshtein ya que PowerShell no tiene una capacidad incorporada para eso, que yo sepa. Por eso pude responder al desafío relacionado con la distancia de Levenshtein . Cuando mi código se refiere a una función anónima para LD, puede consultar esa respuesta para obtener una explicación más detallada de cómo funciona.
Código con comentarios e indicador de progreso
El código puede volverse muy lento (debido al LD), así que construí algunos indicadores de progreso por mí mismo para poder seguir la acción a medida que se desarrollaba y no asumir que estaba atrapada en un bucle en alguna parte. El código para monitorear el progreso no se encuentra en el bloque superior ni se cuenta en mi recuento de bytes.
Mi lógica para encontrar los bloques de código es tomar la respuesta como HTML y buscar un conjunto de etiquetas de código, opcionalmente rodeado por un conjunto de etiquetas previas que comienza en su propia línea. En las pruebas, encontró todos los datos correctos en 6 conjuntos de preguntas diferentes.
Traté de trabajar desde el código de descuento, pero fue demasiado difícil encontrar el bloque de código correcto.
Ejecuciones de muestra
fuente
Java + Jsoup, 1027 bytes
Los primeros dos argumentos son los ID de las preguntas.
Golfizado:
Legible:
}
fuente
Mathematica, 540 bytes
entrada
salida
usa EditDistance incorporado que "proporciona la distancia de edición o Levenshtein entre cadenas o vectores u y v".
En cuanto al caso de prueba Mathica
devuelve 23
Supongo que puedo jugar al golf un poco más.
Toma unos minutos correr
fuente