Lately, I’ve been playing a lot of Genshin Impact. To put exactly how much time I’ve dumped into it, I’m Adventure Rank 54. Despite all of this time, I’ve really struggled to get the artifacts that I want for my characters. Eventually, I asked myself: what are the odds of getting the artifact that I actually want? Then, because I’m a masochist, I wanted to calculate how much resin, and therefore time, I would need to sink into farming to get the artifacts I want. To do this, I’ll be using my trusty friend Python, and my extremely limited knowledge of statistics. With that said, let’s get to it!
Table of Contents
What Is a “Perfect” Artifact?
If you’ve ever tried farming artifacts, you know how incredibly painful this process can be. After all, there is an insane amount of randomness that goes into getting the artifacts that you actually want. In fact, I suspect that the probability of getting a “perfect” set is nearly zero; probably akin to Dream’s speedrun:
Of course, before we can begin crunching numbers, we need to talk about what a perfect artifact even is. Put bluntly: a perfect artifact is one which features all of the primary and substats that you desire for a given hero. For example, if you follow any of the build guides online, you’ve probably seen something like this:
This particular build comes from the Ganyu build by Game8. Basically, it says that you want a particular set of artifacts—in this case Wanderer’s Troupe—with a particular set of stats. For Ganyu, it seems more ATK% is better, so getting a set that features ATK% is a good idea. Of course, this gets a bit messy as we’ll see when we start calculating the odds.
What Are the Odds of Getting a Single Perfect Artifact?
When I talk about odds in this article, I’ll be referring to the shear number of possible combinations of stats an artifact can have. This does not take into account any weight that Genshin Impact might give to particular outcomes. For example, I have no clue if it’s equally as likely to get any of the five artifacts in a set or if certain artifiacts are more likely than others. In other words, it’s very possible that whatever odds we compute are actually conservative and that genuine perfect artifacts are even rarer than they appear.
With that said, let’s start talking the odds of getting a single perfect artifact. The first step in figuring this out is to consider the conditions for the drop. In Genshin Impact, there are artifact domains which each feature a pair of artifact sets. For example, the Valley of Remembrance domain features two artifact sets: Viridescent Venerer and Maiden Beloved. In other words, if you’re trying to get the Maiden Beloved set, you will have an equally likely chance to pull the wrong set per run. Let’s go ahead and save that number in a variable:
number_of_artifact_sets = 2
In addition to that, each artifact set features five different artifacts. In other words, getting the artifact set you want and the correct artifact is already down to a 1 in 10 chance. Again, let’s keep track:
number_of_artifact_sets = 2 number_of_artifacts_in_set = 5
Very quickly, things start to get messy because we now have to ask ourselves the odds of getting a particular primary stat that we actually want. Unfortunately, this differs wildly by artifact. For example, the flower artifact always features an HP main stat. On the opposite end of the spectrum, the goblet can feature almost any substat. Here’s the breakdown for each artifact:
number_of_artifact_sets = 2 number_of_artifacts_in_set = 5 number_of_flower_main_stats = 1 number_of_feather_main_stats = 1 number_of_clock_main_stats = 5 number_of_goblet_main_stats = 11 number_of_crown_main_stats = 7
If we were to go artifact by artifact, we could calculate the odds of getting an artifact with the main stat that we actually want. To do that, we can multiply the first two variables with any of the artifact variables and report the result. For example, getting the flower or feather with the correct main stat has an odds of 1 in 10. Meanwhile, getting the goblet with the correct stats carries odds of 1 in 110.
Already, things aren’t looking good. After all, each run of a domain costs 20 resin, and you only get 160 resin a day (i.e., 8 runs a day). If you want a goblet with a particular main stat, you’re going to be grinding for a long time. On average, the amount of time spent grinding will be about two weeks of daily play:
number_of_artifact_sets = 2 number_of_artifacts_in_set = 5 number_of_flower_main_stats = 1 number_of_feather_main_stats = 1 number_of_clock_main_stats = 5 number_of_goblet_main_stats = 11 number_of_crown_main_stats = 7 domain_resin_cost = 20 daily_resin = 160 odds_of_getting_perfect_main_goblet = number_of_artifact_sets * number_of_artifacts_in_set * number_of_goblet_main_stats runs_per_day = daily_resin / domain_resin_cost time_spent_grinding_for_goblet = odds_of_getting_perfect_main_goblet / runs_per_day
Of course, things only get worse, right? In addition to main stats, there are substats. For 5* artifacts, there are basically two ways this plays out: (1) an artifact drops with 3 substats or (2) an artifact drops with 4 substats. As you can probably imagine, having an artifact with 4 substats is desirable because it provides a slight stat buff. Unfortunately, this means that you’re suddenly half as likely to get the correct number of substats.
Then, there’s this issue of getting the substats that you actually want. This gets a bit messy because the main stat is removed from the pool of possible substats. That said, there are 10 possible substats, of which you can only have 3 or 4. If I remember my statistics correctly, we can calculate the number of combinations using the “n choose k” algorithm:
import math number_of_artifact_sets = 2 number_of_artifacts_in_set = 5 number_of_flower_main_stats = 1 number_of_feather_main_stats = 1 number_of_clock_main_stats = 5 number_of_goblet_main_stats = 11 number_of_crown_main_stats = 7 number_of_possible_substats = 10 number_of_minimum_substats = 3 number_of_maximum_substats = 4 domain_resin_cost = 20 daily_resin = 160 possible_substats_choose_min = math.factorial(number_of_possible_substats) / (math.factorial(number_of_minimum_substats) * math.factorial(number_of_possible_substats - numbe_of_minimum_substats)) possible_substats_choose_max = math.factorial(number_of_possible_substats) / (math.factorial(number_of_maximum_substats) * math.factorial(number_of_possible_substats - numbe_of_maximum_substats))
As someone who is a bit lazy, I ran these numbers through an “n choose k” calculator which gave the results for choosing 3 as 120 and the results for choosing 4 as 210. Now, because these values are independent of each other, I think they can be summed to get the total number of substat combinations, which comes out to 330 combinations for a given artifact.
If we take the number of substat combinations and then multiply it with the values we found before for each type of artifact, we’ll get a new set of odds. For example, the odds of getting the flower artifact with the main stat that we want is 1 in 10. If we have a specific set of substats in mind, the odds significantly drop to 1 in 3300. Here’s what that looks like in terms of days sunk into the game:
import math number_of_artifact_sets = 2 number_of_artifacts_in_set = 5 number_of_flower_main_stats = 1 number_of_feather_main_stats = 1 number_of_clock_main_stats = 5 number_of_goblet_main_stats = 11 number_of_crown_main_stats = 7 number_of_possible_substats = 10 number_of_minimum_substats = 3 number_of_maximum_substats = 4 domain_resin_cost = 20 daily_resin = 160 possible_substats_choose_min = math.factorial(number_of_possible_substats) / (math.factorial(number_of_minimum_substats) * math.factorial(number_of_possible_substats - numbe_of_minimum_substats)) possible_substats_choose_max = math.factorial(number_of_possible_substats) / (math.factorial(number_of_maximum_substats) * math.factorial(number_of_possible_substats - numbe_of_maximum_substats)) number_of_substat_combinations = possible_substats_choose_min + possible_substats_choose_max odds_of_getting_perfect_feather = number_of_artifact_sets * number_of_artifacts_in_set * number_of_feather_main_stats * number_of_substat_combinations runs_per_day = daily_resin / domain_resin_cost time_spent_grinding_for_goblet = odds_of_getting_perfect_feather / runs_per_day # 412.5 days
Now, that’s for an artifact with a fixed main stat. Now imagine how much longer it would take to farm a perfect goblet: scale the number of days by 11, and you’ll have your answer (hint: it’s over 12 years of continuous grinding).
But Wait, It Gets Worse
One of the reasons that a lot of folks argue that you shouldn’t bother trying to find the perfect artifact is not just because it’s nearly impossible; it’s possibly a complete waste of time (like trying to solo climb in Overwatch). See, once you have the artifact with the stats you want, you can’t guarantee that it will scale as expected when you level it.
If you’re not familiar with the artifact leveling system, every 4 levels one of the sub stats will randomly get upgraded. This can be problematic because the substats might not scale in the way that you actually want—rendering the grind somewhat useless.
To make matters worse, the error-prone calculations I made above assume that the drop rates of artifacts are uniformly distributed. In reality, certain artifact stats are actually more likely than others. For example, the current drop rate for any of the elemental bonuses on the goblet is 5%. It is significantly more likely that a goblet will drop HP% (21.25%) or ATK% (21.25%). For an item with a 10% drop rate, the likelihood of getting Cryo DMG Bonus% is abysmally low.
Taken together, the dream for a perfect artifact is almost certainly dead, but don’t take my word for it:
At around the 6-minute mark, they calculate 1/18,480 odds of getting a perfect goblet which is about twice as good as I predicted while still being completely atrocious. We’re talking like at least 6 years of grinding.
Speaking of trash drop rates, there are two sets of artifacts that have an even worse drop rate than anything we’ve discussed up to this point: Gladiator’s Finale and Wanderer’s Troupe. These sets don’t drop from domains but rather in strange ways like from bosses or as adventure rank rewards. This makes them very annoying to farm. Hope you have some time (and money) on your hands because you’ll need it! Or as my buddy, Robert, would say:
Here’s the video that this still comes from, if you’re interested.
The Silver Lining
Okay, so it’s not all bad! In order to get the set bonus for any set of artifacts, you only need to have at most four of the artifacts from the set. Why does this matter? Well, remember how I said that getting the right main stat on a goblet is terrible? Well, by removing the set restriction, you can actually farm four out of five in the set before moving on to another set. If you happen to get a goblet with the right main stat in another set, it doesn’t matter. Give it to the hero that needs it.
By realizing that you don’t need the perfect goblet from the same set, you actually dramatically cut down the time you’ll spend grinding. Suddenly, any goblet is fair game—including the goblet from the same domain that would normally be at odds with your farming. If you factor that in with all the farming you’ll be doing to max out 8 characters for spiral abyss and future content, you’ll have all the goblets you need in no time.
Also, you can increase your odds of satisfaction by prioritizing fewer stats. For instance, instead of looking for the perfect goblet with the right main stat and four correct substats, why not look for a goblet that has the right main stat and two correct substats. The odds are still against you, but you’ll be more satisfied in the long run.
With that said, my brain is quite fried from playing around with math, so it’s time to call it a day. As always, thanks for checking out my work. Hopefully, this different style of content was interesting. If not, no worries! I’ll be back to the usual Python content soon.
Of course, if you liked this content and want to support the site, you can always head over to my list of ways to grow the community. There you’ll find my Discord, Patreon, and YouTube—among other things. Otherwise, thanks for sticking around!
Recently, I was giving a lecture about Java's "common" methods (i.e., all of the methods of Object), and I had epiphany about how Java only has toString() while Python has str() and repr(). So, it...
Magic numbers are numerical constants that have no clear meaning in the code and therefore make code harder to read. Anything that makes code harder to read is something we can use to obfuscate our...