Encontré SVGCaptcha , e inmediatamente supe que era una mala idea.
Me gustaría que mostrara cuán mala es esta idea extrayendo el código de validación de las imágenes SVG que produce el código.
Una imagen de ejemplo se ve así:
Aquí está la fuente de la imagen de ejemplo:
<?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>
La entrada es la imagen SVG, que es un formato de texto.
La única restricción real es que su código debe producir los valores en el orden correcto .
Los <text>
elementos de entrada están en orden aleatorio, por lo que debe prestar atención al x
atributo en la <text>
etiqueta
El puntaje es el número de bytes en el código
Dado que el código actualmente realiza dos transformaciones que se cancelan entre sí, puede ignorarlas, pero si las toma en consideración, continúe y obtenga una reducción del 30% de su puntaje.
Respuestas:
Bash ,
635639 bytesNota: requiere
cat
,grep
,sort
,rev
, ycut
. Toma información de stdin. La salida está separada por saltos de línea en stdout. Asegúrese de presionar CTRL + D (no COMMAND + D en Mac) cuando termine de ingresar el CAPTCHA.La entrada debe ir seguida de una nueva línea y luego '_'.EDITAR : guardado 13 bytes.
EDIT 2 : ¡ Ahorró 20 bytes gracias a @manatwork !
fuente
sort
admite la posición de los caracteres en el keydef:cut -c4-|sort -n
→sort -k1.4n
.CJam, 26 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
JavaScript,
959391 byteseditar: -2 bytes cambiando
documentRoot
alastChild
; -2 bytes cambiandojoin('')
ajoin``
, gracias VɪʜᴀɴIngrese el código en la consola del navegador en una página que contenga el SVG en cuestión, escribe en la salida de la consola.
fuente
document.rootElement
está reajustando indefinido. He probado Firefox y Safari('')
dos backticks: ``t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))
(toma la cadena xml como parámetro, devuelve texto captcha)Perl, 40 bytes
Código de 39 bytes + 1 para -n
Ejemplo:
fuente
Bash + utilidades GNU, 53
Al igual que esta respuesta , la salida es un carácter por línea.
fuente
Perl 6 , 68 bytes
fuente
Befunge, 79 bytes
Parece que debería ser posible jugar al menos un byte más de esto, pero he estado trabajando en ello durante un par de días, y esto es lo mejor que pude obtener.
Pruébalo en línea!
Explicación
Haga la dirección de ejecución de derecha a izquierda y ajuste para iniciar el bucle principal.
Lea un char de stdin y pruebe el valor de fin de archivo.
Si no es el final del archivo, verifique si es un
>
.Si no es un
>
, agrégalo al valor en la pila que rastrea los últimos dos caracteres y verifica si el par actual coincidex=
.Si no, multiplíquelo por 126 y modifique por 126 2 para eliminar el valor más antiguo del par y dejar espacio para el siguiente personaje.
Envuelva nuevamente para repetir el bucle principal.
Cuando
x=
se encuentra un par, omita el siguiente carácter (la cita), lea un número entero (el valor x ) y divida por 20. Esto se convierte en el desplazamiento actual que se guarda para más adelante.Cuando
>
se encuentra un, lea el siguiente carácter (generalmente una de las letras captcha) y guárdelo en el desplazamiento actual en una "matriz". Restablezca el desplazamiento a 9, por lo que la letra captcha no se sobrescribirá cuando>
se encuentren caracteres posteriores .Finalmente, cuando se alcanza el final del archivo, repita los 7 valores guardados en la matriz y expórtelos uno por uno. Eso debería darte todas las letras captcha en el orden correcto.
Estoy pasando por alto algunos de los detalles aquí, ya que las rutas de código se superponen entre sí de maneras que son un poco difíciles de explicar, pero debería darle una idea general de cómo funciona el algoritmo.
fuente
Python2, 129 bytes
Toma la fuente HTML en stdin, produce código en stdout.
fuente
<text>
elementos están en un orden aleatorio, y el único requisito real es que debe colocarlos en el orden correcto. Eso significa que tienes que usarx
desde<text>
y seguir cualquier transformación.Mathematica, 106 bytes
Nota: La entrada debe estar exactamente en el formato especificado por el ejemplo.
fuente
V ,
28262524 bytesPruébalo en línea!
Explicación:
HexDump:
fuente
QuadS , 49 bytes
Pruébalo en línea!
Encuentra los valores de x (dígitos que se ejecutan después
x="
) y las "letras" (fijadas al cerrar y abrir etiquetas), luego ejecuta el siguiente APL (donde⍵
está la lista de valores y letras de x encontrados, en orden de aparición):3↓⍵
suelte los primeros tres elementos (espacios alrededor de<rect
.../rect>
y el<rect
valor 'sx).(
...)
aplique la siguiente función tácita sobre eso:≢
la cantidad de artículos restantes.5×
reducir a la mitad eso2,⍨
agregue un dos⊢⍴⍨
remodelar a esa forma (es decir, una matriz n × 2)⍉
transposición (a una matriz 2 × n)⍎¨@1
ejecutar cada cadena en la primera fila (convirtiéndolas en números)↓
dividir la matriz en dos vectores (uno por fila)x c←
almacenar esos dos en x (valores x) yc (caracteres) respectivamente⊃
elige el primero (x)⍋
subir de grado (los índices en x que ordenarían x)c[
...]
usa eso para indexar enc
∊
ε nlist (aplanar), ya que cada letra es una cadena por sí mismoLa expresión APL equivalente de todo el programa QuadS es:
fuente
Java 8,
197173bytesEmite una
java.util.Collection
de caracteres.Explicación:
Pruébalo en línea.
fuente
Gema , 65 personajes
En Gema no hay clasificación, pero afortunadamente ni siquiera es necesaria.
Ejecución de muestra:
fuente
XMLStarlet , 46 caracteres
Esperemos que esta sea una solución válida, ya que XMLStarlet es un transpilador que genera y ejecuta código XSLT, que es un lenguaje completo de Turing.
Ejecución de muestra:
fuente
PHP, 96 bytes
Dado que
$i
es la cadena de entradafuente
array_combine()
+ksort()
se puede utilizararray_multisort()
la siguiente manera:array_multisort($m[1],$m[2]);echo join($m[2]);
. Pero tenga en cuenta que se espera que las soluciones manejen la entrada y la salida por sí mismas (a menos que el lenguaje lo haga automáticamente), en lugar de esperar encontrar la entrada en una variable o simplemente dejar el resultado en una variable. Ver meta relacionado .Limpio ,
277150 bytesYay coincidencia de patrones!
Pruébalo en línea!
Define la función
?
, tomar[Char]
y dar[Char]
.fuente