Цитата:
Цитата:
|
oneguy, что-то получилось.
кто не хочет - пусть не смотрит. // это такой хайд :) var reg = eval(Array.prototype.map.call("2+1.,+B@_4-/_4.',2", function (a) { return String.fromCharCode(a.charCodeAt() - 3); }).join('')); // рега без флагов ! alert( false === reg.global === reg.ignoreCase === reg.multiline ); function gcd(m, n) { return (Array(m+1).join("*")+","+Array(n+1).join("*")).match(reg)[0].length; } alert( gcd(3, 4) ); // 1 - :) alert( gcd(3, 6) ); // 3 alert( gcd(15, 25) ); // 5 alert( gcd(35, 42) ); // 7 alert( gcd(42, 35) ); // 7 (!) - порядок чисел неважен. |
Цитата:
|
Не, не знаю как решить
|
Цитата:
function gcd(m, n) { return (Array(m+1).join("*")+","+Array(n+1).join("*")).match(/(.+)(?=\1*,\1+$)/)[0].length; } alert( gcd(3, 4) ); // 1 - :) alert( gcd(3, 6) ); // 3 alert( gcd(15, 25) ); // 5 alert( gcd(35, 42) ); // 7 alert( gcd(42, 35) ); // 7 (!) - порядок чисел неважен. ... либо я туплю, не понимаю, о чём Вы, и прошу пояснить. |
melky,
Да, извините, я не сразу понял, что там регулярка просто закодирована и не зависит ни от каких данных. Засчитал. Решили с моей подсказкой или без? |
По ходу я конкретный тормоз >.< Еси до этого не додумался
|
Цитата:
Код:
1. gcd(2, 4) - простое и составное было 3 варианта, два - неверные. после того, как зашел на форум, увидел подсказку, и понял, что я на верном пути. дальше я всё время добивал регулярку :) |
melky,
oneguy, раз уж я не понимаю регулярку melky - можете мне её пожалуста объяснить, вот как я её вижу / (.+) // просто получаем все содержимое (?=\1* // опять получаем все содержимое ,\1+$) // <<<<----WTH? / |
oneguy,
melky, в общем я то думал что хорошо знаю реги (они мне в отличии от других людей быстро и понятно давались, но в 4-ом Флэнагане(как же писать его имя не жирным шрифтом ;) )(и по которому я учился) не было того что написал melky), а в результате я их не очень хорошо знаю |
/(.+)(?=\1*,\1+$)/ это значит - получаем символы (кроме пробела), за которыми следует такое же количество символов нуль или более раз, затем идет запятая, затем следует опять то количество символов один или несколько раз, которые находятся в конце входных данных))) Я понятно обьяснил? |
Hekumok,
неа, Цитата:
|
Dim@, я постараюсь объяснить. Вы понимаете как работают обратные ссылки? Они ловят ту же подстроку, которая была поймана в захватывающие скобки с указанным порядковым номером.
/ (.+) // ловит несколько звёдочек (допустим, n) (?=\1* // количество звёздочек, кратное n, \1 ловит ту же подстроку, которая была захвачена в (.+) , //символ запятая \1+ //количество звёздочек, кратное n $ //конец входящей строки / Следовательно, поиск удаётся только когда n является общим делителем количества звёздочек слева и справа от запятой. Поскольку использовался жадный квантификатор, то интерпретатор остановился на наибольшем общем делителе указанных чисел. (.+) действительно вначале проверяет всю входящую строку, но дальше поиск не удаётся, поэтому постепенно сокращает количество в квантификаторе. |
|
oneguy,
Хотя с точки зрения скоростной оптимальности- это лишь кубик рубик интелекта при больших числах наверняка - ток массивы и циклы ? |
oneguy,
Цитата:
oneguy, спасибо :dance: |
Цитата:
|
Цитата:
|
Цитата:
|
oneguy,
интересно мне почему он ищет кратное n, а не общее наибольшое n?:blink: |
Цитата:
|
Цитата:
/ (.+) // пытается сожрать всю строку, но (?=\1* // опережающая проверка отменяет совпадение, если условие, следующее далее не является истинным. С того же места, где была захвачена подстрока (.+) начинается первая проверка обратной ссылки - 0 или более символов, , // далее обязательная запятая и \1+ // вторая проверка обратной ссылки - 1 или более символов $ //конец входящей строки / Цитата:
|
Цитата:
|
Цитата:
Цитата:
вообще, я этой реги сам боюсь) вот её обьяснение, от создателя : / (.+) // хавает какую-то строку. (?=\1* // далее она повторяется несколько раз, или не повторяется вообще. , \1+ // <----- тут эта схаванная строка повторяется хотя бы один (!) раз, самое главное - без остатка (конец строки) $ // <-----| / |
Кстати, если это интересно, идею для этой задачи я увидел в спецификации: http://es5.javascript.ru/x15.10.html#x15.10.2.5, см. ПРИМЕЧАНИЕ 2, конец.
|
Цитата:
|
Часовой пояс GMT +3, время: 23:04. |