Je suis tombé sur SVGCaptcha et j'ai tout de suite compris que c'était une mauvaise idée.
J'aimerais que vous montriez à quel point l'idée est mauvaise en extrayant le code de validation des images SVG que le code produit.
Un exemple d'image ressemble à ceci:
Voici la source de l'exemple d'image:
<?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>
L'entrée est l'image SVG, qui est un format textuel.
La seule restriction réelle est que votre code doit générer les valeurs dans le bon ordre .
Les <text>
éléments d' entrée sont dans un ordre aléatoire, vous devez donc faire attention à l' x
attribut dans la <text>
balise
Score est le nombre d'octets dans le code
Étant donné que le code effectue actuellement deux transformations qui s’annulent, vous pouvez les ignorer, mais si vous les prenez en considération, continuez et utilisez une réduction de 30% de votre score.
Réponses:
Bash ,
635639 octetsRemarque: il faut
cat
,grep
,sort
,rev
etcut
. Prend les commentaires de stdin. La sortie est séparée par des sauts de ligne sur stdout. Assurez-vous d’appuyer sur CTRL + D (pas de COMMAND + D sur Mac) lorsque vous avez fini d’entrer le CAPTCHA.L'entrée doit être suivie d'une nouvelle ligne, puis de '_'.EDIT : Sauvegardé 13 octets.
EDIT 2 : 20 octets sauvés grâce à @manatwork !
la source
sort
supporte la position du caractère dans le keydef:cut -c4-|sort -n
→sort -k1.4n
.CJam, 26 octets
Essayez-le en ligne dans l' interprète CJam .
Comment ça fonctionne
la source
JavaScript,
959391 octetsedit: -2 octets passant
documentRoot
àlastChild
; -2 octets passantjoin('')
àjoin``
, merci VɪʜᴀɴEntrez le code dans la console du navigateur sur une page contenant le fichier SVG en question, écrit dans la sortie de la console.
la source
document.rootElement
est réaccorder undefined. J'ai essayé Firefox et Safari('')
remplaçant le en deux backticks: ``t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))
(prend la chaîne xml en paramètre, renvoie le texte captcha)Perl, 40 octets
39 octets code + 1 pour -n
Exemple:
la source
Utilitaires Bash + GNU, 53
Comme cette réponse , la sortie est d'un caractère par ligne.
la source
Perl 6 , 68 octets
la source
Befunge, 79 octets
Il me semble qu’il devrait être possible de jouer au moins un octet de plus sur ce parcours, mais je travaille dessus depuis quelques jours maintenant, et c’est aussi bon que possible.
Essayez-le en ligne!
Explication
Définissez la direction d'exécution de droite à gauche et tournez-vous pour lancer la boucle principale.
Lire un caractère à partir de stdin et tester la valeur de fin de fichier.
Si ce n'est pas la fin du fichier, vérifiez si c'est un
>
.Si ce n'est pas un
>
, ajoutez-le à la valeur de la pile qui suit les deux derniers caractères et vérifiez si la paire actuelle correspondx=
.Sinon, multipliez par 126 et modifiez par 126 2 pour supprimer la valeur la plus ancienne de la paire et faire de la place pour le caractère suivant.
Retournez à nouveau pour répéter la boucle principale.
Lorsqu'une
x=
paire est rencontrée, ignorez le caractère suivant (la citation), lisez un entier (la valeur x ) et divisez par 20. Il devient le décalage actuel qui est enregistré pour plus tard.Lorsqu’un
>
est rencontré, lisez le caractère suivant (généralement l’une des lettres captcha) et enregistrez-le au décalage actuel dans un "tableau". Réinitialisez le décalage à 9, afin que la lettre captcha ne soit pas écrasée lorsque des>
caractères ultérieurs sont rencontrés.Enfin, lorsque la fin de fichier est atteinte, parcourez les 7 valeurs enregistrées dans le tableau et exportez-les une par une. Cela devrait vous donner toutes les lettres captcha dans le bon ordre.
Je passe en revue certains détails, car les chemins de code se chevauchent de manière un peu difficile à expliquer, mais cela devrait vous donner une idée générale du fonctionnement de l’algorithme.
la source
Python2, 129 octets
Prend la source HTML sur stdin, produit du code sur stdout.
la source
<text>
éléments sont dans un ordre aléatoire et la seule exigence réelle est de les placer dans le bon ordre. Cela signifie que vous devez utiliser lex
de<text>
et suivre toutes les transformations.Mathematica, 106 octets
Remarque: l'entrée doit être exactement dans le format spécifié par l'exemple.
la source
V ,
28262524 octetsEssayez-le en ligne!
Explication:
HexDump:
la source
QuadS , 49 octets
Essayez-le en ligne!
Trouve les valeurs x (chiffres après
x="
) et les "lettres" (liées par des balises fermantes et ouvrantes), puis exécute la APL suivante (où⍵
est la liste des x valeurs et lettres trouvées, dans l'ordre d'apparition):3↓⍵
déposez les trois premiers éléments (espaces autour<rect
…/rect>
et la<rect
valeur 'sx).(
…)
Applique la fonction tacite suivante à ce sujet:≢
le nombre d'articles restants.5×
réduire de moitié cette2,⍨
ajouter un deux⊢⍴⍨
remodeler à cette forme (ie une matrice n × 2)⍉
transposer (sur une matrice 2 × n)⍎¨@1
exécuter chaque chaîne de la première ligne (en les transformant en nombres)↓
scinder la matrice en deux vecteurs (un par ligne)x c←
stocker ces deux en x (valeurs x) et c (caractères) respectivement⊃
choisissez le premier (x)⍋
améliorer le niveau (les indices dans x qui trieraient x)c[
… L']
utiliser pour indexer dansc
∊
ε nlist (aplatir) parce que chaque lettre est une chaîne par lui - mêmeL’expression APL équivalente de l’ensemble du programme QuadS est la suivante:
la source
Java 8,
197173 octetsAffiche un
java.util.Collection
des caractères.Explication:
Essayez-le en ligne.
la source
Gema , 65 caractères
À Gema, il n'y a pas de tri, mais heureusement, ce n'est même pas nécessaire.
Échantillon échantillon:
la source
XMLStarlet , 46 caractères
Espérons que cette solution est valide car XMLStarlet est un transpiler qui génère et exécute le code XSLT, qui est un langage complet de Turing.
Échantillon échantillon:
la source
PHP, 96 octets
Étant donné que
$i
c'est la chaîne d'entréela source
array_combine()
+ksort()
vous pouvez utiliserarray_multisort()
comme ceci:array_multisort($m[1],$m[2]);echo join($m[2]);
. Cependant, veuillez noter que les solutions doivent gérer les entrées et les sorties elles-mêmes (à moins que la langue ne le fasse automatiquement), au lieu de rechercher l'entrée dans une variable ou de simplement laisser le résultat dans une variable. Voir les méta liés .Propre ,
277150 octetsYay motif correspondant!
Essayez-le en ligne!
Définit la fonction
?
, en prenant[Char]
et en donnant[Char]
.la source