Skip to content

Instantly share code, notes, and snippets.

@sshine

sshine/wat.pl Secret

Created September 18, 2019 22:20
Show Gist options
  • Save sshine/f3cdb26c9cd0be45b2c5125841403416 to your computer and use it in GitHub Desktop.
Save sshine/f3cdb26c9cd0be45b2c5125841403416 to your computer and use it in GitHub Desktop.
sub _flatten_choices ($self, $regular_slots, $fallback_slots, $default_slots) {
my $scale_fallbacks = @$default_slots;
my $scale_defaults = @$fallback_slots;
my $scale_regulars = $scale_fallbacks * $scale_defaults;
# Avoid scaling by a common factor.
if ($scale_fallbacks && $scale_defaults) {
my $u = $scale_fallbacks;
my $v = $scale_defaults;
($u, $v) = ($v, $u % $v) while $v;
my $gcd = abs($u);
if ($gcd > 1) {
$scale_fallbacks /= $gcd;
$scale_defaults /= $gcd;
$scale_regulars /= $gcd;
}
}
return [
(@$regular_slots) x max(1, $scale_regulars, $scale_fallbacks, $scale_defaults),
(@$fallback_slots) x max(1, $scale_fallbacks),
(@$default_slots) x max(1, $scale_defaults),
];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment