Don't have an account? Register now to chat, post, use our tools, and much more.
This is an archived, read-only copy of the United-TI subforum , including posts and topic from May 2003 to April 2012. If you would like to discuss any of the topics in this forum, you can visit Cemetech's TI-BASIC subforum. Some of these topics may also be directly-linked to active Cemetech topics. If you are a Cemetech member with a linked United-TI account, you can link United-TI topics here with your current Cemetech topics.

TI-Basic Brain Teasers => TI-BASIC
Author Message
Galandros

Active Member

Joined: 29 Aug 2008
Posts: 565

 Posted: 10 Sep 2008 05:04:54 pm    Post subject: After seeing some great routines I had an ideia from a little snippet of code and I started to make a new list to frequency list routine. What is it someone could ask... Example: {1,87,3,2,3,1,3,3,1} initial list {1,2,3,87} value list {3,1,3,1} absolute frequency list, this lists shows how many the correspondent number of the last list is repeated. This is used in staticts... The improve is on size. My routine is already made, it took several hours of my life, during one afternoon. Although I know on internet a not bad routine for this but I always had a strange sensation of insatisfaction for a thought of a more beautiful routine. Here is the link to see some action of a routine of this kind: http://tibasicdev.wikidot.com/list-frequency (Note: the last time I saw it had a little bug and could be slightly optimized, here's the correction:) {L1(1->L2 //the elements {1->L3 // their frequencies For(I,2,dim(L1 //for each element of L1 after the first If max(L2=L1(I // if L1(I) is already in L2 Then L3+(L2=L1(I->L2 //increase the appropriate frequency Else augment(L2,{L1(I->L2 //add that element augment(L3,{1->L3 //set its frequency to 1 End End (using Ans could gain some size after and as some experience can see it makes repeated steps, very time consumption. In the final I can give my conclusions of test of this routine against mine in speed terms ) It is quite impressive. My achievement is 61 bytes. I took this value in the computer from Properties ->TI Files Properties -> Size on Device... The initialization code counts too, naturally. And I can advance that is very elegant and fast. Works so well that has no problems with complex lists (I had an alternate and ugly ending list to freq routine that couldn't handle complex lists) Oh in some strange case of withdraw from different algorithms (I doubt) there are side goals: - less variables used - result sorted - speed Who have achieved 2 of these side goal is considered better. Good luck and have fun! hihihihi Quite a challenge I think. PS: I searched this site and I didn't see a routine like mine. Only like the one I showed above. PS2: (who guess my first one routine for this, some time ago, was completely mindless brute force of looping over and over) EDIT: that list->freq routine is around 81 bytes...Last edited by Guest on 14 Oct 2008 10:03:02 pm; edited 1 time in total
Weregoose
Authentic INTJ

Super Elite (Last Title)

Joined: 25 Nov 2004
Posts: 3976

 Posted: 10 Sep 2008 11:11:35 pm    Post subject: Galandros wrote:I always had a strange sensation of insatisfaction for a thought of a more beautiful routine.I love that mindset. :) My first attempt ended up at 68 bytes, yet it only works with positive integers. In the output, the integer part is a value from the list, and the fractional part is the corresponding frequency: Ans→A SortA(LA LAaugment({1},0 xor [font="times new roman"]∆List(LA→B SortD(LB seq(LB(A)+.1sum(LA=LB(A)),A,1,dim(Ans)-sum(not(Ans While this code is kind of ugly (or beautiful, depending on how you look at it), it may give you some perspective on how TI-Basic can be exploited differently.Last edited by Guest on 30 Jul 2010 04:46:33 am; edited 1 time in total
Galandros

Active Member

Joined: 29 Aug 2008
Posts: 565

 Posted: 11 Sep 2008 03:01:52 am    Post subject: Weregoose wrote:My first attempt ended up at 68 bytes, yet it only works with positive integers. In the output, the integer part is a value from the list, and the fractional part is the corresponding frequency: About the output in a math program it has poor readability in a very large list. Presenting it to the graph isn't a problem. My also process negative lists, but this is only a preciousness for us. ^^ Weregoose wrote:While this code is kind of ugly (or beautiful, depending on how you look at it), it may give you some perspective on how TI-Basic can be exploited differently. [post="126761"]<{POST_SNAPBACK}>[/post] Quite good. And yes, it does give that perspective. The routine is subtle because how the heck someone would remember to use the ∆List combined with xor for this one. (although I had a ideia with xor but it did not work) :S Also it only uses two lists because the seq( command don't modify his variable. I did not include a first line for storing the input list. Ans→L1 If that counts my routine is more 4 bytes (using L1) or more 3 if I change it to LA. so it stays at 64 bytes because this is of size. Your is very close in size to me. I will test that against mine in speed to see if it gives more fight than the other. I do not have a prognostic, it is hard to understand where your is slow. When is supposed to post the answer?
Galandros

Active Member

Joined: 29 Aug 2008
Posts: 565

 Posted: 11 Sep 2008 03:59:34 am    Post subject: The TI Files Properties are wrong :X When I sent your routine to my calc gave 69 bytes for a program of 1 letter and mine 73 bytes for 1 letter too. But on computer the TI Files Property's says both programs are 61 bytes with a difference of a letter in name. I tried to make a seq( in the beginning but the increment did not work well and made a expensive For(. But I have a few ideias and will try to work around it ^^ EDIT: wait a minute you have made a way to work around it. -.- I should pay more attention to your code. I will post a conclusion of speed tests between the 3 available routine as soon as my calculator has charged batteries. :biggrin: My code: (highlite to see...) [quote name='"BASIC Code"']:0→dim(L2 :DelVar L3SortA L1 :For(θ,1,dim(L1 :L1(θ→L2(1+dim(L2 :sum(L1=Ans→L3(dim(L2 :θ-1+Ans→θ :End[/quote] Inputs: L1 with list Ouput: L2 value list sorted L3 freq list sorted θ used Ans obliterated Speed tests: A: DarkLiner prgm B: Weregoose prgm C: Galandros prgm routines use lists L1,L2,L3 Tested in a real TI-OS 2.43, BOOT 1.02 batteries good and 21K free RAM after forced RAM Clear test using clock timer repeated 20 times and used same list to all prgm, result in seconds Lists: medium size, freq=1 {1,2,3,4,5,6,7,8,9,10,11,12 A: 11 B: 7 C: 14 large list, high freq, not random (I inputed putting many 1,2,3 and dim(L1)=49) A: 34 B: 19 C: 9 large, random, low variance randInt(1,10,50 A: 40 B: 23 C: 16 large, random, high variance randInt(1,200,50 1st 2nd A: 71 71 B: 58 64 C: 53 56 Unless I made a stupid mistake the results are liable. Take your conclusions and use what you prefer :) After try a few things and assimilate that frigging xor with deltaList, next one!Last edited by Guest on 11 Sep 2008 06:59:25 am; edited 1 time in total
alexrudd
pm me if you read this

Bandwidth Hog

Joined: 06 Oct 2004
Posts: 2335

 Posted: 11 Sep 2008 01:48:34 pm    Post subject: Galandros wrote:Here is the link to see some action of a routine of this kind: http://tibasicdev.wikidot.com/list-frequency (Note: the last time I saw it had a little bug and could be slightly optimized, here's the correction:)  [post="126751"]<{POST_SNAPBACK}>[/post] I'm glad you're using TI|BD for inspiration in your coding efforts. Just wanted to let you know that if you see further mistakes, you can easily join and fix it yourself. It would be cool if you added the results you found here to that page, too.
Galandros

Active Member

Joined: 29 Aug 2008
Posts: 565

 Posted: 11 Sep 2008 03:09:58 pm    Post subject: alexrudd wrote:I'm glad you're using TI|BD for inspiration in your coding efforts.  Just wanted to let you know that if you see further mistakes, you can easily join and fix it yourself.  It would be cool if you added the results you found here to that page, too. [post="126773"]<{POST_SNAPBACK}>[/post] Sure. I was planning to register in TI Basic Developer nearly in the future and also Maxcoderz that is back again. And maybe ti8xfreakware site. But I move on at my own rate and based by my time on pc. School is beginning " here but some minutes in a day surfing on the net and program is relaxing time Oh I learned sooo much from that site and his archives, a real mine gold of programming BASIC! It was really helpful although when I discovered it I had figured out many of the techniques presented... First I will make a attempt to fuse the routines (kind of). Also I could use that site to post my large file of TI calculators related sites or at least basic and calc related. (we can discuss that by PM or email if we need)
Galandros

Active Member

Joined: 29 Aug 2008
Posts: 565

 Posted: 12 Sep 2008 06:58:46 am    Post subject: I run out of ideas, they were at start desperate but I gave a frustrated try. Someone could imagine of a very clever way to make the For( of my routine to a seq( giving the same output and the increment pass the repeated values like in my For( loop? Is that the way seq( is does not allow something like: SortA(L1 seq(sum(L1=L1(X)),X,1,dim(L1),sum(L1=L1(X Because in the increment statement it gets the X real variable and not as the running X. And during seq( Ans is obviously not changed. It only gets changed at a new line of code. The increment is very important to super speed up and avoid repeated values and frequency and a I do not see a work around and we are forced to use a slower, bigger For(. Almost nothing perfect... :hmpf: But we reached a fast and small and a even smaller, and not slow at all. For math programs is more than enough.
 Display posts from previous: All Posts Oldest FirstNewest First
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

»
 Page 1 of 1 » All times are GMT - 5 Hours