With the score system I made, HR/EZ get a balanced score by design. In previous posts I have posts I posted some approximate formulas for it, but I think that using a calculation method that is more accurate would better, I wrote some code that can calculate score using double precision floating numbers quite accurately.
The algorithm basically does a maximum likelihood fit of the timing errors in the play, using a normal curve with zero mean, using as input the distribution of the judgments in the play (taking into account their timing windows); the parameter to fit is the standard deviation of the curve (the lower the standard deviation, the more accurate is the play). The timing window of LN releases would be considered be same as of presses, to account for the increased difficulty of releasing accurately (assuming using the current timing windows already balance the difficulty of releases compared to presses)
Then, a penalty is applied based on the amount of judgments in the play, to take into account if the results were just by chance. This is analogous to the case of estimating how loaded a coin is by throwing it 5 times, if you get 5 heads in a row, a safer estimation of the probability of getting a head would be 87.055% (probability when getting at least 5 heads when throwing 5 times happens half of the time) instead of 100% (the probability that makes the result of the throws most likely).
Then, the standard deviation (std) found is mapped to a score value (standard deviation of 0 = 1 million score, standard deviation-> Infinity = 0 score). The exact function used to map standard deviation to score doesn't really matter (as long as it strictly monotonically decreasing), but a good option would be using something in the form of: (A*Erf(a/std) + B*Erf(b/std) + ...)/(A+B+...)*1,000,000, since that way score scales in the same way as a accuracy%/DP/MIGS/Exscore system (while still avoiding the balancing problems those systems have).
Note that since a penalty is applied based on the amount of judgments, getting 1 million score is not possible with a map with a finite amount of notes (you can only get very close, when the amount of notes is high and the timing windows are tight), this might be seen as a problem, but it actually this solves another bigger problem. Without that penalty, getting all rainbows with EZ or No-mod would both give 1 million score, so there would be no reason to ever use HR if you want to maximize your score; with the penalty, using more strict timing windows makes it possible to get closer to 1 million score, giving reason to players to use HR if they can handle it.
Examples of scores (using a standard deviation -> score function that scales similarly to Exscore): Note that those plays were done with Scorev1 mechanics (only 1 judgment per LN), but the idea remains.
https://osu.ppy.sh/b/647965 Drop - Granat [5K EZ] (a very short map)
All Rainbows No-Mod: 993,738 score.
All Rainbows EZ Mod : 966,397 score.
All Rainbows HR Mod: 999,830 score.
https://osu.ppy.sh/b/552745 Soleily - Renatus [Hard], all plays done by me in the same day: Rainbows/300/200/100/50/Miss
1040/641/145/16/4/7 No-Mod: 650,298 score.
1343/446/52/7/0/5 EZ Mod: 646,645 score.
710/745/316/63/3/16 HR Mod: 657,208 score.
https://osu.ppy.sh/b/866194 deadmau5 - Orange File [Emptiness]
235/137/31/1/0/0 No-Mod: 729,438 score.
293/101/10/0/0/0 EZ-Mod: 723,009 score.
170/138/86/9/0/1 HR-Mod: 704,914 score.
All Rainbows No-mod: 999,143 score.
https://osu.ppy.sh/b/746951 UNDEAD CORPORATION - The Empress scream off ver [MX]
677/530/162/23/6/30 No-Mod: 519,410 score.
432/564/295/82/8/47 HR Mod: 544,990 score.
930/408/55/14/1/20 EZ-Mod: 501,934 score
All Rainbows No-mod: 999,757 score.
The algorithm basically does a maximum likelihood fit of the timing errors in the play, using a normal curve with zero mean, using as input the distribution of the judgments in the play (taking into account their timing windows); the parameter to fit is the standard deviation of the curve (the lower the standard deviation, the more accurate is the play). The timing window of LN releases would be considered be same as of presses, to account for the increased difficulty of releasing accurately (assuming using the current timing windows already balance the difficulty of releases compared to presses)
Then, a penalty is applied based on the amount of judgments in the play, to take into account if the results were just by chance. This is analogous to the case of estimating how loaded a coin is by throwing it 5 times, if you get 5 heads in a row, a safer estimation of the probability of getting a head would be 87.055% (probability when getting at least 5 heads when throwing 5 times happens half of the time) instead of 100% (the probability that makes the result of the throws most likely).
Then, the standard deviation (std) found is mapped to a score value (standard deviation of 0 = 1 million score, standard deviation-> Infinity = 0 score). The exact function used to map standard deviation to score doesn't really matter (as long as it strictly monotonically decreasing), but a good option would be using something in the form of: (A*Erf(a/std) + B*Erf(b/std) + ...)/(A+B+...)*1,000,000, since that way score scales in the same way as a accuracy%/DP/MIGS/Exscore system (while still avoiding the balancing problems those systems have).
Note that since a penalty is applied based on the amount of judgments, getting 1 million score is not possible with a map with a finite amount of notes (you can only get very close, when the amount of notes is high and the timing windows are tight), this might be seen as a problem, but it actually this solves another bigger problem. Without that penalty, getting all rainbows with EZ or No-mod would both give 1 million score, so there would be no reason to ever use HR if you want to maximize your score; with the penalty, using more strict timing windows makes it possible to get closer to 1 million score, giving reason to players to use HR if they can handle it.
Examples of scores (using a standard deviation -> score function that scales similarly to Exscore): Note that those plays were done with Scorev1 mechanics (only 1 judgment per LN), but the idea remains.
https://osu.ppy.sh/b/647965 Drop - Granat [5K EZ] (a very short map)
All Rainbows No-Mod: 993,738 score.
All Rainbows EZ Mod : 966,397 score.
All Rainbows HR Mod: 999,830 score.
https://osu.ppy.sh/b/552745 Soleily - Renatus [Hard], all plays done by me in the same day: Rainbows/300/200/100/50/Miss
1040/641/145/16/4/7 No-Mod: 650,298 score.
1343/446/52/7/0/5 EZ Mod: 646,645 score.
710/745/316/63/3/16 HR Mod: 657,208 score.
https://osu.ppy.sh/b/866194 deadmau5 - Orange File [Emptiness]
235/137/31/1/0/0 No-Mod: 729,438 score.
293/101/10/0/0/0 EZ-Mod: 723,009 score.
170/138/86/9/0/1 HR-Mod: 704,914 score.
All Rainbows No-mod: 999,143 score.
https://osu.ppy.sh/b/746951 UNDEAD CORPORATION - The Empress scream off ver [MX]
677/530/162/23/6/30 No-Mod: 519,410 score.
432/564/295/82/8/47 HR Mod: 544,990 score.
930/408/55/14/1/20 EZ-Mod: 501,934 score
All Rainbows No-mod: 999,757 score.