Skip to main content
added 2333 characters in body
Source Link
ovs
  • 61.2k
  • 3
  • 49
  • 164
0 push 1 1 duplicate top of stack 2 add top two values 3 subtract 4 mutliplymultiply 5 integer divide top value bybby second value 6 push the second value without popping it 7 swap top two values c>7 while loop, runs until top of stack is 0 the loops ends at the first instruction >=c 
 
 
 

More to follow0,20,10,0,3,10,2,0,3,comp. test,20,2,1 generates the next prime less than ...n:

0 -- push 1. This means the current number is composite -- Even if it isn't, we still want to find a prime <n 20 -- while loop. This iterates until the composite tests returns 0 10 10 -- we have an positive number on the top of the stack ... 0 3 -- by subtracting 1 until it is 0, ... 2 -- and adding this to the last prime candidate ... -- we can get rid of it. 0 3 -- subtract 1 to get new prime candidate pc comp -- check if pc is composite 20 -- end of loop, top of stack is now [0, p], with p prime 2 -- add 0+p 1 -- duplicate the prime, such that we store the result, -- and can use the value to find the next prime 

Try it online!


30,0,2,0,2,next prime,0,3,0,3,30,2 repeats this until the prime 2 is found:

30 30 -- while loop 0 2 -- add 1 0 2 -- add 1 np -- find the prime less than this 0 3 -- subtract 1 0 3 -- subtract 1 -- if the prime was 2, this is now 0 -- and the while loop terminates 2 -- add the 0 to the 2 to remove it 

Try it online!

0 push 1 1 duplicate top of stack 2 add top two values 3 subtract 4 mutliply 5 integer divide top value byb second value 6 push the second value without popping it 7 swap top two values c>7 while loop, runs until top of stack is 0 the loops ends at the first instruction >=c 

More to follow ...

0 push 1 1 duplicate top of stack 2 add top two values 3 subtract 4 multiply 5 integer divide top value by second value 6 push the second value without popping it 7 swap top two values c>7 while loop, runs until top of stack is 0 the loops ends at the first instruction >=c 
 
 
 

0,20,10,0,3,10,2,0,3,comp. test,20,2,1 generates the next prime less than n:

0 -- push 1. This means the current number is composite -- Even if it isn't, we still want to find a prime <n 20 -- while loop. This iterates until the composite tests returns 0 10 10 -- we have an positive number on the top of the stack ... 0 3 -- by subtracting 1 until it is 0, ... 2 -- and adding this to the last prime candidate ... -- we can get rid of it. 0 3 -- subtract 1 to get new prime candidate pc comp -- check if pc is composite 20 -- end of loop, top of stack is now [0, p], with p prime 2 -- add 0+p 1 -- duplicate the prime, such that we store the result, -- and can use the value to find the next prime 

Try it online!


30,0,2,0,2,next prime,0,3,0,3,30,2 repeats this until the prime 2 is found:

30 30 -- while loop 0 2 -- add 1 0 2 -- add 1 np -- find the prime less than this 0 3 -- subtract 1 0 3 -- subtract 1 -- if the prime was 2, this is now 0 -- and the while loop terminates 2 -- add the 0 to the 2 to remove it 

Try it online!

added 2089 characters in body
Source Link
ovs
  • 61.2k
  • 3
  • 49
  • 164

The available operations wereare

Explanation will be added soon0,0,2,1,4,1,0,2,1,1,4,4,4 pushes the initial number 500. The remainder of the code is best explained inside out:

6,6,6,6,5,4,7,5 is a divisibility test. Given k and n as the top two values on the stack this calculates \$\lfloor {\lfloor {n \over k} \rfloor \cdot k \over n}\rfloor\$, which is only 1 if k divides n: Try it online!

1,0,10,3,div test,0,7,3,10,2,0,3 is a primality test, or a composite test since this returns truthy (non-zero) values for composite numbers:

1 -- duplicate n 0 -- push 1 - stack: [1, k=n, n] -- in the next iterations of the loop, -- the top of stack will be the inverted result -- of the divisibility test 10 10 -- while loop: -- runs until [0, d, n] is on the stack, -- where d is the largest divisor of n <n 3 -- subtract top value (always 1) from k div -- the divisibility test 0 -- push 1 7 -- swap top two values 3 -- subtract (1 - div test result) 2 -- add the top 0 to the last k 0,3 -- subtract 1 -- if the loop ended with [0, 1, n], this is now 0 -- otherwise we have a positive number 

Try it online!

More to follow ...

The available operations were

Explanation will be added soon ...

The available operations are

0,0,2,1,4,1,0,2,1,1,4,4,4 pushes the initial number 500. The remainder of the code is best explained inside out:

6,6,6,6,5,4,7,5 is a divisibility test. Given k and n as the top two values on the stack this calculates \$\lfloor {\lfloor {n \over k} \rfloor \cdot k \over n}\rfloor\$, which is only 1 if k divides n: Try it online!

1,0,10,3,div test,0,7,3,10,2,0,3 is a primality test, or a composite test since this returns truthy (non-zero) values for composite numbers:

1 -- duplicate n 0 -- push 1 - stack: [1, k=n, n] -- in the next iterations of the loop, -- the top of stack will be the inverted result -- of the divisibility test 10 10 -- while loop: -- runs until [0, d, n] is on the stack, -- where d is the largest divisor of n <n 3 -- subtract top value (always 1) from k div -- the divisibility test 0 -- push 1 7 -- swap top two values 3 -- subtract (1 - div test result) 2 -- add the top 0 to the last k 0,3 -- subtract 1 -- if the loop ended with [0, 1, n], this is now 0 -- otherwise we have a positive number 

Try it online!

More to follow ...

Source Link
ovs
  • 61.2k
  • 3
  • 49
  • 164

Lynn, Haskell

Lynn created a stack based mini-language, the task was to generate the primes up to 500 in 60 or less operation. Here is my 55-operation password:

[0,0,2,1,4,1,0,2,1,1,4,4,4,30,0,2,0,2,0,20,10,0,3,10,2,0,3,1,0,10,3,6,6,6,6,5,4,7,5,0,7,3,10,2,0,3,20,2,1,0,3,0,3,30,2] 

Try it online!

The available operations were

0 push 1 1 duplicate top of stack 2 add top two values 3 subtract 4 mutliply 5 integer divide top value byb second value 6 push the second value without popping it 7 swap top two values c>7 while loop, runs until top of stack is 0 the loops ends at the first instruction >=c 

Explanation will be added soon ...