Text processing/Max licenses in use: Difference between revisions
Content added Content deleted
(→{{header|J}}: use Python's algorithm & assumptions, to make it easier to compare) |
|||
Line 45: | Line 45: | ||
maxouttimes.append(time) |
maxouttimes.append(time) |
||
else: |
else: |
||
out -=1 |
out -= 1 |
||
return maxout, maxouttimes |
return maxout, maxouttimes |
||
if __name__ == '__main__': |
if __name__ == '__main__': |
||
log = |
log = open('license_example_log.txt') |
||
maxout, maxouttimes = max_out(log) |
maxout, maxouttimes = max_out(log) |
||
log.close() |
log.close() |
||
print "Maximum simultaneous license use is %i at the following times: |
print "Maximum simultaneous license use is %i at the following times:" % maxout |
||
for x in maxouttimes: |
|||
print x</python> |
|||
Example output: |
Example output: |
||
<pre>Maximum simultaneous license use is 99 at the following times: |
<pre>Maximum simultaneous license use is 99 at the following times: |
Revision as of 06:15, 4 October 2008
Text processing/Max licenses in use
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
A company currently pays a fixed sum for the use of a particular licensed software package. In determining if it has a good deal it decides to calculate its maximum use of the software from its license management log file.
Assume the softwares file faithfully records a checkout event when a copy of the software starts and a checkin event when the software finishes. An example of checkout and checkin events are:
License OUT @ 2008/10/03_23:51:05 for job 4974 ... License IN @ 2008/10/04_00:18:22 for job 4974
Save the 10,000 line log file from here* into a local file then write a program to scan the file extracting both the maximum licenses that were out at any time, and the time(s) at which this occurs.
- Note: The page uses javascript to display a text file, so it may be best to cut-n-paste from a browser to a text file rather than downloading the URL.
J
NB. Parse data, select columns 'I D' =: (8 ; 14+i.19) { ::]"1 L:0 ];._2 ] 1!:1 ::(''"_) <'licenses.txt' NB. Calculate number of licenses used at any given time lu =: +/\ _1 ^ 'OI' i. I NB. Find the maxima mx =: (I.@:= >./) lu NB. Output results (mx { D) ,~ 'Maximum simultaneous license use is ' , ' at the following times:' ,~ ": {. ,mx { lu Maximum simultaneous license use is 99 at the following times: 2008/10/03_08:39:34 2008/10/03_08:40:40
Python
Python 2.6 <python>def max_out(logfile):
maxout = 0 maxouttimes = [] out = 0 for line in logfile: direction = line[8] time = line[14:33] if direction == 'O': out += 1 if out > maxout: maxout = out maxouttimes = [time] elif out == maxout: maxouttimes.append(time) else: out -= 1 return maxout, maxouttimes
if __name__ == '__main__':
log = open('license_example_log.txt') maxout, maxouttimes = max_out(log) log.close() print "Maximum simultaneous license use is %i at the following times:" % maxout for x in maxouttimes: print x</python>
Example output:
Maximum simultaneous license use is 99 at the following times: 2008/10/03_08:39:34 2008/10/03_08:40:40