math.extras: adding majority vote algorithm.

db4
John Benediktsson 2013-03-24 19:39:34 -07:00
parent 31d6fb178a
commit 3ce93bf86f
2 changed files with 16 additions and 0 deletions

View File

@ -80,3 +80,12 @@ IN: math.extras.test
{ { 1 8+4/5 16+3/5 24+2/5 32+1/5 } } [ 1 40 5 linspace[a,b) >array ] unit-test
{ { 1 10+3/4 20+1/2 30+1/4 40 } } [ 1 40 5 linspace[a,b] >array ] unit-test
[ f ] [ { } majority ] unit-test
[ 1 ] [ { 1 } majority ] unit-test
[ f ] [ { 1 2 } majority ] unit-test
[ 1 ] [ { 1 1 2 } majority ] unit-test
[ f ] [ { 1 1 2 2 } majority ] unit-test
[ 2 ] [ { 1 1 2 2 2 } majority ] unit-test
[ 3 ] [ { 1 2 3 1 2 3 1 2 3 3 } majority ] unit-test
{ CHAR: C } [ "AAACCBBCCCBCC" majority ] unit-test

View File

@ -222,3 +222,10 @@ PRIVATE>
: logspace[a,b] ( a b length base -- seq )
[ linspace[a,b] ] dip swap n^v ;
: majority ( seq -- elt/f )
[ f 0 ] dip [
over zero? [ 2nip 1 ] [
pick = [ 1 + ] [ 1 - ] if
] if
] each zero? [ drop f ] when ;