Me deparei com SVGCaptcha e imediatamente soube que era uma má ideia.
Gostaria que você mostrasse o quão ruim é essa idéia, extraindo o código de validação das imagens SVG que o código produz.
Uma imagem de exemplo é semelhante a esta:
Aqui está a fonte da imagem de exemplo:
<?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>
A entrada é a imagem SVG, que é um formato de texto.
A única restrição real é que seu código deve produzir os valores na ordem correta .
Os <text>
elementos de entrada estão em ordem aleatória, portanto, você deve prestar atenção ao x
atributo na <text>
tag
Pontuação é o número de bytes no código
Como o código atualmente faz duas transformações que se cancelam, você pode ignorá-las, mas se você as levar em consideração, vá em frente e faça uma redução de 30% na sua pontuação.
Respostas:
Bash ,
635639 bytesNota: exige
cat
,grep
,sort
,rev
, ecut
. Recebe entrada de stdin. A saída é separada por quebras de linha no stdout. Certifique-se de pressionar CTRL + D (não COMMAND + D no Mac) quando terminar de inserir o CAPTCHA.A entrada deve ser seguida por uma nova linha e depois '_'.EDIT : salvou 13 bytes.
EDIT 2 : economizou 20 bytes graças a @manatwork !
fonte
sort
suporta a posição dos caracteres no keydef:cut -c4-|sort -n
→sort -k1.4n
.CJam, 26 bytes
Experimente online no intérprete CJam .
Como funciona
fonte
JavaScript,
959391 byteseditar: -2 bytes mudando
documentRoot
paralastChild
; -2 bytes mudandojoin('')
parajoin``
, obrigado VɪʜᴀɴDigite o código no console do navegador em uma página que contenha o SVG em questão e grave na saída do console.
fonte
document.rootElement
está sendo retomado indefinido. Eu tentei Firefox e Safari('')
dois backticks: ``t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))
(leva string XML como parâmetro, retorna texto da imagem)Perl, 40 bytes
Código de 39 bytes + 1 para -n
Exemplo:
fonte
Utilitários Bash + GNU, 53
Como esta resposta , a saída é um caractere por linha.
fonte
Perl 6 , 68 bytes
fonte
Befunge, 79 bytes
Parece que deveria ser possível jogar golfe a pelo menos mais um byte disso, mas já estou trabalhando há alguns dias e isso é o melhor que pude.
Experimente online!
Explicação
Faça a direção de execução da direita para a esquerda e envolva para iniciar o loop principal.
Leia um caractere de stdin e teste o valor de final de arquivo.
Se não for o fim do arquivo, verifique se é um
>
.Se não for um
>
, adicione-o ao valor na pilha que rastreia os dois últimos caracteres e verifique se o par atual correspondex=
.Caso contrário, multiplique por 126 e mod com 126 2 para eliminar o valor mais antigo do par e abrir espaço para o próximo caractere.
Enrole novamente para repetir o loop principal.
Quando um
x=
par for encontrado, pule o próximo caractere (a citação), leia um número inteiro (o x valor ) e divida por 20. Isso se torna o deslocamento atual que é salvo para mais tarde.Quando um
>
for encontrado, leia o próximo caractere (normalmente uma das letras captcha) e salve-o no deslocamento atual em uma "matriz". Redefina o deslocamento para 9, para que a letra captcha não seja substituída quando>
forem encontrados caracteres posteriores .Finalmente, quando o final do arquivo for atingido, itere sobre os 7 valores salvos na matriz e os produza um por um. Isso deve fornecer todas as letras captcha na ordem correta.
Estou examinando alguns dos detalhes aqui, já que os caminhos do código se sobrepõem de maneiras um pouco difíceis de explicar, mas deve fornecer uma idéia geral de como o algoritmo funciona.
fonte
Python2, 129 bytes
Pega a fonte HTML em stdin, produz código em stdout.
fonte
<text>
elementos estão em uma ordem aleatória e o único requisito real é que você precise colocá-los na ordem correta. Isso significa que você deve usar o comandox
from<text>
e seguir as transformações.Mathematica, 106 bytes
Nota: A entrada precisa estar exatamente no formato especificado pelo exemplo.
fonte
V ,
28262524 bytesExperimente online!
Explicação:
HexDump:
fonte
QuadS , 49 bytes
Experimente online!
Localiza valores x (dígitos seguidos depois
x="
) e "letras" (fixados por tags de fechamento e abertura) e depois executa o seguinte APL (onde⍵
está a lista dos valores x encontrados e letras, em ordem de aparência):3↓⍵
solte os três primeiros elementos (espaços ao redor de<rect
…/rect>
e o<rect
valor 'sx).(
…)
Aplique a seguinte função tácita nisso:≢
o número de itens restantes.5×
reduzir pela metade2,⍨
acrescentar dois⊢⍴⍨
remodelar para essa forma (ou seja, uma matriz n × 2)⍉
transpor (para uma matriz 2 × n)⍎¨@1
execute cada string na primeira linha (transformando-as em números)↓
divida a matriz em dois vetores (um por linha)x c←
armazene esses dois em x (valores de x) ec (caracteres) respectivamente⊃
escolha o primeiro (x)⍋
classificar (os índices em x que classificariam x)c[
...]
use isso para indexar emc
∊
ε nlist (achatar), porque cada letra é uma string, por si sóA expressão APL equivalente de todo o programa QuadS é:
fonte
Java 8,
197173 bytesProduz um
java.util.Collection
de caracteres.Explicação:
Experimente online.
fonte
Gema , 65 caracteres
Em Gema, não há classificação, mas felizmente nem é necessário.
Exemplo de execução:
fonte
XMLStarlet , 46 caracteres
Espero que esta seja uma solução válida, pois o XMLStarlet é um transpilador que gera e executa o código XSLT, que é uma linguagem completa de Turing.
Exemplo de execução:
fonte
PHP, 96 bytes
Dado que
$i
é a string de entradafonte
array_combine()
+ksort()
você poderia usararray_multisort()
como esta:array_multisort($m[1],$m[2]);echo join($m[2]);
. Mas observe que as soluções devem lidar com entrada e saída (a menos que o idioma o faça automaticamente), em vez de esperar encontrar a entrada em uma variável ou simplesmente deixar o resultado em uma variável. Consulte meta relacionada .Limpo ,
277150 bytesYay padrão de correspondência!
Experimente online!
Define a função
?
, receber[Char]
e dar[Char]
.fonte