Как переводить цифры в пропись?

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63
Есть капча, которая предлагает решать пример и писать его прописью.
Отдаю в антигейт - оттуда приходит ответ цифрой.
Как преобразовать цифры в пропись?
Нашел скрипт, но не понимаю как конкретно прикрутить его в Зенно.
Помогите плиз, друзья

<body>
<script>
var parseNumber = function(){
var dictionary = [
[ "", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять",
"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" ],
[ "", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" ],
[ "", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот" ],
[ "тысяч|а|и|", "миллион||а|ов", "миллиард||а|ов", "триллион||а|ов" ]
];
function getNumber(number, limit){
var temp = number.match(/^\d{1,3}([,|\s]\d{3})+/);
if(temp) return temp[0].replace(/[,|\s]/g, "");
temp = Math.abs( parseInt(number) );
if( temp !== temp || temp > limit ) return null;
return String(temp);
};
function setEnding(variants, number){
variants = variants.split("|");
number = number.charAt( number.length - 2 ) === "1" ? null : number.charAt( number.length - 1 );
switch(number){
case "1":
return variants[0] + variants[1];
case "2": case "3": case "4":
return variants[0] + variants[2];
default:
return variants[0] + variants[3];
};
};
function getPostfix(postfix, number){
if( typeof postfix === "string" || postfix instanceof String ){
if( postfix.split("|").length < 3 ) return " " + postfix;
return " " + setEnding(postfix, number);
};
return "";
};

return function(number, postfix){
if(typeof number === "undefined")
return "999" + new Array(dictionary[3].length + 1).join(" 999");
number = String( number );
var minus = false;
number.replace(/^\s+/, "").replace(/^-\s*/, function(){
minus = true;
return "";
});
number = getNumber(number, Number( new Array(dictionary[3].length + 2).join("999") ));
if(!number) return "";
postfix = getPostfix(postfix, number);
if(number === "0") return "ноль" + postfix;
var position = number.length, i = 0, j = 0, result = [];
while(position--){
result.unshift( dictionary[ i++ ][ number.charAt(position) ] );
if(i === 2 && number.charAt(position) === "1" )
result.splice(0, 2, dictionary[0][ number.substring( position, position + 2 ) ]);
if(i === 3 && position !== 0 ){
i = 0;
if( position > 3 && number.substring( position - 3, position ) === "000" ){
j++; continue;
};
result.unshift( setEnding(dictionary[3][j++], number.substring( 0, position )) );
};
};
position = result.length - 5;
switch( result[position] ){
case "один": result[position] = "одна"; break;
case "два": result[position] = "две"; break;
};
if(minus) result.unshift("минус");
return result.join(" ").replace(/\s+$/, "").replace(/\s+/g, " ") + postfix;
};
}();
document.write('Функция работает с положительными и отрицательными целыми числами:<br>');
document.write('parseNumber("1002000") : ' + parseNumber("1002000") + '<br>');
document.write('parseNumber("-4012") : ' + parseNumber("-4012") + '<br>');
document.write('Понимает разделители (пробел и запятая):<br>');
document.write('parseNumber("10,125,300") : ' + parseNumber("10,125,300") + '<br>');
document.write('Вторым параметром можно указать, например, размерность:<br>');
document.write('parseNumber("3 111", "(руб.)") : ' + parseNumber("3 111", "(руб.)") + '<br>');
document.write('Чтобы размерность склонялась, нужно указать окончания через |:<br>');
document.write('parseNumber("24", "пользовател|ь|я|ей") : ' + parseNumber("24", "пользовател|ь|я|ей") + '<br>');
document.write('parseNumber("151px", "пиксел|ь|я|ей") : ' + parseNumber("151px", "пиксел|ь|я|ей") + '<br>');
document.write('Чтобы узнать максимальное число, нужно вызвать ф-цию без аргументов:<br>');
document.write('parseNumber() : ' + parseNumber() + '<br>');
</script>
</body>
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
а писать прописью как нужно? прям полностью "триста тридцать восемь" (это изврат, кажется), или "три три восемь"?
 

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
Тут куча функций, их так просто не вызовешь... в c# я бы это скомпилировал в DLL и подключал потом, а тут...
На безрыбье, оставь ты этот код на локальной html-страничке, открывай во второй вкладке и работай с ней как с обычными страницами.
 
  • Спасибо
Реакции: konfuciy

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63
Тут куча функций, их так просто не вызовешь... в c# я бы это скомпилировал в DLL и подключал потом, а тут...
На безрыбье, оставь ты этот код на локальной html-страничке, открывай во второй вкладке и работай с ней как с обычными страницами.
ну я сейчас так и делаю, только нашел стороннюю страницу, которая это выполняет, там у них свой скрипт какой-то.
а этот скрипт, когда его в хтмл файл кладешь непонятно как работает - форм ввода нет, только некую справку по скрипту выводит и все
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 956
Благодарностей
781
Баллы
113
можно с помощью экшенов логики, так же как в скрипте сначало определить сколько символов в числе и после этого строить логику, либо создать файл цифры:цифры прописью от и до и брать значения прописи из файла по соответствию
 
  • Спасибо
Реакции: konfuciy

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 956
Благодарностей
781
Баллы
113
тут уж как тебе быстрее будет, либо логику соединять, либо загоняй зенкой на той странице со скриптом значения от 1 до 8 и парси результат с сохранением в файл...
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 310
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

  • Спасибо
Реакции: konfuciy

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63
можно с помощью экшенов логики, так же как в скрипте сначало определить сколько символов в числе и после этого строить логику, либо создать файл цифры:цифры прописью от и до и брать значения прописи из файла по соответствию
вариант интересный в принципе, у меня всего 100 значений, пожалуй попробую напарсить с онлайн переводилки
 

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Благодарностей
131
Баллы
63
е
тут уж как тебе быстрее будет, либо логику соединять, либо загоняй зенкой на той странице со скриптом значения от 1 до 8 и парси результат с сохранением в файл...
я спарсил числа от 1 до 100 в таблицу эксель - левый столбец - цифрами, правый - прописью
как теперь использовать эту таблицу?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Список можно юзать.
Работа со списком - удалить строки не содержащие текст, удаляете все что не содержит вашу цифру, потом берете строку, проверяете наличие там именно вашей цифры и парсите из нее ответ, как он там записан
 
  • Спасибо
Реакции: konfuciy

schnaps

Client
Регистрация
07.02.2010
Сообщения
837
Благодарностей
150
Баллы
43
http://habrahabr.ru/post/53210/
вот здесь на пхп правда, самый расово верный перевод чисел в текст с извратом.
а в школе задача по информатике такая была. точно помню ))))
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
Список можно юзать.
Работа со списком - удалить строки не содержащие текст, удаляете все что не содержит вашу цифру, потом берете строку, проверяете наличие там именно вашей цифры и парсите из нее ответ, как он там записан
Я давно хотел попросить фичу «Операции со списком - найти позицию заданной записи»: указываешь, что искать, а она тебе в переменную возвращает индекс. Незаменимая вещь, когда надо по индексу данные из структуры забирать. Сейчас приходится в C# это делать. Добавите в список?

http://habrahabr.ru/post/53210/
вот здесь на пхп правда, самый расово верный перевод чисел в текст с извратом.
а в школе задача по информатике такая была. точно помню ))))
Вроде бы CodeCreator поддерживает проекты на PHP, можно просто в нём налабать шаблончик и дёргать его. Правда, не знаю, насколько это быстро будет (подозреваю, что небыстро).
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113

schnaps

Client
Регистрация
07.02.2010
Сообщения
837
Благодарностей
150
Баллы
43
Правда, не знаю, насколько это быстро будет (подозреваю, что небыстро).
можно поколупать и перевести на с# в принципе там несложно. я мог бы, но время нету.
мог бы время на эту задачу выделить, но не требуется она мне

офтоп. добавьте плиз на форум фичу, что когда по нику кликаешь, он в поле ответа появляется выделеный жирным. чтоб я как бы к пользователю обратиться мог по нику. ну и уведомление ему, что его упомянули.
 

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
можно с помощью экшенов логики, так же как в скрипте сначало определить сколько символов в числе и после этого строить логику, либо создать файл цифры:цифры прописью от и до и брать значения прописи из файла по соответствию
На логике самій бістрій вариант будет. Надо сложить массив 0-19, потом с десятками - 10, 20, 30... потом сотнями, потом тысячами...
Потом путем деления на 10 мы узнаем сколько разрядов у числа и на этом строим строку
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)