//its also possible to remove the #define OTHERWISE
#include "Util/void.h"
#define prefix4(tup) ((r-=(first tup))<0.0)? tup:
#define roll(tuples...) ({double r=rdouble();blankapply(prefix4,remlast(tuples)) last(tuples);})
int main(){
puts(roll((0.5, "50% chance"),
(0.2, "20% chance"),
(OTHERWISE, "30% chance")));
;}