Herausforderung
Versuchen Sie anhand von zwei Frage-IDs herauszufinden, wie ähnlich sie sind, indem Sie sich die Antworten ansehen.
Einzelheiten
Sie erhalten zwei Frage-IDs für codegolf.stackexchange.com
; Sie können davon ausgehen, dass für beide IDs Fragen vorhanden sind, die nicht gelöscht, aber nicht unbedingt offen sind. Sie müssen alle Antworten durchgehen und den Mindestabstand zwischen den Codes in den Antworten auf die beiden Fragen (ohne gelöschte Antworten) bestimmen. Das heißt, Sie sollten jede Antwort in Frage 1 mit jeder Antwort in Frage 2 vergleichen und den Mindestabstand von Levenshtein bestimmen. Gehen Sie wie folgt vor, um den Code in einer Antwort zu finden:
So finden Sie das Code-Snippet
Ein Textkörper ist der eigentliche Code der Antwort, wenn er sich in Backticks befindet und sich in einer eigenen Zeile befindet oder wenn er mit 4 Leerzeichen eingerückt ist und eine leere Zeile darüber steht, es sei denn, es befindet sich kein Text darüber.
Beispiele für gültige und ungültige Codefragmente (mit .
Leerzeichen) (durch eine Tonne Gleichheitszeichen getrennt)
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
========================================
Wenn die Antwort keine gültigen Codefragmente enthält, ignorieren Sie die Antwort vollständig. Beachten Sie, dass Sie nur den ersten Codeblock nehmen sollten.
Endgültige Spezifikationen
Die zwei Fragen-IDs können in einem beliebigen vernünftigen Format für 2 Ganzzahlen eingegeben werden. Die Ausgabe sollte der kleinste Levenshtein-Abstand zwischen zwei gültigen Antworten aus beiden Herausforderungen sein. Wenn es für eine oder beide Herausforderungen keine "gültigen" Antworten gibt, geben Sie aus -1
.
Testfall
Für die Herausforderung 115715
(Embedded Hexagons) und 116616
(Embedded Triangles) beide von Comrade SparklePony hatten die beiden Charcoal-Antworten (beide von KritixiLithos) einen Levenshtein-Abstand von 23, was der kleinste war. Somit 115715, 116616
wäre Ihre Ausgabe für 23
.
Bearbeiten
Sie können davon ausgehen, dass die Frage aufgrund einer Einschränkung der API-Seitengröße höchstens 100 Antworten enthält. Sie sollten Backticks in Codeblöcken nicht ignorieren, nur wenn der Codeblock selbst mit Backticks und nicht in einer eigenen Zeile erstellt wird.
Bearbeiten
Ich habe die Kopfgeldperiode vorzeitig beendet, weil ich einen Mod um eine einwöchige Sperre gebeten habe und nicht wollte, dass die Kopfgeldgebühr automatisch an die Antwort mit der höchsten Punktzahl vergeben wird (die zufällig die längste ist). Wenn eine neue Einreichung eingeht oder eine Einreichung so hoch ist, dass sie vor dem tatsächlichen Ende des Kopfgeldzeitraums (UTC 00:00 am 1. Juni) kürzer als 532 Byte wird, werde ich diesem ein Kopfgeld geben, um mein Versprechen danach einzuhalten Die Aussetzung läuft ab. Wenn ich mich richtig erinnere, muss ich das nächste Mal die Kopfgeldperiode verdoppeln. Wenn Sie also eine Antwort erhalten, erhalten Sie möglicherweise +200 :)
quelle
Antworten:
PowerShell, 532 Byte
Ich habe dort Zeilenumbrüche hinterlassen, um die Lesbarkeit zu verbessern. Die spiegeln sich immer noch in meiner Byteanzahl wider.
Ich bin mir ziemlich sicher, dass ich das im Griff habe. Das Schwierige für mich war, die Levenshtein-Distanz zu erreichen, da PowerShell meines Wissens keine eingebaute Funktion dafür hat. Dadurch konnte ich die damit verbundene Herausforderung auf Levenshtein Distanz beantworten . Wenn sich mein Code auf eine anonyme Funktion für LD bezieht, können Sie sich auf diese Antwort beziehen, um eine detailliertere Erklärung zu erhalten, wie dies funktioniert.
Code mit Kommentaren und Fortschrittsanzeige
Der Code kann sehr langsam werden (aufgrund der LD), daher habe ich einige Fortschrittsindikatoren für mich eingebaut, damit ich die Aktion verfolgen kann, während sie sich entfaltet, und nicht davon ausgehen kann, dass sie irgendwo in einer Schleife steckt. Der Code zur Überwachung des Fortschritts befindet sich weder im obersten Block noch wird er in meiner Byteanzahl gezählt.
Meine Logik zum Auffinden der Codeblöcke besteht darin, die Antwort als HTML zu verwenden und nach einem Code-Tag-Satz zu suchen, der optional von einem Pre-Tag-Satz umgeben ist, der in einer eigenen Zeile beginnt. Beim Testen wurden alle korrekten Daten zu 6 verschiedenen Fragensätzen gefunden.
Ich habe versucht, mit dem Markdown-Code zu arbeiten, aber es war zu schwierig, den richtigen Codeblock zu finden.
Probeläufe
quelle
Java + Jsoup, 1027 Bytes
Die ersten beiden Argumente sind die Frage-IDs.
Golf:
Lesbar:
}}
quelle
Mathematica, 540 Bytes
Eingang
Ausgabe
verwendet die integrierte EditDistance, die "den Editier- oder Levenshtein-Abstand zwischen Strings oder Vektoren u und v angibt".
Wie für den Testfall mathematica
gibt 23 zurück
Ich denke, ich kann ein bisschen mehr Golf spielen. Das
Laufen dauert einige Minuten
quelle