পরাজিত এসভিজি ক্যাপচা


79

আমি এসভিজি ক্যাপচা জুড়ে এসেছি এবং তাত্ক্ষণিকভাবে জানলাম এটি একটি খারাপ ধারণা।

আমি চাই আপনি কোডটি যে এসভিজি চিত্রগুলি উত্পাদন করে সেগুলি থেকে বৈধতা কোডটি বের করে এই ধারণাটি কতটা খারাপ তা দেখানো।


একটি উদাহরণ চিত্রটি দেখতে এরকম: উদাহরণ চিত্রটির উত্স এখানে:
8u4x8lf

<?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>

ইনপুটটি এসভিজি চিত্র, যা একটি পাঠ্য বিন্যাস।

একমাত্র আসল সীমাবদ্ধতা হ'ল আপনার কোডটি অবশ্যই সঠিক ক্রমে মানগুলি তৈরি করতে পারে ।
ইনপুট <text>উপাদানগুলি এলোমেলোভাবে থাকে যাতে আপনাকে ট্যাগের xবৈশিষ্ট্যে মনোযোগ দিতে হয়<text>


স্কোরটি কোডের বাইট সংখ্যা


যেহেতু কোডটি বর্তমানে দুটি রূপান্তর করে যা একে অপরকে বাতিল করে দেয় আপনি এগুলি উপেক্ষা করতে পারেন তবে আপনি যদি তাদের বিবেচনায় নেন তবে এগিয়ে যান এবং আপনার স্কোর থেকে 30% হ্রাস নিন।


3
ইনপুট এবং আউটপুট কী তা আপনি প্রকৃতপক্ষে স্পষ্ট করে বলেননি: আমি এসভিজি ফাইল এবং এতে থাকা অক্ষরগুলি অনুমান করছি? এবং এটি আমার কাছে পরিষ্কার নয় যে উত্তরগুলি আসলে এসভিজি স্পেকটি বাস্তবায়নের প্রয়োজন কিনা বা তারা ধরে নিতে পারে যে এসভিজি এসভিজি ক্যাপ্টা বর্তমান সংস্করণ দ্বারা উত্পাদিত হয়েছে এবং তাই রূপান্তরগুলি উপেক্ষা করা যেতে পারে।
পিটার টেলর

আমি আউটপুটটি STDOUT বা ফাংশন রিটার্ন ভ্যালুতে সীমাবদ্ধ রাখার এবং এটিকে কোড-গল্ফ
TheDoctor

1
না, এই সাইটের জন্য বিষয়গুলির জন্য প্রশ্নগুলির একটি উদ্দেশ্যমূলক, পরিমাণযুক্ত বিজয়ী মানদণ্ডের প্রয়োজন।
অ্যালেক্স এ।

7
আমি নিশ্চিত না এখানে কীভাবে প্রাসঙ্গিক চিত্র-প্রক্রিয়াকরণ হয়।
সুপারজেডি ২৪

18
'এসভিজি ক্যাপচা' গুগল করার সময় এই প্রশ্নটি এখন চতুর্থ ফলাফল :)
নীল

উত্তর:


18

বাশ , 63 56 39 বাইট

cat<<_|grep -o 'x=.*>'|cut -c4-|sort -n|grep -o '>.</t'|cut -c2

grep -o 'x=.*>'|cut -c4-|sort -n|grep -o '>.</t'|cut -c2

grep -o 'x=.*<'|sort -k1.4n|rev|cut -c2

দ্রষ্টব্য: প্রয়োজন cat, grep , sort, rev, এবং cut। স্টিডিন থেকে ইনপুট নেয়। স্ট্যান্ডআউটে লাইন ব্রেক দ্বারা আউটপুট পৃথক করা হয়। ক্যাপচা প্রবেশ করা শেষ করে সিটিআরএল + ডি (ম্যাকের উপর কম্যান্ড + ডি নয়) টিপুন sure ইনপুট অবশ্যই একটি নতুন লাইন এবং তারপরে '_' অনুসরণ করবে।

সম্পাদনা : 13 বাইট সংরক্ষণ করা হয়েছে

সম্পাদনা 2 : @ ম্যানটওয়ার্কের জন্য 20 বাইট সংরক্ষণ করা হয়েছে !


গনুহ coreutils sort keydef চরিত্রের অবস্থান সমর্থন করে: cut -c4-|sort -nsort -k1.4n
manatwork

@ মান্যাটওয়ার্ক ধন্যবাদ, আমি উত্তরটি আপডেট করেছি।
কোডার 256

13

সিজেম, 26 বাইট

q"x="/2>{'"/1=i}${'>/1=c}/

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

q     e# Read all input from STDIN.
"x="/ e# Split it at occurrences of "x=".
2>    e# Discard the first two chunks (head and container).
{     e# Sort the remaining chunks by the following key:
  '"/ e#   Split at occurrences of '"'.
  1=  e#   Select the second chunk (digits of x="<digits>").
  i   e#   Cast to integer.
}$    e#
{     e# For each of the sorted chunks:
  '>/ e#   Split at occurrences of '>'.
  1=  e#   Select the second chunk.
  c   e#   Cast to character.
}/    e#

8

জাভাস্ক্রিপ্ট, 95 93 91 বাইট

l=[],r=/x="(\d*).*>(.)/g;while(e=r.exec(document.lastChild.innerHTML))l[e[1]]=e[2];l.join``

সম্পাদনা করুন: -২ বাইট পরিবর্তন documentRootকরে lastChild; -2 বাইট পরিবর্তন join('')করতে join``, ধন্যবাদ Vɪʜᴀɴ

প্রশ্নে এসভিজি সংযোগকারী কোনও পৃষ্ঠায় ব্রাউজার কনসোলে কোড প্রবেশ করুন, আউটপুট কনসোলকে লিখুন।


document.rootElementপুনরায় সংশোধিত হয়। আমি ফায়ারফক্স এবং সাফারি চেষ্টা করেছি
ডাউনগোট

এটি কেবলমাত্র ক্রোমে পরীক্ষা করা হয়েছিল, আমি কী কী পরিবর্তন হতে পারে তা খতিয়ে দেখব।
নিকসন

এটি ফায়ারফক্সে কাজ করছে বলে মনে হচ্ছে, এসভিজি ফাইলের একমাত্র বিষয়বস্তু?
নিকসন

ঠিক আছে, Chrome এ চেষ্টা করে দেখুন, এখন এটি কাজ করে। +1 টি। আপনি ('')দুটি ব্যাকটিকগুলিতে পরিবর্তন করে দুটি
বাইটও

এটি 78: t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))(প্যারামিটার হিসাবে এক্সএমএল স্ট্রিং নেয়, ক্যাপচা পাঠ্য ফেরত দেয়)
ড্যাঙ্কমিমেস

7

পার্ল, 40 বাইট

39-বাইট কোড + 1 -n এর জন্য

$a[$1]=$2 for/x="(.+)".+(.)</g}{print@a

উদাহরণ:

perl -ne '$a[$1]=$2 for/x="(.+)".+(.)</g}{print@a' <<< '<example from above>'
8u4x81f

আপনি যদি সেগুলি চালু করেন তবে সেই লোকটি কেবলমাত্র সতর্কতায় পূর্ণ। পার্লের ডিফল্ট শিথিল প্রকৃতির দুর্দান্ত ব্যবহার।
ব্র্যাড গিলবার্ট বিবিগিল

@ ব্র্যাডগিলবার্টব ২ গিলস হ্যাঁ, আমি সতর্কবার্তাগুলি পরীক্ষা না করার চেষ্টা করি, আমি কোনও গল্ফড কোড এমনকি কখনও কখনও কাজ করে বলেও অবাক হয়েছি!
ডম হেস্টিংস



3

বেফুঞ্জ, 79 বাইট

এটিকে আরও কমপক্ষে আরও একটি বাইট বন্ধ করে গল্ফ দেওয়া সম্ভব হবে বলে মনে হয় তবে আমি এখন কয়েক দিন ধরে এটির উপর কাজ করে যাচ্ছি এবং এটি যতটা পেতাম ততই ভালো।

<%*:"~"*"~"_~&45*/99p1v-">":_|#`0:~<
#,:#g7-#:_@^-+*"x~=":+_~99g7p>999p#^_>>#1+

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

কার্যকরকরণের পথগুলির সাথে উত্স কোড হাইলাইট করা

*ফাঁসির দিকটি ডান থেকে বামে করুন এবং মূল লুপটি শুরু করতে চারদিকে মোড়ানো।
*স্টিডিনের কাছ থেকে একটি লেখাগুলি পড়ুন এবং ফাইল-এর শেষে মূল্য পরীক্ষা করুন।
*যদি এটি ফাইলের শেষ না হয়, এটি কিনা এটি পরীক্ষা করুন >
*এটি যদি না >হয় তবে স্ট্যাকের মানটিতে এটি যুক্ত করুন যা শেষ দুটি অক্ষর ট্র্যাক করে এবং বর্তমান যুগটি মিলছে কিনা তা পরীক্ষা করুন x=
*যদি তা না হয় তবে জোড় থেকে প্রাচীনতম মানটি ফেলে 126 2 দিয়ে মোড এবং পরবর্তী অক্ষরের জন্য স্থান তৈরি করুন 12
*মূল লুপটির পুনরাবৃত্তি করতে আবারও প্রায় মোড়ানো rap
*যখন কোনও x=জুটির মুখোমুখি হয়, পরবর্তী অক্ষরটি (উদ্ধৃতি) এড়িয়ে যান, একটি পূর্ণসংখ্যা ( x মান) পড়ুন এবং 20 দ্বারা ভাগ করুন This এটি বর্তমান অফসেট হয়ে যায় যা পরবর্তী সময়ে সংরক্ষণ করা হয়।
*যখন >মুখোমুখি হয়, পরবর্তী অক্ষরটি পড়ুন (সাধারণত ক্যাপচা অক্ষরের একটি) এবং বর্তমান অফসেটে এটি একটি "অ্যারে" তে সংরক্ষণ করুন। অফসেটটি 9 এ রিসেট করুন, সুতরাং পরবর্তী >অক্ষরগুলির মুখোমুখি হলে ক্যাপচা চিঠিটি ওভাররাইট করা হবে না ।
*শেষ অবধি, যখন ফাইল-এর শেষে পৌঁছে যায়, অ্যারেতে সংরক্ষিত values ​​টি মানকে পুনরাবৃত্তি করুন এবং সেগুলি একে একে আউটপুট করুন। এটি আপনাকে সঠিক ক্রমে সমস্ত ক্যাপচার চিঠি দেওয়া উচিত।

আমি এখানে কিছু বিশদটি দেখছি, যেহেতু কোড পাথগুলি একে অপরকে এমনভাবে উপড়ে ফেলে যা ব্যাখ্যা করা একটু কঠিন তবে এটি আপনাকে অ্যালগরিদম কীভাবে কাজ করে তার একটি সাধারণ ধারণা দেওয়া উচিত।


2

পাইথন 2, 129 বাইট

import re,sys
print''.join(t[1] for t in sorted(re.findall(r'(\d+), -\d+\)"\>(.)\</t',sys.stdin.read()),key=lambda t:int(t[0])))

স্ট্যান্ডিনে এইচটিএমএল উত্স নেয়, স্টডআউটে কোড উত্পাদন করে।


কিভাবে এই আউটপুট সাজান? <text>উপাদান একটি র্যান্ডম ক্রম হয়, এবং শুধুমাত্র বাস্তব প্রয়োজন আপনি তাদের সঠিক অনুক্রমে দিতে হবে যে। এর অর্থ আপনাকে এর থেকে ব্যবহার করতে xহবে <text>এবং কোনও রূপান্তর অনুসরণ করতে হবে।
ব্র্যাড গিলবার্ট 222

@ ব্র্যাডগিলবার্টবিগিলস আমি মিস করেছি যে প্রথমবারের মতো এখনই স্থির।
orlp

2

গণিত, 106 বাইট

""<>(v=ImportString[#~StringDrop~157,"XML"][[2,3,4;;;;2]])[[;;,3]][[Ordering[FromDigits/@v[[;;,2,2,2]]]]]&

দ্রষ্টব্য: ইনপুটটি উদাহরণ দ্বারা নির্দিষ্ট ফর্ম্যাটটিতে থাকা দরকার।


2

ভি , 28 26 25 24 বাইট

d5j́x=
ún
J́">
lH$dÍî

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

d5j              delete first 6 lines
   Í<0x81>x=     In every line, replace everything up to x=" (inclusive) by nothing
ún               Sort numerically
J                Join line (closing </svg>) with next line
 Í<0x81>">       In every line, replace everything up to "> by nothing
l␖H$d            Visual block around closing </text> tags, delete
     Íî          In every line, replace \n by nothing.

HexDump:

00000000: 6435 6acd 8178 3d0a fa6e 0a4a cd81 223e  d5j..x=..n.J..">
00000010: 0a6c 1648 2464 cdee                      .l.H$d..

2

কোয়াডস , 49 বাইট

c[⍋⊃x c←↓⍎¨@1⍉(⊢⍴⍨2,⍨.5×≢)3↓⍵]
x="(\d+)
>(.)<
\1

এটি অনলাইন চেষ্টা করুন!

এক্স মানগুলি (পরে অঙ্কগুলি চালায় x=") এবং "অক্ষরগুলি" (ট্যাগগুলি বন্ধ করে এবং খোলার মাধ্যমে পিন করা) সন্ধান করে, তারপরে নিম্নলিখিত এপিএলটি নির্বাহ করুন (যেখানে উপস্থিত মানের অনুসারে x মান এবং অক্ষরের তালিকা রয়েছে):

3↓⍵ প্রথম তিনটি উপাদান (চারপাশের ফাঁকা জায়গা <rect... /rect>এবং <rect'এসএক্স মান) বাদ দিন ।

() এটিতে নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

 বাকি আইটেমের সংখ্যা

.5× অর্ধেক

2,⍨ একটি দুটি সংযুক্ত করুন

⊢⍴⍨ এই আকারে পুনরায় আকার দিন (অর্থাত্ একটি এন × 2 ম্যাট্রিক্স)

 স্থানান্তর (একটি 2 × n ম্যাট্রিক্সে)

⍎¨@1 প্রথম সারিতে প্রতিটি স্ট্রিং চালান (তাদের সংখ্যায় পরিণত করা)

 ম্যাট্রিক্সকে দুটি ভেক্টরে বিভক্ত করুন (প্রতি সারিতে একটি)

x c← এই দুটি যথাক্রমে x (x মান) এবং সি (অক্ষর) এ সঞ্চয় করুন

 প্রথমটি বেছে নিন (এক্স)

 গ্রেড আপ (সূচকগুলি x এর মধ্যে সূচকগুলি x অনুসারে বাছাই করবে)

c[] ইনডেক্সে এটি ব্যবহার করুনc

n তালিকা (সমতল) কারণ প্রতিটি অক্ষর নিজেই একটি স্ট্রিং


পুরো কোয়াডএস প্রোগ্রামের সমতুল্য এপিএল প্রকাশটি হ'ল:

c[⍋⊃x c←↓⍎¨@1⍉(⊢⍴⍨2,⍨.5×≢)3'x="(\d+)"' '>(.)<'S'\1'⊢⎕]

1

জাভা 8, 197 173 বাইট

import java.util*;s->{String a[]=s.split("x=\""),r="";Map m=new TreeMap();for(int i=2;i<a.length;m.put(new Long(a[i].split("\"")[0]),a[i++].split(">|<")[1]));return m.values();}

java.util.Collectionঅক্ষরের একটি আউটপুট দেয় ।

ব্যাখ্যা:

এটি অনলাইনে চেষ্টা করুন।

import java.util*;            // Required import for Map and TreeMap
s->{                          // Method with String as both parameter and return-type
  String a[]=s.split("x=\""), //  Split the input by `x="`, and store it as String-array
         r="";                //  Result-String, starting empty
  Map m=new TreeMap();        //  Create a sorted key-value map
  for(int i=2;                //  Skip the first two items in the array,
      i<a.length;             //  and loop over the rest
    m.put(new Long(a[i].split("\"")[0]),
                              //   Split by `"` and use the first item as number-key
          a[i++].split(">|<")[1]));
                              //   Split by `>` AND `<`, and use the second item as value
    return m.values();}       //  Return the values of the sorted map as result

1

গেমার , 65 টি অক্ষর

x\="<D>*\>?=@set{$1;?}
?=
\Z=${5}${25}${45}${65}${85}${105}${125}

গেমায় কোনও বাছাই নেই, তবে ভাগ্যক্রমে এমনকি এটির প্রয়োজনও নেই।

নমুনা রান:

bash-4.4$ gema 'x\="<D>*\>?=@set{$1;?};?=;\Z=${5}${25}${45}${65}${85}${105}${125}' < captcha.svg
8u4x81f

1

এক্সএমএল স্টারলেট , 46 টি অক্ষর

xmlstarlet sel -t -m //_:text -s A:N:U @x -v .

আশা করা যায় এটি XMLStarlet হ'ল ট্রান্সপ্লেলার যা এক্সএসএলটি কোড উত্পন্ন করে এবং কার্যকর করে, এটি একটি কার্যকর সমাধান solution

নমুনা রান:

bash-4.4$ xmlstarlet sel -t -m //_:text -s A:N:U @x -v . < captcha.svg 
8u4x81f

1

পিএইচপি, 96 বাইট

দেওয়া হয় যে $iইনপুট স্ট্রিং

preg_match_all('|x="(\d+).*(.)\<|',$i,$m);$a=array_combine($m[1],$m[2]);ksort($a);echo join($a);

1
পরিবর্তে array_combine()+ + ksort()আপনি ব্যবহার করতে পারে array_multisort()এই রকম: array_multisort($m[1],$m[2]);echo join($m[2]);। তবে দয়া করে নোট করুন যে সমাধানগুলি আশা করে যে ইনপুট এবং আউটপুটটি নিজেই পরিচালনা করবে (যদি ভাষা এটি স্বয়ংক্রিয়ভাবে না করে তবে) পরিবর্তে কোনও ভেরিয়েবলের ইনপুটটি খুঁজে পাওয়ার আশা করে বা ফলটি একটি ভেরিয়েবলের মধ্যে রেখে দেয়। সম্পর্কিত মেটা দেখুন
manatwork

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.