User:Thebigh/mysandbox: Difference between revisions

From Rosetta Code
Content added Content deleted
m (tweak)
 
Line 5: Line 5:
Input a number of the form 2^a 3^b
Input a number of the form 2^a 3^b
<lang fractran>
<lang fractran>
{2/3}
2/3
</lang>
</lang>
The output is 2^(a+b)
The output is 2^(a+b)
Line 12: Line 12:


A list of no fractions does nothing, then immediately stops.
A list of no fractions does nothing, then immediately stops.
<lang fractran>{}</lang>
<lang fractran></lang>


==Integer Sequence==
==Integer Sequence==
Given the number 1 as input the following program will, as its (3n-2)th step, produce the number 2^n.
Given the number 1 as input the following program will, as its (3n-2)th step, produce the number 2^n.
<lang fractran> {2/3, 9/2, 2/1}</lang>
<lang fractran> 2/3, 9/2, 2/1</lang>


==Logical operations==
==Logical operations==
Line 22: Line 22:


<lang fractran>
<lang fractran>
{5/6, 1/2, 1/3} AND gate
5/6, 1/2, 1/3 AND gate
{5/6, 5/2, 5/3} OR gate
5/6, 5/2, 5/3 OR gate
{1/22, 5/11} NOT gate (uses 11 as a halt flag, result of 2^a*11 is 5^not(a))
1/22, 5/11 NOT gate (uses 11 as a halt flag, result of 2^a*11 is 5^not(a))
{1/6, 5/2, 5/3} XOR gate
1/6, 5/2, 5/3 XOR gate
{1/66, 5/22, 5/33, 5/11} NAND gate (needs 11 flag)
1/66, 5/22, 5/33, 5/11 NAND gate (needs 11 flag)
{5/66, 1/22, 1/33, 5/11} NXOR gate (needs flag)
5/66, 1/22, 1/33, 5/11 NXOR gate (needs flag)
{1/66, 1/22, 1/33, 5/11} NOR gate (needs flag)
1/66, 1/22, 1/33, 5/11 NOR gate (needs flag)


so much for all the commonly encountered ones, but there's still another eight to go. Most are obscure and of limited utility.
so much for all the commonly encountered ones, but there's still another eight to go. Most are obscure and of limited utility.


{1/2, 1/3} ZERO gate, returns false regardless of its input
1/2, 1/3 ZERO gate, returns false regardless of its input
{1/6, 5/2, 1/3} "A and not B", true only if A is true and B is false
1/6, 5/2, 1/3 "A and not B", true only if A is true and B is false
{5/2, 1/3} A , returns the state of A regardless of B
5/2, 1/3 A , returns the state of A regardless of B
{1/6, 1/2, 5/3} "B and not A", true only if B is true and A is false
1/6, 1/2, 5/3 "B and not A", true only if B is true and A is false
{1/2, 5/3} B , returns the state of B regardless of A
1/2, 5/3 B , returns the state of B regardless of A
{1/66, 1/33, 5/11} "A or not B" (needs flag)
1/66, 1/33, 5/11 "A or not B" (needs flag)
{1/66, 1/22, 5/11} "B or not A" (needs flag)
1/66, 1/22, 5/11 "B or not A" (needs flag)
{5/66, 5/22, 5/33, 5/11} ONE gate, returns true regardless of its input, needs flag
5/66, 5/22, 5/33, 5/11 ONE gate, returns true regardless of its input, needs flag


NOT A and NOT B are omitted because the one-input NOT gate is already up there.
NOT A and NOT B are omitted because the one-input NOT gate is already up there.
Line 48: Line 48:
2^a 3^b 5^c
2^a 3^b 5^c
<lang fractran>
<lang fractran>
{1001/30, 143/6, 143/10, 143/15, 13/2, 13/3, 13/5}
1001/30, 143/6, 143/10, 143/15, 13/2, 13/3, 13/5
</lang>
</lang>
Returns 7^A 11^B 13^C where (A,B,C) are (a,b,c) in ascending order.
Returns 7^A 11^B 13^C where (A,B,C) are (a,b,c) in ascending order.

Latest revision as of 11:27, 28 November 2021

Some FRACTRAN programs in case we ever have a category for it

A+B

Input a number of the form 2^a 3^b <lang fractran> 2/3 </lang> The output is 2^(a+b)

Empty program

A list of no fractions does nothing, then immediately stops. <lang fractran></lang>

Integer Sequence

Given the number 1 as input the following program will, as its (3n-2)th step, produce the number 2^n. <lang fractran> 2/3, 9/2, 2/1</lang>

Logical operations

It's not so hard to code up all sixteen possible two-input logic gates, so here they are. The input is 2^a 3^b where a,b are zero or one and the output is 5^1 for true and 5^0 for false. Gates that return true when all their inputs are false additionally require the flag 11 to be set as input (ie 2^a*3^b*11)- any FRACTRAN program with the number 1 as input either stops without doing anything or loops forever.

<lang fractran> 5/6, 1/2, 1/3 AND gate 5/6, 5/2, 5/3 OR gate 1/22, 5/11 NOT gate (uses 11 as a halt flag, result of 2^a*11 is 5^not(a)) 1/6, 5/2, 5/3 XOR gate 1/66, 5/22, 5/33, 5/11 NAND gate (needs 11 flag) 5/66, 1/22, 1/33, 5/11 NXOR gate (needs flag) 1/66, 1/22, 1/33, 5/11 NOR gate (needs flag)

so much for all the commonly encountered ones, but there's still another eight to go. Most are obscure and of limited utility.

1/2, 1/3 ZERO gate, returns false regardless of its input 1/6, 5/2, 1/3 "A and not B", true only if A is true and B is false 5/2, 1/3 A , returns the state of A regardless of B 1/6, 1/2, 5/3 "B and not A", true only if B is true and A is false 1/2, 5/3 B , returns the state of B regardless of A 1/66, 1/33, 5/11 "A or not B" (needs flag) 1/66, 1/22, 5/11 "B or not A" (needs flag) 5/66, 5/22, 5/33, 5/11 ONE gate, returns true regardless of its input, needs flag

NOT A and NOT B are omitted because the one-input NOT gate is already up there. </lang>

Sort three variables

FRACTRAN's only data type is positive integers. Suppose (a,b,c) are the integers to be sorted. Give the following as input: 2^a 3^b 5^c <lang fractran> 1001/30, 143/6, 143/10, 143/15, 13/2, 13/3, 13/5 </lang> Returns 7^A 11^B 13^C where (A,B,C) are (a,b,c) in ascending order.