Здравствуйте, samius, Вы писали:
S>Примечательно что ТС решил что задача получения размещений с повторами 5 из 10 (миллиона штук паролей) эквивалентна по сложности и представил свое время — 45 сек. Хотя с этими же условиями на F# — 1/3 секунды.
Оть ыть как бывает. Уже на ФШарпе 1/3 секунды.
А вот здесь пациент
Как бы там не было, давайте финализируем условия этой задачи на.
"Генерить все пароли начиная с позиции ССССА с неповторяющимися символами. Все сгенерированые пароли сложить в массив".
Здесь и всех циплят пересчитаем в том числе и по навязаному мне перформанцу
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, PC_2, Вы писали:
PC_>Как бы там не было, давайте финализируем условия этой задачи на. PC_>"Генерить все пароли начиная с позиции ССССА с неповторяющимися символами.".
Куда половину задачи откусил? Будь добр придерживаться изначального плана.
Генерить первый миллион паролей, начиная с позиции ССССА с неповторяющимися символами.
PC_>Все сгенерированые пароли сложить в массив
У тебя ж массивы на печать не выводятся, как доказывать будешь, что твоя прога работает — опять в дебаг лезть заставишь?
Здравствуйте, Пацак, Вы писали:
П>Здравствуйте, samius, Вы писали:
П>Хм... Непонятки...
П>Непонятка 1: Я правильно понял, что исходная задача — это сгенерить первые миллион пятисимвольных паролей, в каждом из которых нет повторяющихся символов? Т.е. нечто типа такого?
П>
П>abcdef
П>abcdeg
П>
Это не то что бы исходная задача, но именно та задача о которой я выкладывал замеры времени работы.
П>Непонятка 2: Я правильно понял, что вместо этого автор выложил такой результат?
П>
П>aaaaa
П>aaaab
П>
Результат он не выложил, но выложил замер работы кода, приводящий к подобному результату с той лишь разницей что в качестве алфавита были использованы цифры. П>Если да, то: П>1) насколько я понимаю, эти вычисления действительно могут выполняться примерно одинаковое время — если, конечно, не решать задачу "в лоб", поэлементно проверяя уже сгенеренную последовательность
Да, верно. Но как раз ТС предлагает проверять последовательность "в лоб"....
П>2) количество символов в исходном словаре и длина паролей для нее, по идее, тоже не должны оказывать серьезного влияния на время расчета — только количество паролей, которые нужно сгенерить
В общем случае — верно. Но в задаче 6 из 10 с повторами нет миллиона паролей без повторов.
Да и как бы наличие повторов сильно сказывается на времени, если фильтровать "в лоб".
П>и 3) добиться того, чтобы эти задачи выполнялись 45 секунд на авторском супер-пупер-восьмиядерном компьютере — это, блин, надо постараться. Впрочем, от программы с eval'ом ничего другого ждать имхо не приходится...
фиг с ними с 45-ю секундами. Неплохо для интерпретатора без оптимизаций, да и число ядер не играет роли в однопоточной версии. Евал накладных расходов не дает, т.к. выполняется тем же интерпретатором, что и основной код.
А беспокоит меня то, что ТС отказывается предоставлять нефильтрующее решение генератора без повторов. Дело либо в том что язык не позволяет, либо в том что нефильтрующее решение будет много длинее, чем фильтрующее.
Да, а кстати, если к кол-ву символов решения автора приплюсовать код оператора "тильда
", то решение на РС выигрывает не так много по кол-ву символов
РС — 90
F# — 97
let d=List.append
let f=List.filter
let o=printfn "%A"let rec z a=function 0->[[]]|k->[for x in a do for r in z(f((<>)x)a)(k-1)->d[x]r]
z['1'..'9']3|>o
Первые 3 строчки не считаем, т.к. это подмена идентификаторов методов на однобуквенные. Считаем что мы внесли их в язык
Здравствуйте, Пацак, Вы писали:
П>Здравствуйте, Пацак, Вы писали:
П>>и 3) добиться того, чтобы эти задачи выполнялись 45 секунд на авторском супер-пупер-восьмиядерном компьютере — это, блин, надо постараться. Впрочем, от программы с eval'ом ничего другого ждать имхо не приходится...
П>Хотя... Если все пароли выводить на экран... Я-то вывод в файл перенаправлял, а вот как вы с автором — не знаю.
У него нет вывода результата евала. Я его вживую не видел.
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, samius, Вы писали:
S>>Примечательно что ТС решил что задача получения размещений с повторами 5 из 10 (миллиона штук паролей) эквивалентна по сложности и представил свое время — 45 сек. Хотя с этими же условиями на F# — 1/3 секунды.
PC_>Оть ыть как бывает. Уже на ФШарпе 1/3 секунды. PC_>А вот здесь пациент
утверждал что 1.5 минуты, PC_>Там у пациента только скип работал 45 секунд. Оправдывался несовершенством своего настольного железа.
PC_>Показания меняются ото дня ко дню
Мне простительно — запутался в десятках рабочих версий
Ленивая версия вычисляет первый миллион паролей без повторов длиной 6 из 30 за 18 сек.
Но ты не расслабляйся, т.к. среди всех паролей 6 из 10 лишь 151200 паролей без повторов. Что бы набрать миллион без повторов, тебе нужно зайти по 6 с алфавитом не менее 13 символов, либо по 8 из 10...
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, PC_2, Вы писали:
PC_>Как бы там не было, давайте финализируем условия этой задачи на. PC_>"Генерить все пароли начиная с позиции ССССА с неповторяющимися символами. Все сгенерированые пароли сложить в массив".
PC_>Здесь и всех циплят пересчитаем в том числе и по навязаному мне перформанцу
S>let d=List.append
S>let f=List.filter
S>let o=printfn "%A"
S>let rec z a=function 0->[[]]|k->[for x in a do for r in z(f((<>)x)a)(k-1)->d[x]r]
S>z['1'..'9']3|>o
S>
S>Первые 3 строчки не считаем, т.к. это подмена идентификаторов методов на однобуквенные. Считаем что мы внесли их в язык
Еще подрасширил F#, введя односимвольные алиасы для следующих функций
let e x = List.filter ((<>)x) // except
let c = List.collect
let m = List.map
let i x = List.append [x] // cons x
let o = printfn "%A"let ($) = (<|)
let rec z a=function 0->[[]]|k->c(fun x->m(i x)(z(e x a)(k-1)))a
o$z['1'..'9']3
Теперь все решение можно записать в 79 символов, включая '\n'.
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, samius, Вы писали:
PC_>Сеня Браво ! Это талант ! PC_>Я так проникся твоими рассуждениями что чуть не прослезился и решительно решил завтра выложить тебе PC_>рабочую версию
Ну дык что, Пуся? Почти 36 часов прошло... Проблемы с решительностью или с рабочей версией?
PC_>ЗЫ: PC_>Да кстате вотети все ,х1 и прочьи это унарный оператор.
Сразу как-то не бросилось в глаза... Унарный оператор запятая — это прорыв! Страуструп глотает пыль!
PC_>И ежели унарный не определен для этого типа токена, то возвращается просто х1
Тоже отличное решение
Здравствуйте, olexandr, Вы писали:
O>Народ, а как вы думаете, кто это нас так <strike>троллит</strike>смешит? Я уверен на 95% что кто-то из старожилов.
Сам сначала подумал, что это IT прикалывается, но после стольких усилий PC_2 — не верю.
Здравствуйте, novitk, Вы писали:
O>>Народ, а как вы думаете, кто это нас так <strike>троллит</strike>смешит? Я уверен на 95% что кто-то из старожилов. N>Сам сначала подумал, что это IT прикалывается, но после стольких усилий PC_2 — не верю.
Возможно какой-нибудь скучающий сисадмин, или даже безопасник? И шо там тех усилий на форуме флудить и гаденько хихикать потирая рученки и представляя как бесятся некоторые местные глыбы пытаясь удержаться в русле беседы
Тем более главный прием реализации насколько я успел понять состоит в публикации заклинаний в стиле "там работы на час максимум, поэтому я делать ее не буду, писать надо будет както так, и вообще напишите мне генератор пароле на немерле, только чтоб пароли начинались с ССССА, а по пятницам были не длинее 4 символов".
Некроссплатформенность маловероятна (c) Sheridan
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, samius, Вы писали:
S>>let rec z a=function 0->[]]|k->[for x in a do for r in z(f((<>)x)a)(k-1)->d[x]r] S>>z['1'..'9']3|>o S>>[/ocaml]
PC_>Ты можешь внятно описать задачу которую ты здесь решал ?
Не уверен, что получится достаточно внятно для тебя, но попробую:
Процитированный код выводит все размещения по 3 без повторов набора '1'..'9'
PC_>Опять идет подмена понятий как с тем перлистом.
PC_>Еще раз — выпиши четко по пунктам условие задачи которую нужно решить.
Эту задачу выдумал ты, если мне не изменяет память (перечитывать ветку что бы в этом убедиться у меня нет ни малейшего желания), что бы продемонстрировать гибкость РС. Речь шла о паролях.
Так что и флаг тебе...
Здравствуйте, samius, Вы писали:
PC_>>Ты можешь внятно описать задачу которую ты здесь решал ? S>Не уверен, что получится достаточно внятно для тебя, но попробую: S>Процитированный код выводит все размещения по 3 без повторов набора '1'..'9'
давай точнее
тоесть это последовательность паролей
xyz
где х,y,z принимают любые значения от 1 до 9 и при этом х y z не равны друг между друга ?
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, PC_2, Вы писали:
PC_>Здравствуйте, samius, Вы писали:
PC_>>>Ты можешь внятно описать задачу которую ты здесь решал ? S>>Не уверен, что получится достаточно внятно для тебя, но попробую: S>>Процитированный код выводит все размещения по 3 без повторов набора '1'..'9'
PC_>давай точнее PC_>тоесть это последовательность паролей
Последовательность взевозможных паролей.
PC_>xyz PC_>где х,y,z принимают любые значения от 1 до 9 и при этом х y z не равны друг между друга ?
в рамках одного набора