Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
93
Task/Text-processing-1/Forth/text-processing-1.fth
Normal file
93
Task/Text-processing-1/Forth/text-processing-1.fth
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
\ data munging
|
||||
|
||||
\ 1991-03-30[\t10.000\t[-]1]*24
|
||||
|
||||
\ 1. mean of valid (flag > 0) values per day and overall
|
||||
\ 2. length of longest run of invalid values, and when it happened
|
||||
|
||||
fvariable day-sum
|
||||
variable day-n
|
||||
|
||||
fvariable total-sum
|
||||
variable total-n
|
||||
|
||||
10 constant date-size \ yyyy-mm-dd
|
||||
create cur-date date-size allot
|
||||
|
||||
create bad-date date-size allot
|
||||
variable bad-n
|
||||
|
||||
create worst-date date-size allot
|
||||
variable worst-n
|
||||
|
||||
: split ( buf len char -- buf' l2 buf l1 ) \ where buf'[0] = char, l1 = len-l2
|
||||
>r 2dup r> scan
|
||||
2swap 2 pick - ;
|
||||
|
||||
: next-sample ( buf len -- buf' len' fvalue flag )
|
||||
#tab split >float drop 1 /string
|
||||
#tab split snumber? drop >r 1 /string r> ;
|
||||
|
||||
: ok? 0> ;
|
||||
|
||||
: add-sample ( value -- )
|
||||
day-sum f@ f+ day-sum f!
|
||||
1 day-n +! ;
|
||||
|
||||
: add-day
|
||||
day-sum f@ total-sum f@ f+ total-sum f!
|
||||
day-n @ total-n +! ;
|
||||
|
||||
: add-bad-run
|
||||
bad-n @ 0= if
|
||||
cur-date bad-date date-size move
|
||||
then
|
||||
1 bad-n +! ;
|
||||
|
||||
: check-worst-run
|
||||
bad-n @ worst-n @ > if
|
||||
bad-n @ worst-n !
|
||||
bad-date worst-date date-size move
|
||||
then
|
||||
0 bad-n ! ;
|
||||
|
||||
: hour ( buf len -- buf' len' )
|
||||
next-sample ok? if
|
||||
add-sample
|
||||
check-worst-run
|
||||
else
|
||||
fdrop
|
||||
add-bad-run
|
||||
then ;
|
||||
|
||||
: .mean ( sum count -- ) 0 d>f f/ f. ;
|
||||
|
||||
: day ( line len -- )
|
||||
2dup + #tab swap c! 1+ \ append tab for parsing
|
||||
#tab split cur-date swap move 1 /string \ skip date
|
||||
0e day-sum f!
|
||||
0 day-n !
|
||||
24 0 do hour loop 2drop
|
||||
cur-date date-size type ." mean = "
|
||||
day-sum f@ day-n @ .mean cr
|
||||
add-day ;
|
||||
|
||||
stdin value input
|
||||
|
||||
: main
|
||||
s" input.txt" r/o open-file throw to input
|
||||
0e total-sum f!
|
||||
0 total-n !
|
||||
0 worst-n !
|
||||
begin pad 512 input read-line throw
|
||||
while pad swap day
|
||||
repeat
|
||||
input close-file throw
|
||||
worst-n @ if
|
||||
." Longest interruption: " worst-n @ .
|
||||
." hours starting " worst-date date-size type cr
|
||||
then
|
||||
." Total mean = "
|
||||
total-sum f@ total-n @ .mean cr ;
|
||||
|
||||
main bye
|
||||
Loading…
Add table
Add a link
Reference in a new issue