Problem 57492. Compute the Tetris sequence
This should really be titled "Compute the Tetris sequence, FAST", since the challenge (for me anyway) isn't computing it as much as doing it fast enough to not time-out on the Cody test suite. :P
Yes, that's part of the challenge. I was struggling to get beyond the list that is available at [redacted]. Pre-allocating an array, which bumps up the Cody score, helped to reduce the execution time. I also used a command that I've never tried before, though I've used related commands.
Yeah, pre-allocation was the first thing I did (and it helped cut execution time to about one quarter). After that I spent about two hours profiling the code and trying out different kinds of caching to avoid recomputing binary expansions, but they were all slower than the benchmark code in the end (dictionaries in particular). Same for using bitand, that made things (much) worse.
I may try again, but I'm not seeing any obvious avenues for refinement right now.
Side note: disallowing "if" (to combat cheating?) is a pretty tough restriction.
OK, I removed the restriction on IF. In any case, David found a clever way around that restriction (as well as submitted legitimate solutions.)
You did try the command that I hinted at. I did not compute any binary representations.
Yeah, not being able to used if statements required me to get creative too, doubly so since (in the interest of cutting down running time) I did not want to compute a result needlessly. Turns out that while loops can be used as a sort of poor man's if.
Perhaps I'll try that function again then. I was really surprised that it made the code run (much) slower, I would've thought that it was implemented in some optimized way that would beat hand-coded dec2bin()'s by a handy amount. It might be that I did not use it in the optimal manner.
tetris(tetris(tetris(tetris(10020)))) = 24800 (probably)
Confirmed by OEIS!
There is a conjecture in OEIS that says that tetris(n) probably would not exceed 4*n. This is correct in all the tests in this problem.
We have a breakfast for emeritus faculty each semester. Two of our retired profs played golf together regularly. During one breakfast one of the pair announced, "I got a new driver." His partner said, "I found a new way to cheat." This solution reminded me of that story.
Problem Recent Solvers4
Convert Roman to Arabic Numerals
Vectorize the digits of an Integer
Generate N equally spaced intervals between -L and L
More from this Author192
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!