Я наткнулся на SVGCaptcha и сразу понял, что это плохая идея.
Я хотел бы, чтобы вы продемонстрировали, насколько это плохая идея, извлекая проверочный код из изображений SVG, создаваемых этим кодом.
Пример изображения выглядит следующим образом:
Вот источник изображения примера:
<?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>
Входные данные - изображение SVG, которое является текстовым форматом.
Единственное реальное ограничение - ваш код должен выдавать значения в правильном порядке . Элементы
ввода <text>
расположены в случайном порядке, поэтому вы должны обратить внимание на x
атрибут в <text>
теге
Оценка - это количество байтов в коде.
Поскольку код в настоящее время выполняет два преобразования, которые взаимно компенсируют друг друга, вы можете их игнорировать, но если вы все-таки учтете их, продолжайте и получите 30% -ное снижение от вашей оценки.
Ответы:
Баш ,
635639 байтПримечание: требуется
cat
,grep
,sort
,rev
, иcut
. Принимает ввод от стандартного ввода. Вывод разделен переносами строк в stdout. Убедитесь, что вы нажали CTRL + D (не COMMAND + D на Mac), когда закончили ввод капчи.За вводом должен следовать символ новой строки, а затем «_».РЕДАКТИРОВАТЬ : Сохранено 13 байтов.
РЕДАКТИРОВАТЬ 2 : Экономия 20 байтов благодаря @manatwork !
источник
sort
поддерживает положение символов в keydef:cut -c4-|sort -n
→sort -k1.4n
.CJam, 26 байтов
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
JavaScript,
959391 байтредактировать: -2 байта меняется
documentRoot
наlastChild
; -2 байта меняетсяjoin('')
наjoin``
, спасибо VɪʜᴀɴВведите код в консоли браузера на странице, связывающей SVG, о которой идет речь, пишет в вывод консоли.
источник
document.rootElement
перенастраивается не определено. Я пробовал Firefox и Safari('')
две метки: ``t=>(l=[],r=/x="(\d*).*?>(.)/g,eval("while(e=r.exec(t))l[e[1]]=e[2];l.join``"))
(принимает строку XML в качестве параметра, возвращает текст сPerl, 40 байт
39-байтовый код + 1 для -n
Пример:
источник
Утилиты Bash + GNU, 53
Как и в этом ответе , вывод - один символ на строку.
источник
Perl 6 , 68 байт
источник
Befunge, 79 байт
Такое ощущение, что можно было бы сыграть в гольф хотя бы еще один байт из этого, но я работаю над этим уже пару дней, и это настолько хорошо, насколько я смог получить.
Попробуйте онлайн!
объяснение
Сделайте направление выполнения справа налево и оберните вокруг, чтобы начать основной цикл.
Прочитайте символ из стандартного ввода и проверьте значение конца файла.
Если это не конец файла, проверьте, если это
>
.Если это не a
>
, добавьте его к значению в стеке, которое отслеживает последние два символа, и проверьте, совпадает ли текущая параx=
.Если нет, умножьте на 126 и модифицируйте с 126 2, чтобы отбросить самое старое значение из пары и освободить место для следующего символа.
Оберните снова, чтобы повторить основной цикл.
При обнаружении
x=
пары пропустите следующий символ (кавычку), прочитайте целое число ( значение x ) и разделите на 20. Это становится текущим смещением, которое сохраняется для последующего использования.Когда
>
встречается a , прочитайте следующий символ (обычно одну из букв капчи) и сохраните его с текущим смещением в «массиве». Сбросьте смещение на 9, чтобы буква капчи не была перезаписана при>
обнаружении более поздних символов.Наконец, когда достигается конец файла, переберите 7 значений, сохраненных в массиве, и выведите их одно за другим. Это должно дать вам все заглавные буквы в правильном порядке.
Я здесь приукрашиваю некоторые детали, поскольку пути кода перекрывают друг друга способами, которые немного сложно объяснить, но это должно дать вам общее представление о том, как работает алгоритм.
источник
Python2, 129 байт
Принимает исходный код HTML на стандартный ввод, производит код на стандартный вывод.
источник
<text>
элементы находятся в случайном порядке, и единственное реальное требование заключается в том , что вы должны поместить их в правильном порядке. Это означает, что вы должны использоватьx
from<text>
и следовать любым преобразованиям.Mathematica, 106 байт
Примечание. Входные данные должны быть точно в формате, указанном в примере.
источник
V ,
28262524 байтаПопробуйте онлайн!
Объяснение:
HexDump:
источник
QuadS , 49 байтов
Попробуйте онлайн!
Находит значения х (цифры идут после
x="
) и «буквы» (закреплены закрывающими и открывающими тегами), а затем выполняет следующую APL (где⍵
находится список найденных значений х и букв в порядке появления):3↓⍵
отбросьте первые три элемента (пробелы вокруг<rect
.../rect>
и значение<rect
'sx).(
…)
Примените к этому следующую молчаливую функцию:≢
количество оставшихся предметов.5×
вдвое2,⍨
добавить два⊢⍴⍨
изменить эту форму (то есть матрица n × 2)⍉
транспонировать (в матрицу 2 × n)⍎¨@1
выполнить каждую строку в первом ряду (превратив их в числа)↓
разбить матрицу на два вектора (по одному на строку)x c←
сохранить эти два в x (значения x) и c (символы) соответственно⊃
выбрать первый (х)⍋
оценка (индексы в х, которые будут сортировать х)c[
...]
использовать это для индексации вc
∊
ε NLIST (сплющить) , потому что каждая буква является строкой самого по себеЭквивалентное выражение APL всей программы QuadS:
источник
Ява 8,
197173 байтаВывод
java.util.Collection
символов.Объяснение:
Попробуйте онлайн.
источник
Гема , 65 знаков
В гема нет сортировки, но, к счастью, даже не нужна.
Образец прогона:
источник
XMLStarlet , 46 символов
Надеемся, что это правильное решение, так как XMLStarlet является транспортером, который генерирует и выполняет код XSLT, который является полным языком Тьюринга.
Образец прогона:
источник
PHP, 96 байт
Учитывая, что
$i
это входная строкаисточник
array_combine()
+ksort()
можно использоватьarray_multisort()
следующим образом:array_multisort($m[1],$m[2]);echo join($m[2]);
. Но учтите, что решения должны обрабатывать ввод и вывод самостоятельно (если язык не делает это автоматически), вместо того, чтобы ожидать, что вы найдете вход в переменной или просто оставите результат в переменной. Смотрите связанные мета .Чисто ,
277150 байтYay образец соответствия!
Попробуйте онлайн!
Определяет функцию
?
, принимая[Char]
и давать[Char]
.источник