From 91317c0d3e927ece77978f00c4f34f6bd204ae66 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Thu, 12 Mar 2020 23:46:40 +0800 Subject: [PATCH] New sample script - primes.rhai. --- README.md | 40 ++++++++++++++++++++++------------------ scripts/primes.rhai | 28 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 scripts/primes.rhai diff --git a/README.md b/README.md index c74ce893..6ce0ad15 100644 --- a/README.md +++ b/README.md @@ -89,23 +89,27 @@ Example Scripts There are also a number of examples scripts that showcase Rhai's features, all in the `scripts` folder: -| Script | Description | -| --------------------- | ------------------------------------------------------------- | -| `array.rhai` | arrays in Rhai | -| `assignment.rhai` | variable declarations | -| `comments.rhai` | just comments | -| `for1.rhai` | for loops | -| `function_decl1.rhai` | a function without parameters | -| `function_decl2.rhai` | a function with two parameters | -| `function_decl3.rhai` | a function with many parameters | -| `if1.rhai` | if example | -| `loop.rhai` | endless loop in Rhai, this example emulates a do..while cycle | -| `op1.rhai` | just a simple addition | -| `op2.rhai` | simple addition and multiplication | -| `op3.rhai` | change evaluation order with parenthesis | -| `speed_test.rhai` | a simple program to measure the speed of Rhai's interpreter | -| `string.rhai` | string operations | -| `while.rhai` | while loop | +| Language feature scripts | Description | +| ------------------------ | ------------------------------------------------------------- | +| `array.rhai` | arrays in Rhai | +| `assignment.rhai` | variable declarations | +| `comments.rhai` | just comments | +| `for1.rhai` | for loops | +| `function_decl1.rhai` | a function without parameters | +| `function_decl2.rhai` | a function with two parameters | +| `function_decl3.rhai` | a function with many parameters | +| `if1.rhai` | if example | +| `loop.rhai` | endless loop in Rhai, this example emulates a do..while cycle | +| `op1.rhai` | just a simple addition | +| `op2.rhai` | simple addition and multiplication | +| `op3.rhai` | change evaluation order with parenthesis | +| `string.rhai` | string operations | +| `while.rhai` | while loop | + +| Example scripts | Description | +| ----------------- | ----------------------------------------------------------------- | +| `speed_test.rhai` | a simple program to measure the speed of Rhai's interpreter | +| `primes.rhai` | use Sieve of Eratosthenes to find all primes smaller than a limit | To run the scripts, either make a tiny program or use of the `rhai_runner` example: @@ -916,7 +920,7 @@ for x in array { if x == 42 { break; } } -// The 'range' function allows iterating from first..last-1 +// The 'range' function allows iterating from first..last for x in range(0, 50) { print(x); if x == 42 { break; } diff --git a/scripts/primes.rhai b/scripts/primes.rhai new file mode 100644 index 00000000..fae57bbb --- /dev/null +++ b/scripts/primes.rhai @@ -0,0 +1,28 @@ +// This is a script to calculate prime numbers. + +let MAX_NUMBER_TO_CHECK = 10000; // 1229 primes + +let prime_mask = []; +prime_mask.pad(MAX_NUMBER_TO_CHECK, true); + +prime_mask[0] = false; +prime_mask[1] = false; + +let total_primes_found = 0; + +for p in range(2, MAX_NUMBER_TO_CHECK) { + if prime_mask[p] { + print(p); + + total_primes_found += 1; + let i = 2 * p; + + while i < MAX_NUMBER_TO_CHECK { + prime_mask[i] = false; + i += p; + } + } +} + +print("Total " + total_primes_found + " primes."); +