How to resolve the algorithm Text processing/Max licenses in use step by step in the Factor programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Text processing/Max licenses in use step by step in the Factor programming language
Table of Contents
Problem Statement
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 software's licensing daemon faithfully records a checkout event when a copy of the software starts and a checkin event when the software finishes to its log file. An example of checkout and checkin events are:
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. Mirror of log file available as a zip here (offsite mirror).
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Text processing/Max licenses in use step by step in the Factor programming language
Source code in the factor programming language
USING: kernel sequences splitting math accessors io.encodings.ascii
io.files math.parser io ;
IN: maxlicenses
TUPLE: maxlicense max-count current-count times ;
<PRIVATE
: <maxlicense> ( -- max ) -1 0 V{ } clone \ maxlicense boa ; inline
: out? ( line -- ? ) [ "OUT" ] dip subseq? ; inline
: line-time ( line -- time ) " " split harvest fourth ; inline
: update-max-count ( max -- max' )
dup [ current-count>> ] [ max-count>> ] bi >
[ dup current-count>> >>max-count V{ } clone >>times ] when ;
: (inc-current-count) ( max ? -- max' )
[ [ 1 + ] change-current-count ]
[ [ 1 - ] change-current-count ]
if
update-max-count ; inline
: inc-current-count ( max ? time -- max' time )
[ (inc-current-count) ] dip ;
: current-max-equal? ( max -- max ? )
dup [ current-count>> ] [ max-count>> ] bi = ;
: update-time ( max time -- max' )
[ current-max-equal? ] dip
swap
[ [ suffix ] curry change-times ] [ drop ] if ;
: split-line ( line -- ? time ) [ out? ] [ line-time ] bi ;
: process ( max line -- max ) split-line inc-current-count update-time ;
PRIVATE>
: find-max-licenses ( -- max )
"resource:work/mlijobs.txt" ascii file-lines
<maxlicense> [ process ] reduce ;
: print-max-licenses ( max -- )
[ times>> ] [ max-count>> ] bi
"Maximum simultaneous license use is " write
number>string write
" at the following times: " print
[ print ] each ;
( scratchpad ) [ find-max-licenses print-max-licenses ] time
Maximum simultaneous license use is 99 at the following times:
2008/10/03_08:39:34
2008/10/03_08:40:40
Running time: 0.16164423 seconds
You may also check:How to resolve the algorithm Partition function P step by step in the J programming language
You may also check:How to resolve the algorithm Long multiplication step by step in the Lambdatalk programming language
You may also check:How to resolve the algorithm Greatest subsequential sum step by step in the Scheme programming language
You may also check:How to resolve the algorithm Interactive programming (repl) step by step in the GAP programming language
You may also check:How to resolve the algorithm Own digits power sum step by step in the PARI/GP programming language