Saya menemukan SVGCaptcha , dan segera tahu itu adalah ide yang buruk.
Saya ingin Anda menunjukkan betapa buruknya ide ini dengan mengekstraksi kode validasi dari gambar SVG yang dihasilkan kode.
Contoh gambar terlihat seperti ini:
Berikut adalah sumber dari contoh gambar:
<?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>
Input adalah gambar SVG, yang merupakan format tekstual.
Satu-satunya batasan nyata adalah bahwa kode Anda harus menghasilkan nilai dalam urutan yang benar . Elemen
input <text>
dalam urutan acak sehingga Anda harus memperhatikan x
atribut dalam <text>
tag
Skor adalah jumlah byte dalam kode
Karena kode saat ini melakukan dua transformasi yang membatalkan satu sama lain Anda dapat mengabaikannya, tetapi jika Anda mempertimbangkannya, teruskan dan ambil pengurangan 30% dari skor Anda.
Jawaban:
Bash ,
635639 byteCatatan: membutuhkan
cat
,grep
,sort
,rev
, dancut
. Mengambil input dari stdin. Output dipisahkan oleh jeda baris pada stdout. Pastikan untuk menekan CTRL + D (bukan PERINTAH + D pada Mac) ketika selesai memasuki CAPTCHA.Input harus diikuti oleh baris baru dan kemudian '_'.EDIT : Disimpan 13 byte.
EDIT 2 : Disimpan 20 byte berkat @manatwork !
sumber
sort
mendukung posisi karakter di keydef:cut -c4-|sort -n
→sort -k1.4n
.CJam, 26 byte
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
JavaScript,
959391 bytesunting: -2 byte berubah
documentRoot
menjadilastChild
; -2 byte berubahjoin('')
menjadijoin``
, terima kasih VɪʜᴀɴMasukkan kode di konsol browser pada halaman yang berisi SVG yang dimaksud, tulis ke output konsol.
sumber
document.rootElement
retuning tidak terdefinisi. Saya sudah mencoba Firefox dan Safari('')
menjadi dua backticks: ``t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))
(mengambil string xml sebagai parameter, mengembalikan teks captcha)Perl, 40 byte
39 byte kode + 1 untuk -n
Contoh:
sumber
Utilitas Bash + GNU, 53
Seperti jawaban ini , output adalah satu karakter per baris.
sumber
Perl 6 , 68 byte
sumber
Befunge, 79 byte
Rasanya seperti mungkin untuk bermain golf setidaknya satu byte lagi dari ini, tapi saya sudah mengusahakannya selama beberapa hari sekarang, dan ini sebaik yang saya bisa dapatkan.
Cobalah online!
Penjelasan
Buat arah eksekusi dari kanan ke kiri, dan lilitkan untuk memulai loop utama.
Baca char dari stdin, dan uji nilai end-of-file.
Jika bukan end-of-file, periksa apakah itu a
>
.Jika bukan a
>
, tambahkan ke nilai pada tumpukan yang melacak dua karakter terakhir, dan periksa apakah pasangan saat ini cocokx=
.Jika tidak, kalikan dengan 126 dan mod dengan 126 2 untuk menjatuhkan nilai tertua dari pasangan dan memberikan ruang untuk karakter berikutnya.
Bungkus lagi untuk mengulangi loop utama.
Ketika suatu
x=
pasangan ditemui, lewati karakter berikutnya (kutipan), baca integer (nilai x ), dan bagi dengan 20. Ini menjadi offset saat ini yang disimpan untuk nanti.Ketika
>
ditemui, baca karakter berikutnya (biasanya salah satu huruf captcha), dan simpan di offset saat ini dalam "array". Atur ulang offset ke 9, sehingga huruf captcha tidak akan ditimpa ketika>
karakter yang lebih baru ditemukan.Akhirnya, ketika akhir file tercapai, beralih ke 7 nilai yang disimpan dalam array dan output satu per satu. Itu akan memberi Anda semua surat captcha dalam urutan yang benar.
Saya membahas beberapa detail di sini, karena jalur kode saling tumpang tindih dengan cara yang agak sulit dijelaskan, tetapi seharusnya memberi Anda gambaran umum tentang bagaimana algoritma bekerja.
sumber
Python2, 129 byte
Mengambil sumber HTML di stdin, menghasilkan kode di stdout.
sumber
<text>
elemen dalam urutan acak, dan satu-satunya persyaratan yang nyata adalah bahwa Anda harus menempatkan mereka dalam urutan yang benar. Itu berarti Anda harus menggunakanx
dari<text>
dan mengikuti perubahan apa pun.Mathematica, 106 byte
Catatan: Input harus dalam format yang ditentukan oleh contoh.
sumber
V ,
28262524 byteCobalah online!
Penjelasan:
HexDump:
sumber
QuadS , 49 byte
Cobalah online!
Temukan nilai x (digit berjalan setelah
x="
) dan "huruf" (disematkan dengan menutup dan membuka tag), kemudian jalankan APL berikut (di mana⍵
daftar nilai x ditemukan dan huruf, sesuai urutan penampilan):3↓⍵
drop tiga elemen pertama (spasi di sekitar<rect
.../rect>
dan nilai<rect
'sx).(
...)
terapkan fungsi tersembunyi berikut pada itu:≢
jumlah item yang tersisa.5×
membagi dua itu2,⍨
tambahkan dua⊢⍴⍨
membentuk kembali bentuk itu (yaitu matriks n × 2)⍉
transpos (ke matriks 2 × n)⍎¨@1
jalankan setiap string di baris pertama (mengubahnya menjadi angka)↓
pisahkan matriks menjadi dua vektor (satu per baris)x c←
masing-masing disimpan dalam x (nilai x) dan c (karakter)⊃
pilih yang pertama (x)⍋
naik kelas (indeks menjadi x yang akan mengurutkan x)c[
...]
gunakan itu untuk mengindeksc
∊
ϵ daftar (ratakan) karena setiap huruf adalah string dengan sendirinyaEkspresi APL yang setara dari seluruh program QuadS adalah:
sumber
Java 8,
197173 byteMenghasilkan
java.util.Collection
karakter.Penjelasan:
Cobalah online.
sumber
Gema , 65 karakter
Di Gema tidak ada penyortiran, tetapi untungnya bahkan tidak diperlukan.
Contoh dijalankan:
sumber
XMLStarlet , 46 karakter
Semoga ini adalah solusi yang valid karena XMLStarlet adalah transpiler yang menghasilkan dan mengeksekusi kode XSLT, yang merupakan bahasa lengkap Turing.
Contoh dijalankan:
sumber
PHP, 96 byte
Mengingat itu
$i
adalah string inputsumber
array_combine()
+ksort()
Anda bisa menggunakanarray_multisort()
seperti ini:array_multisort($m[1],$m[2]);echo join($m[2]);
. Tetapi harap dicatat bahwa solusi diharapkan untuk menangani input dan output sendiri (kecuali bahasa melakukannya secara otomatis), daripada mengharapkan untuk menemukan input dalam suatu variabel atau biarkan saja hasilnya dalam suatu variabel. Lihat meta terkait .Bersih ,
277150 bytePencocokan pola Yay!
Cobalah online!
Menentukan fungsi
?
, menerima[Char]
dan memberi[Char]
.sumber