Ich bin auf SVGCaptcha gestoßen und wusste sofort, dass es eine schlechte Idee war.
Ich möchte, dass Sie zeigen, wie schlecht diese Idee ist, indem Sie den Validierungscode aus den von diesem Code erzeugten SVG-Bildern extrahieren.
Ein Beispielbild sieht folgendermaßen aus:
Hier ist die Quelle des Beispielbildes:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
width="200" height="40"
> <rect x="0" y="0" width="200" height="40"
style="stroke: none; fill: none;" >
</rect> <text style="fill: #4d9363;" x="5" y="34" font-size="20" transform="translate(5, 34) rotate(-17) translate(-5, -34)">8</text>
<text style="fill: #be8b33;" x="125" y="29" font-size="21" transform="translate(125, 29) rotate(17) translate(-125, -29)">f</text>
<text style="fill: #d561ff;" x="45" y="35" font-size="20" transform="translate(45, 35) rotate(-2) translate(-45, -35)">4</text>
<text style="fill: #3de754;" x="85" y="31" font-size="21" transform="translate(85, 31) rotate(-9) translate(-85, -31)">8</text>
<text style="fill: #5ed4bf;" x="25" y="33" font-size="22" transform="translate(25, 33) rotate(16) translate(-25, -33)">u</text>
<text style="fill: #894aee;" x="105" y="28" font-size="25" transform="translate(105, 28) rotate(9) translate(-105, -28)">1</text>
<text style="fill: #e4c437;" x="65" y="32" font-size="20" transform="translate(65, 32) rotate(17) translate(-65, -32)">x</text>
</svg>
Die Eingabe ist das SVG-Bild, bei dem es sich um ein Textformat handelt.
Die einzige wirkliche Einschränkung ist, dass Ihr Code die Werte in der richtigen Reihenfolge erzeugen muss .
Die Eingabeelemente <text>sind in zufälliger Reihenfolge, sodass Sie auf das xAttribut im <text>Tag achten müssen
Score ist die Anzahl der Bytes im Code
Da der Code derzeit zwei Transformationen durchführt, die sich gegenseitig aufheben, können Sie diese ignorieren. Wenn Sie sie jedoch berücksichtigen, reduzieren Sie Ihre Punktzahl um 30%.

Machen Sie die Ausführungsrichtung von rechts nach links und drehen Sie sich um, um die Hauptschleife zu starten.
Lesen Sie ein Zeichen aus stdin und prüfen Sie, ob das Dateiende erreicht ist.
Wenn es nicht das Ende der Datei ist, überprüfen Sie, ob es eine ist
Wenn dies nicht
Wenn nicht, multiplizieren Sie mit 126 und mod mit 126 2 , um den ältesten Wert aus dem Paar zu entfernen und Platz für das nächste Zeichen zu schaffen.
Wenn ein
Wenn a
Wenn das Dateiende erreicht ist, iterieren Sie über die 7 im Array gespeicherten Werte und geben Sie sie einzeln aus. Das sollte Ihnen alle Captcha-Buchstaben in der richtigen Reihenfolge geben.