Difference between revisions of "TI-BASIC:Useful Routines"
KermMartian (talk | contribs) (Initial fetch from https://www.cemetech.net/forum/viewtopic.php?t=1642 . Incomplete.) |
Michael2 3B (talk | contribs) m (Updated code for "Find and Replace Text in String") |
||
(14 intermediate revisions by 7 users not shown) | |||
Line 6: | Line 6: | ||
** R = radius | ** R = radius | ||
− | + | <code>:For(F,0,R,[deltax] | |
− | + | :sqrt(R^2-F^2 | |
− | + | :Line(X+F,Y+Ans,X+F,Y-Ans | |
− | + | :Line(X-F,Y+Ans,X-F,Y-Ans | |
− | + | :End</code> | |
=== Fraction Parts === | === Fraction Parts === | ||
Line 19: | Line 19: | ||
** Ans={numerator,denominator} | ** Ans={numerator,denominator} | ||
− | + | <code>:{Ans,1,fpart(abs(Ans | |
− | + | :While e-9<Ans(3 | |
− | + | :{Ans(1),Ans(3),Ans(3)fpart(Ans(2)/Ans(3 | |
− | + | :End | |
− | + | :round({Ans(1),1}/Ans(2),0</code> | |
=== Graph Mode === | === Graph Mode === | ||
Line 35: | Line 35: | ||
* Destroys: GDBn | * Destroys: GDBn | ||
− | + | <code>:StoreGDB n | |
− | + | :1->Tmin | |
− | + | :1->[thetamin] | |
− | + | :2->nMin | |
− | + | :ZStandard | |
− | + | :not(Tmin)+2not([thetamin])+3(nMin=1 | |
− | + | :RecallGDB n | |
− | + | :Delvar GDBn</code> | |
=== Counting List Matches === | === Counting List Matches === | ||
Line 48: | Line 48: | ||
Returns how many times A appears in LIST | Returns how many times A appears in LIST | ||
− | + | <code>:sum(LIST=A</code> | |
Returns how many corresponding elements of LIST1 and LIST2 are equal | Returns how many corresponding elements of LIST1 and LIST2 are equal | ||
Note: dim(LIST1) must equal dim(LIST2) | Note: dim(LIST1) must equal dim(LIST2) | ||
− | + | <code>:sum(LIST1=LIST2</code> | |
=== Mode of List === | === Mode of List === | ||
Line 62: | Line 62: | ||
** E = 1 if no unique mode, otherwise E=0 | ** E = 1 if no unique mode, otherwise E=0 | ||
− | + | <code>:0->B | |
− | + | :For(A,1,dim(LIST | |
− | + | :sum(LIST=LIST(A->C | |
− | + | :If C=B and D/=LIST(A | |
− | + | :1->E | |
− | + | :If C>B | |
− | + | :LIST(A->D | |
− | + | :Delvar EC->B | |
− | + | :End | |
− | + | :End</code> | |
=== Most Efficient getKey === | === Most Efficient getKey === | ||
− | * Author: ''' | + | * Author: '''jonbush''' |
* Input: none | * Input: none | ||
* Output: the key pressed in K (or you can change to another variable) | * Output: the key pressed in K (or you can change to another variable) | ||
− | + | <code>:Repeat Ans | |
− | + | :getkey->K | |
− | + | :End</code> | |
− | |||
=== Text to List === | === Text to List === | ||
Line 89: | Line 88: | ||
Takes text entered from input and changes it into list | Takes text entered from input and changes it into list | ||
− | + | <code>:DelVar L1 | |
− | + | :"ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1 | |
− | + | :ClrHome | |
− | + | :Input "NAME:",Str2 | |
− | + | :For(A,1,length(Str2 | |
− | + | :inString(Str1,sub(Str2,A,1→L1(A | |
− | + | :End</code> | |
=== List To Text === | === List To Text === | ||
Line 103: | Line 102: | ||
Takes numbers in list from List to text and changes it into a word on the screen | Takes numbers in list from List to text and changes it into a word on the screen | ||
− | + | <code>:ClrHome | |
− | + | :"ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1 | |
− | + | :For(A,1,dim(L1 | |
− | + | :Output(1,A,sub(Str1,L1(A),1 | |
− | + | :End</code> | |
=== Shuffle Elements of List === | === Shuffle Elements of List === | ||
Line 114: | Line 113: | ||
* Destroys: LIST2 | * Destroys: LIST2 | ||
− | + | <code>:rand(dim(LIST1->LIST2 | |
− | + | :SortA(LIST2,LIST1</code> | |
=== Formatted Text on a Graph Screen === | === Formatted Text on a Graph Screen === | ||
Line 122: | Line 121: | ||
* Input: Str1 | * Input: Str1 | ||
− | + | <code>:ClrDraw | |
− | + | :length(Str1->A | |
− | + | :For(J,1,1+iPart(A/23 | |
− | + | :For(I,1,23 | |
− | + | :If 23J-24+I<A | |
− | + | :Text(7J-7,4I-4,sub(Str1,23J-23+I,1 | |
− | + | :End | |
− | + | :End</code> | |
[http://www.cemetech.net/img/ss/40503.gif] | [http://www.cemetech.net/img/ss/40503.gif] | ||
Line 140: | Line 139: | ||
** B = Divisor | ** B = Divisor | ||
− | + | <code>:round(BfPart(A/B),0</code> | |
=== Matrix to List === | === Matrix to List === | ||
Line 150: | Line 149: | ||
** Lsave | ** Lsave | ||
− | + | <code>:ClrHome | |
− | + | :1→dim(L2 | |
− | + | :dim([A]→L1 | |
− | + | :L1(1→A | |
− | + | :L1(2→B | |
− | + | :For(C,1,A | |
− | + | :For(D,1,B | |
− | + | :[A](C,D→L2(dim(L2)+1 | |
− | + | :End | |
− | + | :End | |
− | + | :For(A,2,dim(L2) | |
− | + | :L2(A)→∟SAVE(A-1 | |
− | + | :End | |
− | + | :DelVar L1DelVar L2DelVar [A]DelVar BDelVar CDelVar ADelVar D</code> | |
=== List to Matrix === | === List to Matrix === | ||
Line 171: | Line 170: | ||
* Output: Matrix [A] | * Output: Matrix [A] | ||
− | + | <code>:ClrHome | |
− | + | :Input "ROWS:",F | |
− | + | :ClrHome | |
− | + | :dim(∟SAVE)/F→G | |
− | + | :{F,G→dim([A] | |
− | + | :1→A | |
− | + | :1→B | |
− | + | :G→C | |
− | + | :0→D | |
− | + | :Repeat A=F+1 | |
− | + | :For(E,1,G | |
− | + | :D+1→D | |
− | + | :∟SAVE(D→[A](A,E | |
− | + | :End | |
− | + | :A+1→A | |
− | + | :C+1→B | |
− | + | :C+G→C | |
− | + | :End | |
− | + | :DelVar ADelVar BDelVar CDelVar DDelVar EDelVar FDelVar G</code> | |
=== Convert A to a String <nowiki>[</nowiki>Optimized] === | === Convert A to a String <nowiki>[</nowiki>Optimized] === | ||
* Author: '''Weregoose''' | * Author: '''Weregoose''' | ||
− | + | <code>:{A,A->L2 | |
− | + | :{0,1->L1 | |
− | + | :LinReg(a+bx) Y1 | |
− | + | :Equ>String(Y1,Str1 | |
− | + | :sub(Str1,1,length(Str1)-3->Str1</code> | |
=== Pop First List Element === | === Pop First List Element === | ||
Line 206: | Line 205: | ||
* Output: Ans | * Output: Ans | ||
− | + | <code>:ΔList(cumSum(Ans</code> | |
− | ΔList(cumSum(Ans | ||
=== Rotate a 3x3 Matrix 90° === | === Rotate a 3x3 Matrix 90° === | ||
Line 214: | Line 212: | ||
* Output: Ans | * Output: Ans | ||
− | + | <code>:rowSwap(Ans<superscript T transpose>,1,3</code> | |
=== Find List Element Index === | === Find List Element Index === | ||
*Author: '''Ed H''' | *Author: '''Ed H''' | ||
* Inputs: | * Inputs: | ||
− | ** A = | + | ** A = a number |
− | * Output: the position of the last occurrence of A in L1 | + | * Output: Ans=the position of the last occurrence of A in L1 |
− | + | <code>:max(seq(X(A=L1(X)),X,1,dim(L1</code> | |
=== Find List Element Index (Within Bounds) | === Find List Element Index (Within Bounds) | ||
Line 229: | Line 227: | ||
** B = Where it begins looking | ** B = Where it begins looking | ||
** C = Where it ends looking | ** C = Where it ends looking | ||
− | * Output: The position of the last occurrence of A in the portion of L1 starting from element B and ending with element C | + | * Output: Ans=The position of the last occurrence of A in the portion of L1 starting from element B and ending with element C |
− | + | <code>:max(seq(X(A=L1(X)),X,B,C</code> | |
=== Convert Base 10 to Any Base (2 to 16) === | === Convert Base 10 to Any Base (2 to 16) === | ||
Line 240: | Line 238: | ||
* Outputs: Str0 | * Outputs: Str0 | ||
− | + | <code>:"_ | |
− | + | :For(I,1,1+ln(A)/ln(B | |
− | + | :Ans+sub("0123456789ABCDEF",1+int(BfPart(AB^-I)),1 | |
− | + | :End</code> | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | * Author: '''PT_''' | ||
+ | * Inputs: | ||
+ | ** N = Number to convert | ||
+ | ** A = Base to convert to | ||
+ | * Outputs: List with 8 decimals in base-A | ||
+ | <code>:AfPart(1/Aint(NA^seq(X,X,~7,0</code> | ||
+ | |||
+ | or | ||
+ | |||
+ | <code>:remainder(int(NA^seq(X,X,~7,0)),A</code> | ||
=== Change Case of a String === | === Change Case of a String === | ||
Line 253: | Line 265: | ||
** Str1 = Converted string | ** Str1 = Converted string | ||
− | + | <code>:not(A)-->A | |
− | + | :length(Str1)->B | |
− | + | :"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"->Str2 | |
− | + | :For(N,1,B | |
− | + | :inString(sub(Str2,26A + 1, 26),sub(Str1,N,1) | |
− | + | :Str1 + sub(sub(Str1,N,1) +sub(sub(Str2,26,26)+sub(Str2,1,26),26A+1,26),Ans+1,1)-->Str1 | |
− | + | :End | |
− | + | :sub(Str1,B+1,B)-->Str1</code> | |
=== Number to Roman Numeral === | === Number to Roman Numeral === | ||
Line 269: | Line 281: | ||
** Ans & Str0 = Converted number | ** Ans & Str0 = Converted number | ||
− | + | <code>:" →Str0 | |
− | + | :For(X,0,log(N | |
− | + | :10fPart(.1N→Z | |
− | + | :While Z | |
− | + | :sum({4.1,4.1,9.2}(Z={4,5,9→T | |
− | + | :sub("IVXLCDMvxlcdmni",2X+10fPart(T)+1,1)+Str0→Str0 | |
− | + | :abs(Z-1-int(T→Z | |
− | + | :End | |
− | + | :int(.1N→N | |
− | + | :End | |
− | + | :Str0</code> | |
=== Find Unique Elements in Two Lists === | === Find Unique Elements in Two Lists === | ||
− | * | + | * Authors: '''rthprog'''/'''lirtosiast''' |
* Input: L1 and L2 | * Input: L1 and L2 | ||
− | * Output: L3 (All elements that are in L1 but not L2, and elements that are in L2 but not | + | * Output: L3 (All elements that are in L1 but not L2, and elements that are in L2 but not L1.) |
* Conditions: "0" is not a unique element, and no element is repeated within an individual list | * Conditions: "0" is not a unique element, and no element is repeated within an individual list | ||
− | :augment(L1,L2 | + | <code>:augment(L1,L2 |
− | : | + | :Ansseq(1=sum(Ans=Ans(X)),X,1,dim(Ans->L3 |
:SortD(L3 | :SortD(L3 | ||
− | :sum(L3 | + | :sum(L3≠0→dim(L3</code> |
+ | |||
+ | === Detect Screen Resolution === | ||
+ | * Author: '''Weregoose''' | ||
+ | * Inputs: none | ||
+ | * Output: Ans= | ||
+ | ** 1: Monochrome | ||
+ | ** 0: Color | ||
+ | |||
+ | <code>:Xmin+E2ΔX>Xmax</code> | ||
+ | |||
+ | === Find and Replace Text in String === | ||
+ | * Author: <b>Michael2_3B</b>, optimized by <b>Runer112</b> | ||
+ | * Inputs: Str1 (main string), Str2 (search string), Str3 (replacement string) | ||
+ | * Outputs: Str1 (modified main string) | ||
+ | <code> | ||
+ | :length(Str2→J | ||
+ | :1→I | ||
+ | :While inString(Str1,Str2,I | ||
+ | :inString(Str1,Str2,I→I | ||
+ | :Str3 | ||
+ | :If ln(I | ||
+ | :sub(Str1,1,I-1)+Ans | ||
+ | :If I+J≤length(Str1 | ||
+ | :Ans+sub(Str1,I+J,1-I-J+length(Str1 | ||
+ | :Ans→Str1 | ||
+ | :I+length(Str3→I | ||
+ | :End | ||
+ | </code> | ||
[[Category: TI-BASIC]] | [[Category: TI-BASIC]] |
Latest revision as of 07:22, 11 February 2023
Contents
- 1 Filled Circle
- 2 Fraction Parts
- 3 Graph Mode
- 4 Counting List Matches
- 5 Mode of List
- 6 Most Efficient getKey
- 7 Text to List
- 8 List To Text
- 9 Shuffle Elements of List
- 10 Formatted Text on a Graph Screen
- 11 Modulo Division
- 12 Matrix to List
- 13 List to Matrix
- 14 Convert A to a String [Optimized]
- 15 Pop First List Element
- 16 Rotate a 3x3 Matrix 90°
- 17 Find List Element Index
- 18 Convert Base 10 to Any Base (2 to 16)
- 19 Change Case of a String
- 20 Number to Roman Numeral
- 21 Find Unique Elements in Two Lists
- 22 Detect Screen Resolution
- 23 Find and Replace Text in String
Filled Circle
- Author: Calc84Maniac
- Inputs:
- X = x-coordinate of center
- Y = y-coordinate of center
- R = radius
:For(F,0,R,[deltax]
- sqrt(R^2-F^2
- Line(X+F,Y+Ans,X+F,Y-Ans
- Line(X-F,Y+Ans,X-F,Y-Ans
End
Fraction Parts
- Author: Calc84Maniac
- Input:
- Ans=a number
- Output:
- Ans={numerator,denominator}
:{Ans,1,fpart(abs(Ans
- While e-9<Ans(3
- {Ans(1),Ans(3),Ans(3)fpart(Ans(2)/Ans(3
- End
round({Ans(1),1}/Ans(2),0
Graph Mode
- Author: Calc84Maniac
- Inputs: none
- Output: Ans=
- 0:FUNC
- 1:PAR
- 2:POL
- 3:SEQ
- Destroys: GDBn
:StoreGDB n
- 1->Tmin
- 1->[thetamin]
- 2->nMin
- ZStandard
- not(Tmin)+2not([thetamin])+3(nMin=1
- RecallGDB n
Delvar GDBn
Counting List Matches
- Author: Calc84Maniac
Returns how many times A appears in LIST
:sum(LIST=A
Returns how many corresponding elements of LIST1 and LIST2 are equal Note: dim(LIST1) must equal dim(LIST2)
:sum(LIST1=LIST2
Mode of List
- Author: Calc84Maniac
- Inputs: LIST
- Outputs:
- D = mode(LIST
- E = 1 if no unique mode, otherwise E=0
:0->B
- For(A,1,dim(LIST
- sum(LIST=LIST(A->C
- If C=B and D/=LIST(A
- 1->E
- If C>B
- LIST(A->D
- Delvar EC->B
- End
End
Most Efficient getKey
- Author: jonbush
- Input: none
- Output: the key pressed in K (or you can change to another variable)
:Repeat Ans
- getkey->K
End
Text to List
- Author: Lafferjm
- Input: Str1, Str2 as shown
- Output: L1
Takes text entered from input and changes it into list
:DelVar L1
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1
- ClrHome
- Input "NAME:",Str2
- For(A,1,length(Str2
- inString(Str1,sub(Str2,A,1→L1(A
End
List To Text
- Author: lafferjm
- Input: None
- Output: List changed into text
Takes numbers in list from List to text and changes it into a word on the screen
:ClrHome
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ? .→Str1
- For(A,1,dim(L1
- Output(1,A,sub(Str1,L1(A),1
End
Shuffle Elements of List
Shuffles LIST1. Note: If you know what dim(LIST1) will be, replace it with a number.
- Author: Calc84Maniac
- Destroys: LIST2
:rand(dim(LIST1->LIST2
SortA(LIST2,LIST1
Formatted Text on a Graph Screen
Clears the graph screen
- Authors: B-flat, KermMartian, and Calc84Maniac
- Input: Str1
:ClrDraw
- length(Str1->A
- For(J,1,1+iPart(A/23
- For(I,1,23
- If 23J-24+I<A
- Text(7J-7,4I-4,sub(Str1,23J-23+I,1
- End
End
Modulo Division
The Round( is in there in case of an infinitely repeating decimal (like 1/3).
- Authors: The Tari, Something1990, and Calc84Maniac
- Inputs:
- A = Dividend
- B = Divisor
:round(BfPart(A/B),0
Matrix to List
Converts any size matrix to a list
- Author: lafferjm
- Input:
- Matrix A
- Output:
- Lsave
:ClrHome
- 1→dim(L2
- dim([A]→L1
- L1(1→A
- L1(2→B
- For(C,1,A
- For(D,1,B
- [A](C,D→L2(dim(L2)+1
- End
- End
- For(A,2,dim(L2)
- L2(A)→∟SAVE(A-1
- End
DelVar L1DelVar L2DelVar [A]DelVar BDelVar CDelVar ADelVar D
List to Matrix
Takes any size list and stores it into a matrix
- Author: Lafferjm
- Inputs: Lsave
- Output: Matrix [A]
:ClrHome
- Input "ROWS:",F
- ClrHome
- dim(∟SAVE)/F→G
- {F,G→dim([A]
- 1→A
- 1→B
- G→C
- 0→D
- Repeat A=F+1
- For(E,1,G
- D+1→D
- ∟SAVE(D→[A](A,E
- End
- A+1→A
- C+1→B
- C+G→C
- End
DelVar ADelVar BDelVar CDelVar DDelVar EDelVar FDelVar G
Convert A to a String [Optimized]
- Author: Weregoose
:{A,A->L2
- {0,1->L1
- LinReg(a+bx) Y1
- Equ>String(Y1,Str1
sub(Str1,1,length(Str1)-3->Str1
Pop First List Element
Input and output variables can be changed to whatever.
- Author: Calc84Maniac
- Input: Ans
- Output: Ans
:ΔList(cumSum(Ans
Rotate a 3x3 Matrix 90°
- Author: HaveACalc
- Input: Ans
- Output: Ans
:rowSwap(Ans<superscript T transpose>,1,3
Find List Element Index
- Author: Ed H
- Inputs:
- A = a number
- Output: Ans=the position of the last occurrence of A in L1
:max(seq(X(A=L1(X)),X,1,dim(L1
=== Find List Element Index (Within Bounds)
- Inputs:
- A = A number
- B = Where it begins looking
- C = Where it ends looking
- Output: Ans=The position of the last occurrence of A in the portion of L1 starting from element B and ending with element C
:max(seq(X(A=L1(X)),X,B,C
Convert Base 10 to Any Base (2 to 16)
- Author: RthProg
- Inputs:
- A = Number to convert
- B = Base to convert to
- Outputs: Str0
:"_
- For(I,1,1+ln(A)/ln(B
- Ans+sub("0123456789ABCDEF",1+int(BfPart(AB^-I)),1
End
- Author: PT_
- Inputs:
- N = Number to convert
- A = Base to convert to
- Outputs: List with 8 decimals in base-A
:AfPart(1/Aint(NA^seq(X,X,~7,0
or
:remainder(int(NA^seq(X,X,~7,0)),A
Change Case of a String
- Authors: RthProg and Ed H
- Inputs:
- A = (1) Change to uppercase
- Str1 = String to convert
- Outputs:
- Str1 = Converted string
:not(A)-->A
- length(Str1)->B
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"->Str2
- For(N,1,B
- inString(sub(Str2,26A + 1, 26),sub(Str1,N,1)
- Str1 + sub(sub(Str1,N,1) +sub(sub(Str2,26,26)+sub(Str2,1,26),26A+1,26),Ans+1,1)-->Str1
- End
sub(Str1,B+1,B)-->Str1
Number to Roman Numeral
- Author: Ed H
- Inputs:
- N = Number to convert
- Outputs:
- Ans & Str0 = Converted number
:" →Str0
- For(X,0,log(N
- 10fPart(.1N→Z
- While Z
- sum({4.1,4.1,9.2}(Z={4,5,9→T
- sub("IVXLCDMvxlcdmni",2X+10fPart(T)+1,1)+Str0→Str0
- abs(Z-1-int(T→Z
- End
- int(.1N→N
- End
Str0
Find Unique Elements in Two Lists
- Authors: rthprog/lirtosiast
- Input: L1 and L2
- Output: L3 (All elements that are in L1 but not L2, and elements that are in L2 but not L1.)
- Conditions: "0" is not a unique element, and no element is repeated within an individual list
:augment(L1,L2
- Ansseq(1=sum(Ans=Ans(X)),X,1,dim(Ans->L3
- SortD(L3
sum(L3≠0→dim(L3
Detect Screen Resolution
- Author: Weregoose
- Inputs: none
- Output: Ans=
- 1: Monochrome
- 0: Color
:Xmin+E2ΔX>Xmax
Find and Replace Text in String
- Author: Michael2_3B, optimized by Runer112
- Inputs: Str1 (main string), Str2 (search string), Str3 (replacement string)
- Outputs: Str1 (modified main string)
- length(Str2→J
- 1→I
- While inString(Str1,Str2,I
- inString(Str1,Str2,I→I
- Str3
- If ln(I
- sub(Str1,1,I-1)+Ans
- If I+J≤length(Str1
- Ans+sub(Str1,I+J,1-I-J+length(Str1
- Ans→Str1
- I+length(Str3→I
- End