2012-10-23 18:24:03 -04:00
|
|
|
! Copyright (C) 2012 John Benediktsson
|
|
|
|
! See http://factorcode.org/license.txt for BSD license
|
|
|
|
|
2012-10-26 00:47:42 -04:00
|
|
|
USING: fry io kernel locals math random sequences
|
|
|
|
sequences.private ;
|
2012-10-23 18:24:03 -04:00
|
|
|
|
|
|
|
IN: io.random
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
2012-10-23 19:11:07 -04:00
|
|
|
: each-numbered-line ( ... quot: ( ... line number -- ... ) -- ... )
|
|
|
|
[ 1 ] dip '[ swap [ @ ] [ 1 + ] bi ] each-line drop ; inline
|
2012-10-23 18:24:03 -04:00
|
|
|
|
|
|
|
PRIVATE>
|
|
|
|
|
2012-10-23 19:11:07 -04:00
|
|
|
: random-line ( -- line/f )
|
|
|
|
f [ random zero? [ nip ] [ drop ] if ] each-numbered-line ;
|
|
|
|
|
|
|
|
:: random-lines ( n -- lines )
|
|
|
|
V{ } clone :> accum
|
|
|
|
[| line line# |
|
2012-10-23 22:30:20 -04:00
|
|
|
line# n <= [
|
|
|
|
line accum push
|
|
|
|
] [
|
|
|
|
line# random :> r
|
|
|
|
r n < [ line r accum set-nth-unsafe ] when
|
|
|
|
] if
|
2012-10-23 19:11:07 -04:00
|
|
|
] each-numbered-line accum ;
|