Essentially every incoming tile will eventually end up in your highest card. Therefore, what you'd end up measuring is the value of the highest random spawn, which is almost certainly going to be 192 (when building 3072 from 1536).
No, because new cards inherit the "atomic number" of the more recently created parent. So if you have { 12 12 24 } on the board, and a 48 bonus card appears, and you merge them all together, the 96 will have an "atomic number" of 12, not 48. The only way the atomic number of a 3072 could be 192 is if you already had { 192, 384, 768, 1536 } on the board when the 192 bonus card appears. (And in that case, I would consider it to be a very easily constructed 3072, regardless of whether the 1536 was easy.) But if you have say { 384, 768, 1536 } on the board, then get a 192 bonus tile, then construct { 96 48 24 12 6 3 3 } from scratch and merge them all together, the atomic number of the 3072 will still be 3, because the interim 192 constructed from { 96 48 24 12 3 3 } (with atomic number 3) will be newer than the bonus 192 (atomic number 192) received earlier, and the atomic number 3 will supersede the atomic number 192.
Did anyone notice that the cards on the main menu are playable? If you want you can slide them around. This may be an easter egg.
Then all we need is one extra 3 on the main menu, and we can construct a tile we've never seen before! Now that would be a neat easter egg...
To throw in some more information: the "oracle" version of my bot with 8-step lookahead reaches 12288 in 18% of the games. I think I only made it play 100 games; I presume playing enough games it might be able to get to 24576 occasionally but I don't think there's much headroom left.
That's a really interesting idea. It took me a while to understand it. One important clarification I would add is that the atomic number and the timestamp are two separate properties that are added to cards. I originally intended to write two examples to illustrate BenW's system but in the process I asked myself this question: How many merges does it take at most to form a card of specific value? "Well, that's easy!", you might say. It takes 1 merge to make a 6 and 3 merges to make a 12. What about a 384? You'll get tired of counting because the numbers increase exponentially. One nice way to visualize the provenance of any given number is with a binary tree as suggested by this image. Usually, one draws these binary trees upside down but to keep in tone with the image and the natural structure of trees in the real world, I'll make an exception. Here's the provenance tree of a 12: Now, we nicely see how the ranks of cards translate to their level in these trees. A 3 is a rank 0 card (remember the face value formula 2^k * 3 whre k=0 in this case) while 6 is a rank 1 card and 12 is rank 2. Conversely, we need a total of 3 layers to build a rank 2 card. The total number of cards involved (or nodes in the tree) is then 2^3 - 1 = 7. To get to the number of merges that happened, we just need to subtract the number of 3's which comes down to 2^2 = 4 in this case (or 2^k where k is the rank of the card we want to build). So there were 2^3 - 1 - 2^2 = 3 merges necessary to build a 12. Or more generally: 2^(k+1) - 1 - 2^k = 2^k - 1Where k is the rank we want to build. A 384 is rank 7, so we get 2^7 - 1 = 127 merges. A 6144 takes a whopping 2047 merges. And here's how that tree would look: zoomable pdf Or a little more aesthetic: zoomable pdf Bonus exercise for extra credit: We know that half of our 3's come as 1's and 2's and need to be merged as well. Extend the formula from above to account for that.
It doesn't work that way. The "oracle bot" simulates the game and divulges more information about the next cards than the real game does. That's the whole point of an "oracle" - it can tell you things you wouldn't know otherwise. What that does show, however, is that 24576 is achievable with insane next-card-luck and optimal strategy. Probably not something for humans, though.
Interesting question. I made it do a couple of games logging the extreme balances (+-4), and the bot was able to cope with them quite happily when they happened. Presumably this would get harder by the time it reaches 3072, though. move 125: 4-0 move 369: 0-4 move 370: 0-4 move 520: 4-0 score: 69030 max card:1536 moves: 636 move 443: 4-0 move 557: 4-0 move 901: 0-4 score: 86514 max card:1536 moves: 997
Hi nneonneo, great work with your bot! How many attempts did it take to reach that high score? My bot has no automation, I literally have to copy the moves forward and back between the iPad and PC, so I've only made it play two real games so far. That's pretty much the same experience that I had Very interesting. I think my bot is orders of magnitude slower. The deepest I let it run with to make a test over 100 simulations was 3+2 steps (3 steps adding all possible cards to the board in all possible lines, plus 2 steps continuing to move without adding new cards). That way it took about 10 minutes per game, so possibly something like 500 milliseconds per move (hand waving). When doing the expecimax steps, do you also include bonus cards in the search, or just account for 1, 2, 3?
Right, I am mistaken. Is this different from several lookaheads? I thought those just meant the bot tried to think in advance, like a chess player might.
I think the key is the scoring function, since the depth of my lookahead is half of yours. Also, before computing the score of the final position I make two more steps trying all possible moves but WITHOUT adding new cards to the board. This seems to very significantly improve the estimation of how good a position is. Initially I wasn't doing any lookahead at all. The scores weren't very good, but it was running very fast which allowed me to tweak the scoring function to improve the results. There are positive points for empty spaces and for pairs of cards that can be merged. There are also penalties for having a small card between two higher cards, since those configurations are harder to get rid of. The most important part was giving points for cards that can be merged. This encourages the AI to delay merging cards and keeping more options open.
My post above wasn't about the difficulty curve. I just wanted to play around with yEd and see if it could handle graphs of that size [answer: barely but it didn't crash] and maybe try to convey the nature of exponential growth in a visually pleasing way. It's a difference. The oracle bot knows exactly which cards come next (I don't know how much information Nicola's oracle bot has, let's just say it knows 10 cards in advance [including bonus cards!]). The usual bot has to try everything and decide based on that. When the usual bot makes a move its suspicions are partly turned into knowledge: where it had to speculate where the next card comes in, it now knows, where it had to speculate about the card after the one that just entered, it now knows (because of the next card indicator). From the new state it speculates again.
The "oracle" bot has perfect knowledge of exactly which cards will come next, and on which lines they will be inserted. It therefore can work with a lot of information that is not available while playing the game normally. I wrote it to provide a upper bound to what can be expected from the performance of the "normal" bot.
Hey guys, I just put a bunch of this threads math to good use. I have achieved what should have been the max score limit, according to Kamikaze's tweet to Ashervo. I did this in one try, with our friend math. Also, I have a new score, just under 2mil now and I am wondering what the new cap is. Perhaps it only allows the 12288 tile. Perhaps more. Edit: If the devs take issue with me, let me know and help me figure out how to get a fresh start with my save file and I will. I have now 9 devices on it, due to all the fresh installs, even though I only played it on one ipad and one iphone.
Let me link that tweet for you. I just meant that tweet to be a funny/interesting (or finteresting) remark to AsherVo's new daily routine of removing hacked scores from GC. I just picked 1e6 (a million in shorthand) because it was easy to write and probably high enough for legitimate scores of mere mortals to fall under it. It was not meant as a new "highest possible score". We know that there isn't one clearly calculable highest score.
If you were Ashervo, how would you do the score limit? Do you really think he has time every day to go through all the info from each "hacker" do determine their legitimacy, i.e., past games, achievements, other leaderboards, etc.? If it is a formula, what would it be?
Like I said in the tweet, every score that is not divisible by 3 is clearly hacked, no second thought required. Regarding the upper limit for legitimate scores, I'd say it's somewhere around 800,000 (one 6144, one 3072 and some pocket change). But if you want to delve into this topic, I'd have to say: you can never be absolutely sure whether a very high score is hacked or legitimate. It might have been a fluke or it might have been some crazy bot (there are many more out there than were mentioned in this thread). This nicely segues into a new topic: Do you consider using a bot/AI cheating? You are not really playing yourself but you are also not violating any rules of the game. Most games avoid this topic due to their complexity but not Threes!.
Hmm, I think that bots are ok for fun, but impossible to compete with. I don't know how much that matters on GC, since Ashervo said that most people don't use GC to see how good they are relative to to other players. Also, people put a lot of effort into these bots. Ideally, you could choose a separate leaderboards for the bots. On the upper bound subject, I think that at least 12288 must be allowed. That is because one of the achievements requires it. The 1pt one at the end.