summaryrefslogtreecommitdiff
path: root/src/options.cpp
blob: 7f66028e9f30e060595eec6b129db8af23671471 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "options.h"

#include "unitnumber.h"
#include "number.h"

#include <bu/sio.h>
#include <stdlib.h>

Options::Options( int argc, char *argv[] )
{
    addOption( Bu::slot(this, &Options::selfTest), "self-test",
        "Run a series of tests to ensure everything is working correctly.");
    addOption( Bu::slot(this, &Options::textPrimes), "text-primes",
        "Generate primes in base 36 that only have digits > 9 in them.");
    addHelpOption('h', "help", "This help");

    parse( argc, argv );
}

Options::~Options()
{
}

int Options::selfTest( Bu::StringArray )
{
    UnitNumber().run();

    exit( 0 );
    return 0;
}

bool hasDigits( const Bu::String &s )
{
    for( Bu::String::const_iterator i = s.begin(); i; i++ )
    {
        if( *i >= '0' && *i <= '9' )
            return true;
    }
    return false;
}

int Options::textPrimes( Bu::StringArray )
{
    Number tst( 0, 36 );
    Number max( 0, 36 );
    Number j( 0, 36 );
    Number one( 0, 36 );
    Number fact( 0, 36 );
    one = "1";
    fact = "2";

    for( tst = "1";; tst = tst + one )
    {
        if( hasDigits( tst.toString() ) )
            continue;

        max = tst / fact;
        bool bPrime = true;
        for( j = "2"; j < max; j = j + one )
        {
            if( (tst%j).isZero() )
            {
                bPrime = false;
                break;
            }
        }

        if( bPrime )
        {
            Bu::println("%1").arg( tst );
        }
    }
    
    exit( 0 );
    return 0;
}