Деление - КОНКУРС ( 1000$ платит микрософт)

Aliens

Известный деятель города
#1
Вот типичная задача, без всякой специфики 3D ...всякого медиа....и всякого железа... вообще против всякой специфики в данном случае - наша задача: сравнить эффективность языков и эффективность алгоритмов - а не показать свою крутость во всем и супер-эрудицию !!! А показать лишь умение в избранном вами языке или доказать своим примером - что язык этот чем-то лучше других.

.............Почему такая простая задача? :

И если хочется сравнить именно языки - то давайте не будем "лезть в дебри" и использовать чужой код. А напишем одну и ту же прогу на разных языках - И никаких импортных DLL или 3D - ведь их функции вы не сами пишите... они из DLL импортируются.....и на каком языке они писаны - ничего не доказывает...может прямо-таки и на ассемблере - ну и что... это лишь предпочтения их авторов.

................... И все же:

Cравнивать конкретно языки у нас не получиться - потому что некоторая часть кода останется под вопросом - так как неизвестно как этот язык писали (и может есть изъяны в реализации языка - у самих его разработчиков именно в том месте, где автор программы хотел им воспользоваться)

Следовательно : Мы можем сравнить лишь всё вместе:
т.е. Вашу работу+работу разработчиклв C ,
и например :
мою работу+Borland....

сравнить мы можем лишь эти суммарные работы - между собой.

=========================================

Задача:

Задан текстовый файл в кодировке ANSI 1251 содержащий русско/английский текст, выдать полную статистику по всем словам в алфавитном порядке указав частоту их появления.

Замечания
1. ОБЩИЕ
1.1 знаки припинания , цифры и прочие символы - пропустить (или заменить на пробелы)
1.2 - разделители слов стандартные: пробел , табуляция, перевод строки; или несколко из них подряд
1.3 - слова учитывать не менее чем длиной 3 символа...

2. ФАЙЛЫ
2.1 - Результат вывести в другой текстовй файл - в кодировке ANSI 1251
2.2 - можете предполагать что исходный файл для тестирования будет не менее 1 Мб длиной....
2.3 - имя и путь исходного файла должно передаваться как 1й аргумент коммандной строки
2.4 - имя конечного файла-результат как 2 й аргумент

3. ВРЕМЯ
3.1 - время исполнения программы выдается стандартной функцией WINAPI: MessageBox т.е. в графическом окошке.
3.2 Время засекается от запуска программы :
для С: - в функции main - должна быть первая же строка с запоминанием текущего времени через GetTickCount
для Delphi: первая строка в файле проекта (DPR) сразу после begin
3.3 конец отсчета времени сразу после закрытия конечного файла - файл должен быть закрыт программой, а не ОС при завершении процесса...
3.4 время выдается в миллисекундах... никаких округлений и задержек типа while....do и.т.п. вот так примерно:

{закрытие файла}
Time = GetTickCount() - LastTime
{далее оператор преобразования в строку и вывод через MessageBox}

4. ЯЗЫК
4.1. Ассемблерными вставками в вашей программе - пользоваться запрещено, используйте один язык - без своих или чужих DLL или OBJ
4.2. Алгоритм выбирайте произвольный - в этом и состоит выбор программиста
4.3. Исходные коды и алгоритмы будем рассматривать позже...вы будете вправе их скрыть, но тогда ваш результат будет под вопросом "?"

5. ТЕСТИРОВАНИЕ
там посмотрим : ясно только что придется это делать на одной машине.... одной ОС и вероятно в одно и то же время (одну за одной)...

.

===========================
Если условия не точны - так уточним давайте сначала.
А если все ясно:

Ну господа !?
Кто желает поучавствовать и кто какой язык выбирает?
 

rasta-koy

Гость города
#6
Потарахтели, потарахтели и забыли, нехорошо, однако.
Тут решается вопрос судя по всему, кто окажется круче, вот только по поводу языков мне немного непонятно. Какие из языков ты предлагал на выбор паскаль, бейсик, асаемблер, сишку либо с++ или это и надо доказать, какой из гних круче, вернее, на каком из них ты круче, и круче ли ты на нем, чем остальные на другом?
 

Aliens

Известный деятель города
#7
rasta-koy
почитай тему "ДЕЛЕНИЕ" там много чего написано, а это её продолжение...

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

Здесь кое кто говорил что-то типа "главное правильный язык выбрать, а алгоритм это на 2м месте".... так вот заодно и получили бы опровержение.... нет, конечно на бейсике не напишешь так чтобы работало быстрее чем на ассемблере....но C и Delphi соперничать могут, и здесь алгоритм важнее выбора языка...
 

rasta-koy

Гость города
#9
А по мне, так если алгоритм будет правильный да еще и язык правильно подобрать, то получится просто прелесть
 

Little Slut

Гость города
#11
Вариант на Scheme ;)
написано в смешанном императивно-функциональном стиле ;)
найдете интерпритаторкомпилятор "схемы" померейте скорость.... мне впадяк...

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; implementation of fold algorithm, more preciselly fold-right
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (fold sequence initial op)
(if (null? sequence)
initial
(op (car sequence)
(fold (cdr sequence) initial op))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; node abstraction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (make-node ch)
(cons (cons ch 0) '()))


(define (print-node node)
(display (data-char node)))


(define (data-char node)
(caar node))


(define (data-count node)
(cdar node))


(define (data-inc-count! node)
(set-cdr! (car node) (+ (data-count node) 1)))


(define (children node)
(cdr node))


(define (find-child node ch)
(fold (children node)
'()
(lambda(x y) (if (eq? (data-char x) ch)
x
y))))


(define (add-child-node node child)
(define (set-children! node children)
(set-cdr! node children))
(set-children! node (cons child
(children node))))


(define (find-or-create-child-node node ch)
(let ((found (find-child node ch)))
(if (null? found)
(let ((new-node (make-node ch)))
(add-child-node node new-node)
new-node)
found)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; builds something like suffix tree and after that print it to a standard output
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (count-words filename)
(define root (make-node 'root))

(define (build-tree node file)
(let ((ch (read-char file)))
(cond ((eof-object? ch)
'done)
((char-whitespace? ch)
(data-inc-count! node)
(eat-whitespaces file)
(build-tree root file))
(else (build-tree (find-or-create-child-node node ch) file)))))

(define (print-tree node)
(define (iter node word)
(let ((new-word (cons (data-char node) word)))
(fold (children node) new-word iter)
(if (and (> (length new-word) 2) (> (data-count node) 0))
(begin
(display (list->string (reverse new-word)))
(display " ")
(display (data-count node))
(display "n")))
(cdr new-word)))
(fold (children node) '() iter))

(call-with-input-file filename (lambda (file) (build-tree root file)))
(print-tree root))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Do it!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(count-words "text.txt")
 

Aliens

Известный деятель города
#13
потому что все сообщения обрабатываются PHP скриптом, и я вижу - не плохо обрабатываются....


А что касается вообще этой темы - то закрыть наверное надо...я так думаю....