newLISP:
Code: Select all
(set 'start-time (time-of-day))
(while (read-line)
(dolist (word (parse (current-line) {[^A-Za-z]+} 0))
(if (not (empty? word))
(sym word 'Words))))
(set 'middle-time (time-of-day))
(set 'char-count 0)
(dolist (word-sym (symbols Words))
(inc 'char-count (length word-sym)))
(set 'end-time (time-of-day))
(set 'fmt "%-34s%5d\n" )
(print (format fmt "Milliseconds to parse file: "
(- middle-time start-time)))
(print (format fmt "Milliseconds to count characters: "
(- end-time middle-time)))
(print (format fmt "Total milliseconds: "
(- end-time start-time)))
(println (length (symbols Words)) " words; "
char-count " characters")
Code: Select all
def mil( f ); (f * 1000).to_int; end
start_time = Time.now
words = {}
while line = gets
line.split( /[^A-Za-z]+/ ).each{ |word|
words[ word ] = true if not word.empty?
}
end
middle_time = Time.now
char_count = 0
words.each_key{ |word| char_count += word.size }
end_time = Time.now
fmt = "%-34s%5d\n"
puts fmt % [ "Milliseconds to parse file:",
mil(middle_time - start_time) ]
puts fmt % [ "Milliseconds to count characters:",
mil(end_time - middle_time) ]
puts fmt % [ "Total milliseconds: ",
mil(end_time - start_time) ]
puts "#{ words.size } words; #{ char_count } characters"
Code: Select all
Ruby:
Milliseconds to parse file: 11646
Milliseconds to count characters: 121
Total milliseconds: 11767
40821 words; 304947 characters
newLISP:
Milliseconds to parse file: 5538
Milliseconds to count characters: 70
Total milliseconds: 5608
40821 words; 304947 characters
Code: Select all
(set 'start-time (time-of-day))
(while (read-line)
(dolist (word (parse (current-line) {[^A-Za-z]+} 0))
(if (not (empty? word))
(if (sym word 'Words nil)
(inc (sym word 'Words))
(context 'Words word 1)))))
(set 'middle-time (time-of-day))
(set 'word-count 0)
(dolist (word-sym (symbols 'Words))
(inc 'word-count (eval word-sym)))
(set 'end-time (time-of-day))
(set 'fmt "%-34s%5d\n" )
(print (format fmt "Milliseconds to parse file: "
(- middle-time start-time)))
(print (format fmt "Milliseconds to count words: "
(- end-time middle-time)))
(print (format fmt "Total milliseconds: "
(- end-time start-time)))
(println word-count " words; " (length (symbols 'Words))
" unique words")
Code: Select all
def mil( f ); (f * 1000).to_int; end
start_time = Time.now
words = Hash.new( 0 )
while line = gets
line.split( /[^A-Za-z]+/ ).each{ |word|
words[ word ] += 1 if not word.empty?
}
end
middle_time = Time.now
word_count = 0
words.each_value{ |cnt| word_count += cnt }
end_time = Time.now
fmt = "%-34s%5d\n"
puts fmt % [ "Milliseconds to parse file:",
mil(middle_time - start_time) ]
puts fmt % [ "Milliseconds to count words:",
mil(end_time - middle_time) ]
puts fmt % [ "Total milliseconds: ",
mil(end_time - start_time) ]
puts "#{ word_count } words; #{ words.size } unique words"
Code: Select all
Ruby:
Milliseconds to parse file: 11827
Milliseconds to count words: 80
Total milliseconds: 11907
662846 words; 40821 unique words
newLISP:
Milliseconds to parse file: 6930
Milliseconds to count words: 60
Total milliseconds: 6990
662846 words; 40821 unique words